Как заставить прерывание работать только в ISR без запуска основного кода - PullRequest
1 голос
/ 02 мая 2020

Я работаю над фрагментом кода, который считает импульсы, пока микроконтроллер находится в состоянии глубокого сна. Я хотел бы, чтобы внешнее прерывание просто запускало ISR, которое просто увеличивает счетчик. Однако я заметил, что данные передаются всякий раз, когда генерируются импульсы, если указанный в коде интервал c установлен. Ниже приведен мой код, иллюстрирующий то, что я хотел бы сделать.

#include "LowPower.h"

const uint8_t btn =2;
volatile int power = 0;
void setup() {
   Serial.begin(9600);
    pinMode(btn, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(btn), count, FALLING);

}

void loop() {
   Serial.print("Power: ");
 Serial.println(power);
  delay(50);
  for (int i = 0; i < 8; i++) {
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); // Put Arduino in Sleep mode 8 times 8 seconds
  }

}
void count() {
  power += 1;
}

Из приведенного выше кода я ожидал бы увидеть, что последовательный оператор печатается примерно чуть более минуты каждый раз, но не всякий раз, когда генерируется прерывание. , Есть что-то, чего мне не хватает, спасибо.

1 Ответ

0 голосов
/ 02 мая 2020

Из this с использованием LowPower может показаться, что последовательная связь может использоваться для выхода из режима powerDown (что хорошо, так как вы не хотите, чтобы буфер последовательных портов заполнялся) , К сожалению, это также относится и к прерываниям.

Это объясняет, что вы видите.

...