Paso 2: El cerebro
La alarma funciona como sigue:
- El arduino se mantiene dormido para ahorrar energía.
- Cada 30s, el arduino se despierta para ver si el interruptor de la puerta está abierto.
- Si es así, un temporizador se habilita para esperar unos minutos.
- Si después de ese tiempo, la puerta está aún abierta, la alarma sonará hasta que la puerta se cierra otra vez.
Utilicé la biblioteca de rocketscream bajo consumo para ahorrar energía, usar el temporizador del vigilante, que es un poco torpe. Experimenté con el interruptor como una interrupción externa sin suerte (tal vez alguien podría ayudar con mi código?). También probé el narcoléptico dormir biblioteca que proporciona un 'retardo', pero por alguna razón Esto desactiva la capacidad de pwm de arduino así no funcionaría el peizo. Mi código no puede ser elegante, pero funciona. Todavía estoy aprendiendo, así que agradecería cualquier crítica constructiva.
El código de arduino está por debajo.
#include "LowPower.h"
const int buttonPin = 2; botón abrir de la puerta. Baja cuando la puerta está abierta. Alta cuando la puerta está cerrada. const int zumbador = 9; const int led = 13; actualmente usando led interno
int buttonState = 0;
int doorstate = 0;
void setup() {}
pinMode (buttonPin, INPUT_PULLUP);
pinMode (zumbador, salida);
pinMode (led, salida);
}
void loop() {}
doorstate 0 = inactivo
doorstate 1 = puerta abierta alarma detectada, no activada
doorstate 2 = alarma activada
buttonState = digitalRead(buttonPin);
if(doorstate == 0) {}
digitalWrite (led, alto); llevó a parpadear brevemente para indicar que la unidad está todavía en: LowPower.powerDown (SLEEP_30MS, ADC_OFF, BOD_OFF);
digitalWrite (led, baja); Apagar LED:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
}
Si (buttonState == baja & & doorstate == 0) {//if la puerta está abierta
doorstate = 1;
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); esperar unos minutos para determinar si es una verdadera alarma
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
¿Si (buttonState == LOW) {//is la puerta abierta aún después de la espera?
tono (zumbador, 500); / / tono de la alarma:
doorstate = 2;
}
}
Si (doorstate == 2) {}
if(buttonState == High) {}
noTone(buzzer); / / apaga el timbre:
doorstate = 0; }
}
}