Объявление 'varDay' как ошибка массива ссылок
Я пытаюсь написать функцию для хранения данных о дате и времени из модуля RTC. Я использовал массивы символов для реализации функции. Я получаю "декларацию 'varDay' как массив ссылок" ошибка при компиляции.
Я все еще изучаю массивы символов и манипулирую ими, поэтому, возможно, я совершаю очень очевидную ошибку. Не могли бы вы объяснить, что я делаю неправильно?
#include <RTClib.h>
RTC_DS3231 rtc;
void setup() {
Serial.begin(115200);
#ifndef ESP8266
while (!Serial); // ждем подключения последовательного порта. Нужен для родного USB
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (rtc.lostPower()) {
Serial.println("RTC lost power, let's set the time!");
// Когда необходимо установить время на новом устройстве или после сбоя питания,
// следующая строка устанавливает RTC на дату & время составления этого скетча
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
unsigned long newTime = millis();
static unsigned long oldTime = 0;
char varYear [] = "1234";
char varMonth [] = "00";
char varDay [] = "00";
char varHour [] = "00";
char varMinute [] = "00";
char varSecond [] = "00";
unsigned int varEpoch;
char varDate [] = "123456789";
char varTime [] = "12345678";
char dash [] = "-";
char colon [] = ":";
if (newTime - oldTime >= 60000) {
oldTime = newTime;
getDate(varDay, varMonth, varYear, varDate, dash, colon);
}
}
void getDate (char &varDay[3], char &varMonth[3], char &varYear[5], char &varDate[11], char &dash[2], char &colon[2]) {
DateTime now = rtc.now();
strcpy (varDay, now.day());
strcpy (varMonth, now.month());
strcpy (varYear, now.year());
strcat (varDate, varDay) ;
strcat (varDate, dash);
strcat (varDate, varMonth);
strcat (varDate, dash);
strcat (varDate, varYear)
Serial.println(varDate);
}
@Zaffresky, 👍0
1 ответ
Лучший ответ:
▲ 1
char &varDay[3]
— это массив из 3 ссылок на тип char, а не ссылка на тип char размера 3.
Вместо этого просто передайте указатель:
void getDate (char *varDay, char *varMonth, char *varYear, char *varDate, char *dash[2], char *colon[2]) {
Также:
strcpy (varDay, now.day());
strcpy (varMonth, now.month());
strcpy (varYear, now.year());
Это не сработает. Вы не можете скопировать число в строку. now.day() и т. д. необходимо сначала преобразовать в строку.
Было бы лучше отформатировать вашу строку с помощью snprintf:
snprintf(varDate, 11, "%02d-%02d-%04d", now.day(), now.month(), now.year());
,
@Majenko
Смотрите также:
- форматирование строк в Arduino для вывода
- Проблемы с преобразованием byte[] в String
- Чтение строки, разделенной запятыми
- Использование строки вместо строки C, еще одна попытка затронуть загруженную проблему
- Разделение Serial.readString на массив строк
- GSM-модуль Arduino + строка SMS, отправляющая мусорное значение
- Преобразование JSON в строку для MQTT
- strcmp, похоже, не работает
Большое спасибо. Я прочитал ваш пост «Зло строк Arduino», поэтому пытался реализовать это без использования класса String. Итак, это была моя первая попытка работы с массивами символов. Я не знал о функции snprintf, поэтому узнал кое-что новое :) хотя еще многое предстоит узнать, @Zaffresky