недавно я видел это интересное видео о снижении мощности arduino m0. https://www.youtube.com/watch?v=wmWqkJ97Zsc И я понял, что это действительно поможет моей станции контроля качества воздуха измерять гораздо больше времени. Мне нужно уложить мой Arduino в спящий режим после получения некоторого значения, например, если температура выше 20 градусов, Arduino сам уснет. В видео упоминается период бодрствования с помощью булавки или будильника. Я хочу использовать период пробуждения, используя часы rt c. Я прошу вашей помощи, потому что я не знаю, правильно ли я понимаю.
Я узнал (вероятно, правильно): код работает. Сначала настраиваются часы rt c, а затем и будильник (есть сигнал для пробуждения arduino из спящего режима). Во-вторых, наши часы rt c отсчитали до 10 секунд, поэтому будильник включился, и arduino пробудился => arduino находился в режиме ожидания в течение 10 секунд. В-третьих, включается светодиод, чтобы сообщать, что arduino не спит?
Пожалуйста, исправьте мое определение, если в нем есть ошибки.
Итак, как я упоминал ранее, я хочу разбудить Arduino после получения какое-то значение. Итак, мой последний вопрос: если я поставлю перед этой функцией будильника функцию «if» и снова со временем сброслю переменные, могу ли я получить то, что хотел?
Вот код для вас, ребята
#include <RTCZero.h>
/* Create an rtc object */
RTCZero rtc;
/* Change these values to set the current initial time */
const byte seconds = 0;
const byte minutes = 00;
const byte hours = 00;
/* Change these values to set the current initial date */
const byte day = 24;
const byte month = 9;
const byte year = 16;
void setup()
{
delay(5000); //delay so we can see normal current draw
pinMode(LED_BUILTIN, OUTPUT); //set LED pin to output
digitalWrite(LED_BUILTIN, LOW); //turn LED off
rtc.begin(); //Start RTC library, this is where the clock source is initialized
rtc.setTime(hours, minutes, seconds); //set time
rtc.setDate(day, month, year); //set date
rtc.setAlarmTime(00, 00, 10); //set alarm time to go off in 10 seconds
//following two lines enable alarm, comment both out if you want to do external interrupt
rtc.enableAlarm(rtc.MATCH_HHMMSS); //set alarm
rtc.attachInterrupt(ISR); //creates an interrupt that wakes the SAMD21 which is triggered by a FTC alarm
//comment out the below line if you are using RTC alarm for interrupt
// extInterrupt(A1); //creates an interrupt source on external pin
//puts SAMD21 to sleep
rtc.standbyMode(); //library call
//samSleep(); //function to show how call works
}
void loop()
{
//do nothing in main loop
}
//interrupt service routine (ISR), called when interrupt is triggered
//executes after MCU wakes up
void ISR()
{
digitalWrite(LED_BUILTIN, HIGH);
}
//function that sets up external interrupt
void extInterrupt(int interruptPin) {
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(interruptPin, ISR, LOW);
}
//function to show how to put the
void samSleep()
{
// Set the sleep mode to standby
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
// SAMD sleep
__WFI();
}