Как заставить RTC DS3231 установить правильное время? - PullRequest
0 голосов
/ 12 июня 2019

Мы пытаемся запустить код, который требует, чтобы RTC устанавливал тревогу в реальном времени, которая используется в RTC.

Мы пытались добавить код с веб-сайта arduino и других кодеров, но, похоже, ничего не работает и не исправляет ошибку.Код каким-то образом поврежден, и мы не знаем, где это исправить.В других случаях, которые мы пробовали, код работал отлично, и теперь внезапно он не работает.Подключения питания аккумулятора и RTC имеют питание и подачу напряжения на них.Код просто сломался, и я не знаю почему.Пожалуйста помоги!

// RTC setup
  Wire.begin();
  rtc.begin();
  rtc.adjust(DateTime(__DATE__, __TIME__));                                                                   
// sets date/time of RTC to time of compilation
  rtc.armAlarm(1, false);
  rtc.clearAlarm(1);
  rtc.alarmInterrupt(1, false);
  rtc.armAlarm(2, false);
  rtc.clearAlarm(2);
  rtc.alarmInterrupt(2, false);
  rtc.writeSqwPinMode(DS3231_OFF);

sensors.requestTemperatures();
  temp = sensors.getTempCByIndex(0);
  temp = sensors.getTempCByIndex(0);
}

//note pull all other pins low to reduce consumption!

// ------------------- MAIN -------------------
void loop() {
  if (bt_conn && !collecting) {
    while (!getCommand());                                                                                    
// wait for a command to be processed
  }
  if (collecting) {
    // This is run to put the device to sleep
    DateTime curtime = rtc.now();                                                                             
// get current time
    Serial.println (curtime.minute());
    rtc.setAlarm(ALM1_MATCH_HOURS, (curtime.minute() + 1) % 1, 
(curtime.hour()) % 24, 0);                    // set wake up alarm 
changed from 60 to 1 for trial runs**
    rtc.alarmInterrupt(1, true);
    attachInterrupt(digitalPinToInterrupt(RTCINT), rtcInt, LOW);                                              
// enable interrupt for data collection
    Serial.println("Alarm set for: " + String(curtime.hour()) + ":" + 
String((curtime.minute() + 1) % 60));
    bt.println("Alarm set for: " + String(curtime.hour()) + ":" + 
String((curtime.minute() + 1) % 60));
    waitForSerial();
    LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);                                                      
// sleep until alarm wakes up the device
    get_data = true;
    detachInterrupt(digitalPinToInterrupt(RTCINT));                                                           
// remove alarm interrupt to prevent multiple calls
  }
  if (get_data) {
    // when the device wakes up, get_data is True, enabling a one time 
sample. This configuration prevents a bluetooth interrupt from triggering 
a sample event
    Serial.println("getting datapoint");
    bt.println("bt: getting datapoint");
    writeLine();
    get_data = false;
  }
}

Теоретически, этот код должен запускать время и устанавливать будильник для правильной даты и времени дня.

...