TimeAlarms перестает работать при использовании setSyncProvider(RTC.get) DS1307
Я работаю над этим проектом уже некоторое время, как указано в заголовке, когда я удаляю комментарий setSyncProvider(RTC.get)
в настройке, программа не может получить ни одного из Alarm. timerOnce
для запуска.
Я застрял на некоторое время и не смог ничего найти, просто гугля, поэтому решил заручиться поддержкой стека.
#include <Wire.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <DS1307RTC.h> // базовая библиотека DS1307, которая возвращает время в виде time_t
//#define DS1307_I2C_ADDRESS 0x68 // адрес I2C Tiny RTC
//байт секунда, минута, час, день недели, день месяца, месяц, год;
int curPin = 7, // Датчик тока (средняя клемма), подключенный к аналоговому выводу A7
prePin = 6, // Датчик давления (зеленая клемма), подключенный к аналоговому контакту A6
ignPin = 7, // Выходной контакт зажигания D7
solPin = 8, // Выходной контакт соленоида D8
genPin = 9, // Выходной контакт генератора D9
tonePin = 11, // вывод тона D11
ligPin = 3, // Светочувствительный контакт A3
intPin = 3, // На выводе прерывания D3 выполняется двойной удар
runTime = 20, // минут до пробежки
state = 0; // состояние работы
bool operate = false, // Истина, если во время работы
timeIsSet = false; // true, если установлено время до следующей операции
double cur;
void setup() {
Wire.begin();
pinMode(13,OUTPUT);
pinMode(ignPin, OUTPUT);
pinMode(solPin, OUTPUT);
pinMode(genPin, OUTPUT);
Serial.begin(9600);
//setSyncProvider(RTC.get); //******************************************
Alarm.alarmRepeat(dowMonday,7,30,0,OnAlarm);
Alarm.alarmRepeat(dowTuesday,7,30,0,OnAlarm);
Alarm.alarmRepeat(dowWednesday,7,30,0,OnAlarm);
Alarm.alarmRepeat(dowThursday,7,30,0,OnAlarm);
Alarm.alarmRepeat(dowFriday,7,30,0,OnAlarm);
Alarm.alarmRepeat(dowSaturday,8,30,0,OnAlarm);
Alarm.alarmRepeat(dowSunday,10,0,0,OnAlarm);
Alarm.alarmRepeat(20,0,0,OffAlarm);
tone(tonePin, 31, 1000);
randomSeed(analogRead(0)); // ничего не связано с 0, поэтому чтение видит шум
OnAlarm();
}
void loop() {
if ((analogRead(ligPin) > 30) && operate == true)
{
if (timeIsSet == false)
{
tone(tonePin, 58, 500);
int randm = random(27,36);
Alarm.timerOnce(randm,operation);
Serial.println(randm);
timeIsSet = true;
}
}
digitalClockDisplay();
Alarm.delay(1000); // ждем одну секунду между отображением часов
}
void operation(){
tone(tonePin, 100, 1000);
Alarm.timerOnce(12,after20m);
digitalWrite(genPin, HIGH);
}
void after20m(){
digitalWrite(genPin, LOW);
Alarm.timerOnce(5,after5s);
digitalWrite(solPin, HIGH);
tone(tonePin, 494, 1000);
timeIsSet = false;
}
void after5s(){
tone(tonePin, 200, 1000);
digitalWrite(solPin, LOW);
Alarm.timerOnce(1,after1s);
}
void after1s()
{
digitalWrite(ignPin, HIGH);
Alarm.delay(500);
digitalWrite(ignPin, LOW);
}
void OnAlarm() {
operate = true;
}
void OffAlarm() {
operate = false;
}
// Преобразуем обычные десятичные числа в двоично-десятичные
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Преобразуем двоично-десятичные числа в обычные десятичные числа
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
void digitalClockDisplay() {
// цифровые часы, показывающие время
Serial.print(hour());
printDigits(minute());
printDigits(second());
//Serial.print(работа);
Serial.println();
}
void printDigits(int digits) {
Serial.print(":");
if (digits < 10)
Serial.print('0');
Serial.print(digits);
}
@FallenRecruit, 👍0
1 ответ
▲ -1
Проблема существовала в библиотеке TimeAlarms
Q: How many alarms can be created?
A: Up to six alarms can be scheduled.
The number of alarms can be changed in the TimeAlarms header file (set by the constant
dtNBR_ALARMS,
note that the RAM used equals dtNBR_ALARMS * 11)
Итак, я исправил это, отредактировав #define dtNBR_ALARMS 6 // максимум 255
на #define dtNBR_ALARMS 14 // максимум 255
в TimeAlarms .h
файл.
,
@FallenRecruit
Смотрите также:
- Преобразование в Unix Timestamp и обратно
- Разница между «time_t» и «DateTime»
- Библиотека времени Arduino и библиотеки RTC
- Не удалось выделить SSD1306 при добавлении константы
- Как найти разницу между двумя timestamp
- Ошибка модуля часов реального Времени-DS3231
- Как установить RTC в ES32 с помощью NTP-сервера?
- Синхронизация библиотеки времени и RTClib
это должен быть ответ или дополнение? вы можете отредактировать вопрос, @Juraj
Похоже на ответ для меня. :), @Nick Gammon