Stap 2: De hersenen
Het alarm functioneert als volgt:
- De arduino wordt gehouden in slaap om energie te besparen.
- Elke 30s, de arduino wakker om te zien als de switch van de deur open is.
- Als er, is een timer ingeschakeld een paar minuten te wachten.
- Als na die tijd, de deur nog steeds open staat, klinkt het alarm totdat de deur wordt weer gesloten.
Ik gebruikte de rocketscream laag vermogen bibliotheek om energie te besparen, gebruik van de watchdog-timer, die een beetje onhandig is. Ik experimenteerde met de schakeloptie als een externe interrupt zonder geluk (misschien iemand kon helpen met mijn code?). Ik heb ook geprobeerd de narcoleptic slapen bibliotheek waarin een 'slaap delay', maar voor sommige reden dit uitgeschakeld het pwm-vermogen van de arduino dus de peizo zou niet werken. Mijn code kan niet elegant, maar het werkt. Ik ben nog steeds leren, dus constructieve kritiek zou worden gewaardeerd.
De arduino code is hieronder.
#include "LowPower.h"
Const int buttonPin = 2; knop voor het openen van deur. Laag bij de deur staat open. Hoge wanneer deur is gesloten. Const int zoemer = 9; Const int geleid = 13; op dit moment met behulp van interne geleid
int buttonState = 0;
int doorstate = 0;
VOID Setup {}
pinMode (buttonPin, INPUT_PULLUP);
pinMode (zoemer, OUTPUT);
pinMode led (, uitvoer);
}
void loop {}
doorstate 0 = niet actief
doorstate 1 = deur open gedetecteerd, alarm niet geactiveerd
doorstate 2 = alarm geactiveerd
buttonState = digitalRead(buttonPin);
if(doorstate == 0) {}
digitalWrite (led, hoog); geleid tot het kort knipperen om aan te geven aan de eenheid is nog steeds op: LowPower.powerDown (SLEEP_30MS, ADC_OFF, BOD_OFF);
digitalWrite (led, laag); LED uitschakelen:
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);
}
Als (buttonState == LOW & & doorstate == 0) {//if de deur is open
doorstate = 1;
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF); wacht een paar minuten om te bepalen of het een echte alarm
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);
Als (buttonState == LOW) {//is de deur nog steeds open na het wachten?
Toon (zoemer, 500); / / alarm Toon:
doorstate = 2;
}
}
Als (doorstate == 2) {}
if(buttonState == High) {}
noTone(buzzer); / / zoemer uitschakelen:
doorstate = 0; }
}
}