Arduino Knock-Knock Treasure Box (8 / 10 steg)
Steg 8: Hämta filen skiss och flytta det till din skissbok
Skiss är den på Dropbox. Namnet KnockKnockTreasureBox_9.ino är en kopia av samma fil som är i min skissbok.
Använd denna länk för att hämta: https://www.dropbox.com/s/a0dqwk3ziauz2ir/KnockKnockTreasureBox_9.ino
Kopiera eller flytta filen från mappen ladda ner till din skissbok.
I Arduino IDE Klicka på Sketchbook. Klicka sedan på KnockKnockTreasureBox_9 att visa den.
Skissen är kraftigt kommenterade och designad för enkel avläsning av någon bekant med Arduino kodning.
Den använder två bibliotek: Servo.h och EEPROM.h
På de flesta ställen används en variabel namn stället värdet jag använde. Värdet kan således lätt ändras där variablerna är skrivit och definieras. Till exempel Uno hamnar heter snarare än numrerade i koden.
Det gör starkt bruk av funktioner. Detta håller huvudprogrammet [loop()] enkel eftersom det ringer upp funktioner som namnges klart och där detaljerna i skissen är fulländade.
Huvudprogrammet notering följer. Det är inte för sammanställning men presenteras i nästan denna form för din förståelse. Funktionerna är fetstil för lätt erkännande och beskrivs efter den huvudsakliga programmet noteringen.
MAIN PROGRAM: Void loop() {
CheckBattery() / /Flashes blå om batteriet behöver bytas ut och går inte vidare.
[Om locket byta öppna gå till ProgramMode]
Annat goto OperateMode
ProgramMode:
[Lås servo och ljus grön LED]
AwaitGoAhead() //Waiting för användaren att trycka på locket för 5 sek för att säkrare programmering.
ReadyToProgram: //A gå till adress
GetKnock() //Wait för användaren smällar, fastställa antal och tid mellan varje, test för laglighet,
Om ErrorFlag == 1 //Set flagga om olaglig,
FlashLED() //Flash LED.
gå till ReadyToProgram //Try igen
StoreSecretKnock() //Store hemlighet slå data i EEPROM
BlinkLED() //Blink LED att visa data har lagrats.
ProgramDwell: //Disable box svar på ytterligare lock förslutningar och smällar.
gå till ProgramDwell
OperateMode:
[Låsa boxen och ljus röd LED]
GetKnock()
Om ErrorFlag == 1
FlashLED()
gå till OperateMode
GetSecretKnock() //Retrieve data från EEPROM
CompareKnocks() //Compare slå nummer och mellan fästpunkterna för användarens knock vs Hemlig knackning.
Om ErrorFlag == 1 //Set flagga om annan och flash LED.
FlashLED()
gå till OperateMode //Try igen
[Annars, ljus grön LED och låsa upp rutan]
Bor: //Disable box svar på ytterligare smällar eller lock förslutningar.
gå till Dwell
FUNKTIONER
CheckBattery() läser 0-1023 behandlingen av analog port A1 och omvandlar den till volt.
Om spänningen är lägre än 7V börjar blinka blå LED och fryser programmet i detta tillstånd tills power stängs av. Dock om spänning är lägre än 5V är rutan att USB-drivna, så blå blinkande är inaktiverad.
AwaitGoAhead() sinnen lock stängning, waits i 5 sekunder, blinkar lysdioden, väntar på locket att öppna, sedan tillbaka till huvudprogrammet.
GetKnock() kallas i både Program och fungerar. Det beräknar och sparar tidsintervallet mellan varje knock. Den bestämmer också om tidsfristen för att knacka eller det maximala antalet slag tillåtet har kränkts, i vilket fall det anger en ErrorFlag.
Det väntar tills en knock amplitud på analog port A0 överskrider set.
När först knock (N = 0) inträffar det läser klocktiden och sparar den i matrisen tid [N] som tid [0]. Det också blinkar lysdioden.
Klocktiden läses ständigt och ElapsedTime beräknade
som klocka-tid [0].
Om förfluten tid överskrider den tillåtna tiden för att försöka smällar, och endast en puls har upptäckts, ErrorFlag in och returnerar funktionen. Annars returnerar funktionen med några set ErrorFlag.
För varje knock (N) upptäcks efter den första knock, sparas ElapsedTime som tid [N] och lampan blinkade.
Om antalet smällar överskrider den maximalt tillåtna (10), ErrorFlag in och returnerar funktionen.
Om det finns inga fel, varje slå intervall (tid [N] – Time[N-1]) sparas i en matris KnockInterval [N], och när tillåtna ElapsedTime nås funktionen returnerar.
StoreSecretKnock() kallas i ProgramMode. Lagras i EEPROM varje KnockInterval [N] sparas i GetKnock(), samt totala KnockNumber. Dessa lagras som SecretKnockInterval [N] och SecretKnockNumber.
GetSecretKnock() kallas i OperateMode. Det hämtar varje SecretKnockInterval [N] och SecretKnockNumber sparas i EEPROM.
CompareKnocks() först avgör om KnockNnumber sparas i GetKnock() lika med MaxKnockNumber tillåtet (10). i så fall öppnas rutan. Detta är ett sätt att öppna en låda när du är utelåst.
Den här funktionen beräknar nästa, om KnockNumber från GetKnock lika med SecretKnockNumber retieved från EEPROM. Om inte, ErrorFlag ligger och returnerar funktionen.
Om OK, Hämtad de funktionen jämför varje KnockInterval sparas i GetKnock() till varje SecretKnockInterval från EEPROM. Om inte motsvarar, inom den tolerans som i Delta, ligger ErrorFlag; annars returnerar funktionen med ingen ErrorFlag.
BlinkLED() och FlashLED() är enkla, korta rutiner som gör bara vad de säger.