#include <TimerOne.h>
#define LED_VERDE 8
#define LED_VERMELHO 9
#define BOTAO 2
volatile bool carregando = false;// Flag para indicar carregamento
bool bateriaCarregada = false;
bool chave = false;
unsigned long previousMillis = 0;
const long interval = 2000;
void iniciarCarregamento() {
carregando = !carregando;// Ativa o carregamento
digitalWrite(LED_VERDE, HIGH);// Acende o LED verde
Serial.println("Iniciando carregamento.");
}
void pararCarregamento() {
carregando = !carregando;// Desativa o carregamento
digitalWrite(LED_VERDE, LOW);// Apaga o LED verde
Serial.println("Parando carregamento.");
}
void handleBotao() {
// Armazena o tempo atual
unsigned long currentMillis = millis();
// Verifica se o tempo atual menos o tempo anterior é maior que o intervalo
if (currentMillis - previousMillis >= interval){
// Salva o tempo atual para a próxima verificação
previousMillis = currentMillis;
// Alterna entre iniciar ou parar o carregamento
if (carregando) {
pararCarregamento();
} else {
iniciarCarregamento();
}
}
}
void setup() {
// Configuração de pinos
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
pinMode(BOTAO, INPUT_PULLUP);
// Configuração da interrupção no botão
attachInterrupt(digitalPinToInterrupt(BOTAO), handleBotao, RISING);
Timer1.initialize(300000000);// 5 minutos
Timer1.attachInterrupt(interrupcao);
Serial.begin(9600);
Serial.println("Sistema iniciado.");
}
void loop() {
if(bateriaCarregada){
int count = 0;
Serial.println("Bateria carregada...");
while(count <= 10){
chave = !chave;
if(chave){
digitalWrite(LED_VERDE, HIGH);
}else{
digitalWrite(LED_VERDE, LOW);
}
delay(1000);
count ++;
}
pararCarregamento();
bateriaCarregada = !bateriaCarregada;
}
}
void interrupcao(){
if(carregando){
bateriaCarregada = !bateriaCarregada;
}
}