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);
}

, 👍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 файл.

,