Arduino спит, пока цифровой пин-сигнал ВЫСОКИЙ - PullRequest
0 голосов
/ 22 марта 2020

Я хочу, чтобы Arduino Pro Mini работал на 3,7 В (4,2 В при полностью заряженном) литий-ионном аккумуляторе.

В проекте я буду использовать ИК-датчик для управления реле. На основании принятого ИК-кода я переключу вывод цифрового выхода реле (ВЫСОКИЙ или НИЗКИЙ). Сначала arduino устанавливается в режим глубокого сна, и когда он получает внешнее прерывание (контакт 2 на мини-мониторе), он обрабатывает ИК-код и включает реле.

//Interrupts using Arduino
//Circuit Digest

#include "LowPower.h"
#include <IRremote.h>

volatile int output = LOW;
int i = 0;
#define RECV_PIN 2
volatile boolean sleepEnabled = true;

IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()

{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  irrecv.enableIRIn();
  pinMode(RECV_PIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(RECV_PIN), buttonPressed1, RISING); //  function for creating external interrupts at pin2 on Rising (LOW to HIGH)
}

void loop()
{
  Serial.println(i);
  ++i;
  delay(1000);
  output = LOW;
  digitalWrite(13, output);    //Turns LED ON or OFF depending upon output value
  if (sleepEnabled == true) {
    Serial.println("Going to sleep");
    delay(1000);
    LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
  }
  delay(500);
  readIR();

}

void buttonPressed1()           //ISR function excutes when push button at pinD2 is pressed
{
  sleepEnabled = false;
}

void readIR() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);

    if (results.value == 0xff4ab5) {
      sleepEnabled = true;
    }

  }
  irrecv.resume(); // Receive the next value
}

Когда устройство -мини возвращается в сон, все выключено.

Как я могу заставить pro-mini потреблять минимальную мощность, когда вывод реле ВЫСОКИЙ?

...