Вопрос по программированию для Time Arduino

Можете ли вы запрограммировать скетч так, чтобы, если время находится в диапазоне от 1 минуты до 10 минут, он сам сбрасывался? Сброс я нашел уже, это если что я не знаю.

, 👍-1

Обсуждение

Вы пытаетесь перезагрузить плату каждую минуту? Потому что, когда он увидит, что время чуть больше 1 минуты, он сбросится. Это то, что вы имели ввиду?, @bpinhosilva

Вы боретесь с операторами if()?, @benathon


1 ответ


2

Вы можете использовать прерывания таймера. Например:

#define F_CPU   16000000UL
#include <avr/delay.h>
#include <avr/io.h>
#include <string.h>
#include <avr/interrupt.h>
...
ISR(TIMER1_COMPA_vect)
{

  // делать что-то каждую секунду, когда вызывается прерывание.

}
void setup()
{
/*следующий код установит регистр таймера для генерации прерывания
при достижении 15624, при тактовой частоте 16 МГц и предделителе 1024. Это означает, что каждую секунду генерируется прерывание
*/
  cli();          // отключаем глобальные прерывания
  TCCR1A = 0;     // установить весь регистр TCCR1A в 0
  TCCR1B = 0;     // то же самое для TCCR1B

  // установить сравнение регистра совпадения с желаемым счетчиком таймера:
  OCR1A = 15624;
  // включить режим CTC:
  TCCR1B |= (1 << WGM12);
  // Установите биты CS10 и CS12 для предделителя 1024:
  TCCR1B |= (1 << CS10);
  TCCR1B |= (1 << CS12);
  // включить прерывание сравнения таймера:
  TIMSK1 |= (1 << OCIE1A);
  sei();          // разрешить глобальные прерывания
}

Код работает на Arduino Uno. Вы должны рассчитать значение OCR1A для вашей частоты.

,