Использование часов реального времени (RTC) на экране регистрации данных Arduino
Я пытаюсь установить и прочитать время на щите регистрации данных Adafruit для Arduino, но открытый исходный код на веб-сайте Adafruit, похоже, не работает, поскольку он возвращает несколько ошибок, таких как "RTC_DS1307" не называет тип и сказать, что несколько переменных выходят за рамки. Код является:
enter code here #include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
// uncomment it & upload to set the time, date and start run the RTC!
//RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" since 1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
// calculate a date which is 7 days and 30 seconds into the future
DateTime future (now.unixtime() + 7 * 86400L + 30);
Serial.print(" now + 7d + 30s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
delay(3000);
}
У кого-нибудь есть идеи, как это решить? Большое спасибо!
5 ответов
У меня такая же проблема. Кажется, что когда я распаковал zip-файл, он создал rtc-файл внутри другого файла. Таким образом, всякий раз, когда вы вызываете библиотеку во время выполнения эскиза, она не сможет найти ее, так как файл заголовка находится в другой папке.
Что вам нужно сделать, это просто убедиться, что вы скопировали папку RTClib (которая содержит файлы заголовков) непосредственно в библиотеку Arduino.
Не копируйте папку, содержащую папку RTClib.
Извините за мой английский, я не являюсь носителем языка.
Это может быть несколько месяцев позже, но #include "RTCLib.h"
ищет в текущей папке проекта файл RTCLib.h, а #include <RTCLib.h>
выглядит в папке библиотеки. Если приведенный выше код приведен в виде эскиза (т. Е. Не является файлом примера в библиотеке), изменение оператора include может исправить ваш код.
Вы должны использовать функцию библиотеки импорта, доступную в Arduino IDE.
В главном меню выберите
Sketch | Import Library | Add library
и укажите путь к папке, в которой хранятся файлы библиотеки.
Если вы хотите создать эскиз, который использует эту библиотеку, просто выберите
Sketch | Import library
и выберите имя библиотеки из списка. Правильный заголовок будет автоматически включен в верхней части вашего эскиза.
Я думаю, что вы не включаете правильные заголовки библиотек.
Попробуйте изменить
#include "RTCLib.h"
в
#include <RTCLib.h>
Убедитесь, что у вас есть соответствующие библиотеки и заголовки для щита.
У меня была точно такая же проблема, и я решил ее следующим образом:
Эскиз ищет библиотеку RTC в:
C:\users\<userid>\Documents\Arduino\libraries
Вы должны установить библиотеку самостоятельно (и закрыть все экземпляры Arduino IDE перед тем, как сделать это, поскольку она обнаруживает библиотеки только при запуске):
- Загрузка его с: https://github.com/adafruit/RTClib
- Распаковка zip-файла
- Переименование внутренней части двух папок с именем "RTClib-master" на "RTClib" (примечание - это папка, которая содержит файл readme.txt, а также другие файлы)
- Перемещение этой папки в каталог библиотеки, упомянутый выше
- Перезапустите IDE