Сигнализация RP2040 RTC или аналогичная функция

arduino-nano-rp2040

У меня есть плата rp2040, использующая ядро Earl E. Philhower. Я хотел бы использовать функции rtc точно так же, как упомянутые в sdk. Особенно функция сигнализации, которая имеет решающее значение в моем проекте.

Предположительно из того, что я знаю, у вас есть доступ ко всем функциям в sdk в среде IDE arduino, но когда я опробовал пример в sdk, он не компилировался, говоря, что функции rtc не объявлены

char datetime_buf[256];
char *datetime_str = &datetime_buf[0];

    datetime_t t = {
            .year  = 2020,
            .month = 06,
            .day   = 05,
            .dotw  = 5, // 0-воскресенье, поэтому 5-пятница
            .hour  = 15,
            .min   = 45,
            .sec   = 00
    };
    
void setup() {
    Serial.begin(9600);
    Serial.println("Hello RTC!");

    rtc_init();
    rtc_set_datetime(&t);
}

void loop() {
        rtc_get_datetime(&t);
        
        Serial.println(datetime_str);
        sleep_ms(100);
}

Эрл Э. Филхауэр поставляется с примером скетча времени, но проблема в том, что я не смог найти документацию, если существует функция, подобная сигналу тревоги

/* Простая демонстрация настройки и печати текущего времени */
/* Начальное время должно быть получено от RTC, NTP или пользователя */

/* Выпущено в общественное достояние Эрлом Ф. Филхауэр, III <[email protected]> */

#include <time.h>
#include <sys/time.h>

void setup() {
  Serial.begin(115200);
  delay(5000);
  struct timeval tv;

  tv.tv_sec = 1611198855; // 21 января 2021 3:14:15 утра ...Выпуск RPi Pico;
  tv.tv_usec = 0;
  settimeofday(&tv, nullptr);
}

void loop() {
  time_t now;
  char buff[80];

  time(&now);
  strftime(buff, sizeof(buff), "%c", localtime(&now));
  Serial.println(buff);
  delay(1000);
}

, 👍1

Обсуждение

Вы `#включили "оборудование/rtc.h" при попытке использовать RTC из SDK?, @Majenko

@Majenko Да, он не смог найти библиотеку. фатальная ошибка: аппаратное обеспечение/rtc.h: Нет такого файла или библиотеки решений директорий(аппаратное обеспечение/rtc.h), @Jack


1 ответ


Лучший ответ:

3

Вы можете попробовать использовать мою библиотекуRP2040_RTC, особенно этот примерRP2040_RTC_Alarm.

Поддерживаются как ArduinoCore-mbed, так и ядра arduino-pico Earle Philhower.

,

Это выглядит красиво, в нем даже есть пример того, как получить время через ethernet, что является одной из причин тревоги, мне нужно обновлять время каждые 6 часов., @Jack

кстати , это аппаратная реализация RTC?, @Jack

ДА. Это аппаратный RTC RP2040, как указано в разделе 4.1.21. hardware_rtc [Raspberry Pi Pico-C/C++ SDK](https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-c-sdk.pdf), @khoih-prog

Круто, спасибо, что сделали библиотеку :), @Jack

У меня есть вопрос о сигналах тревоги, если сигнал тревоги сработает, это вызовет прерывание, верно? и точно так же, как работают стандартные прерывания, он остановит все, что делает, и обработает это прерывание правильно?, @Jack

ДА. Проверьте код ISR здесь [RP2040_RTC_Alarm.ino#L54-L58](https://github.com/khoih-prog/RP2040_RTC/blob/main/examples/Alarm/RP2040_RTC_Alarm/RP2040_RTC_Alarm.ino#L54-L58). ISR просто устанавливает флаг, и флаг считывается и обрабатывается в цикле() в [RP2040_RTC_Alarm.ino#L179-L186](https://github.com/khoih-prog/RP2040_RTC/blob/main/examples/Alarm/RP2040_RTC_Alarm/RP2040_RTC_Alarm.ino#L179-L186), @khoih-prog

Другой вопрос, сколько сигналов тревоги может быть установлено в данный момент времени?, @Jack