O senhores mestres, eu sou um precipiante em programar arduino fiz um pequeno projeto e a curiosidade abriu mais portas nao sou um programador formado apenas um curioso, talve minha pergunta para vcs seja facil de resolverl mas eu ja estou de cabelo branco e não consigo sair do lugar, decidi dar um passo maior que a perna e estou tentando fazer um alarme mas nao sei se é possivel fazer isso no arduino.
" meu projeto esta tirando meu sono pois nao tenho conhecimento suficiente para achar o erro, o objetivo do alarme é ele ser acionado depois de um determinado tempo.
exemplo o alarme vai ter um pushbuttom para acender 3 led isso mesmo,
1 toque acende o led do tempo de 10 segundos assim que tocar o pusshbutton ele acende o led de 10 segundos e depois desse 10 segundo ele liga o sensor pir para registra o movimento.
e assim com os outros led ao toque o pushbutton novamente ele apaga o led 1 e acende o led 2 indicando que o tempo de 30 segundos esta ativado, entao o sensor pir passa a ser ligado depois de 30 segundos.
0 3 led vai ser o tempo de 60 segundos ao clicar no pushbutton novamento ele amante o led 1 apagado, apaga o led 2 e acende o led 3 indicando que o tempo de 60 segundo esta acionado entao o sensor pir so vai ligar depois de 60 segundos.
eu nao tenho experiencia com programaçao mais sei emendar codigo, o codigo que montei não da erro porem tambem não funciona. todos os entradas e saidas estao ok mas a funçao em si nao funciona eu não consigo fazer com que o botao chame a funçao quando pressionado se alguem puder colocar uma luz fo ninal do tunel eu ficaria muito grato obrigado a todos.
#include <SPI.h>
#define LED_SISTEMA_LIGADO 9
const int buttonPin = 11;
const int LED_1 = 4;
const int LED_2 = 5;
const int LED_3 = 12;
const int pinoPIR = 6; // Pino do Sensor PIR
const int led_ligado = 10; // LED/BUZZER ALERTA TOCANDO
const int LED_MOVIMENTO = 8; // Pino do Alarme/LED
const int pinoAlarmeBuzzer = 7; // Buzzer
//alarme dispara apos esse tempo
const unsigned long tempoEspera1 =10000; // 10 segundo
const unsigned long tempoEspera2 = 30000; // 30 segundos
const unsigned long tempoEspera3 = 60000; // 60 segundos
// condição tempo
unsigned long tempoUltimoMovimento = 0;
//unsigned long tempo;
bool ultimo_estado;
bool alarmeAtivo = false;
int buttonState = 0;
int lastButtonState = 0;
int mode = 0; // Alternar modos
void setup() {
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); // Usa resistor interno
pinMode(pinoPIR, INPUT);
pinMode(pinoAlarmeBuzzer, OUTPUT);
pinMode(LED_MOVIMENTO, OUTPUT);
pinMode(LED_SISTEMA_LIGADO, OUTPUT);
Serial.begin(9600); //Inicializa serial para debug
SPI.begin(); // Inicia SPI bus
tempoUltimoMovimento = millis(); // Inicia o tempo
}
void loop()
{
buttonState = digitalRead(buttonPin);
tempoUltimoMovimento = millis(); // Inicia o tempo
digitalWrite(LED_SISTEMA_LIGADO, HIGH); // led INDICA SISTEMA LIGADO
int estadoPIR = digitalRead(pinoPIR);
/// teste dos botoes
if (buttonState != lastButtonState) {
if (buttonState == LOW) { // Botão pressionado
mode++;
if (mode > 3) mode = 0;
// Lógica para ligar LEDs
//if (mode == 1) { digitalWrite(estadoPIR, HIGH); digitalWrite(LED_1, HIGH); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW); } // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO
if (mode == 1) { digitalWrite(LED_1, HIGH); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW);
////////////////////// estado pir 10 SEGUNDOS
if (estadoPIR == HIGH) { // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO NAO CHAMA A AÇAO DE 10 SEGUNDOS
// Movimento detetado:
tempoUltimoMovimento = millis();
digitalWrite(pinoAlarmeBuzzer, HIGH); // liga Buzzer do alarme
alarmeAtivo = true;
}
else {
// movimento: verifica se passaram 10 SEGUNDOS
if (millis() - tempoUltimoMovimento >= tempoEspera1) {
digitalWrite(led_ligado, LOW); // DESAtiva alarme
digitalWrite(pinoAlarmeBuzzer, LOW); // DESAtiva Buzzer do alarme
if (!alarmeAtivo) {
Serial.println(" ALARME DESATIVADO");
delay(500);
alarmeAtivo = false;
}
////////////////estado pir 30 segundos
//else if (mode == 2) { digitalWrite(estadoPIR, HIGH); digitalWrite(LED_1, LOW); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, LOW); //} // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO
else if (mode == 2) { digitalWrite(LED_1, LOW); digitalWrite(LED_2, HIGH); digitalWrite(LED_3, LOW);
if (estadoPIR == HIGH) { // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO NAO CHAMA A AÇAO DE 30 SEGUNDOS
// Movimento detetado: reinicia o contador
tempoUltimoMovimento = millis();
digitalWrite(led_ligado, HIGH); // Desliga o led do alarme
digitalWrite(pinoAlarmeBuzzer, HIGH); // Desliga Buzzer do alarme
alarmeAtivo = true;
Serial.println("Movimento detetado ");
delay(200);
} else {
// verifica se passaram 30 SEGUNDOS
if (millis() - tempoUltimoMovimento >= tempoEspera2) {
digitalWrite(pinoAlarmeBuzzer, LOW); // DESAtiva Buzzer do alarme
if (!alarmeAtivo) {
Serial.println(" ALARME DESATIVADO");
delay(500);
alarmeAtivo = false;
}
////////////////estado pir 60 SEGUNDOS
//else if (mode == 3) { digitalWrite(estadoPIR, HIGH); digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, HIGH); //} // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO
else if (mode == 3) { digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, HIGH);
if (estadoPIR == LOW) { // FALHA NESTE COMANDO NAO FUNCIONA OS LEDS E O BOTAO NAO CHAMA A AÇAO DE 60 SEGUNDOS
// Movimento nao detectado:
tempoUltimoMovimento = millis();
}
digitalWrite(pinoAlarmeBuzzer,LOW); // DESliga Buzzer do alarme
delay(200);
alarmeAtivo = true;
} else {
// ACIONA APOS 60 SEGUNDOS
if (millis() - tempoUltimoMovimento >= tempoEspera3) {
digitalWrite(led_ligado, HIGH); // Ativa alarme
digitalWrite(pinoAlarmeBuzzer, HIGH); // Ativa Buzzer do alarme
if (!alarmeAtivo) {
Serial.println(" ALARME DESATIVADO");
delay(500);
alarmeAtivo = false;
}
else{ digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); digitalWrite(LED_3, LOW); }
}
delay(50); // Debounce
}
lastButtonState = buttonState;
}
}
}
}
}
}
}
}
}