Stap 8: Download de Sketch-bestand en verplaats het naar uw schetsboek
Het bestand van de schets is op Dropbox. Het heet KnockKnockTreasureBox_9.ino dit is een kopie van hetzelfde bestand dat is in mijn schetsboek.
Gebruik deze link om te downloaden: https://www.dropbox.com/s/a0dqwk3ziauz2ir/KnockKnockTreasureBox_9.ino
Kopiëren of verplaatsen van dit bestand van uw downloadmap naar uw schetsboek.
Klik in de Arduino IDE op schetsboek. Klik op KnockKnockTreasureBox_9 om het te bekijken.
De schets is zwaar heeft gereageerd en ontworpen voor gemakkelijke lezing door iedereen die vertrouwd is met Arduino codering.
Het maakt gebruik van twee bibliotheken: Servo.h en EEPROM.h
Op de meeste plaatsen is een variabele naam gebruikt in plaats van de waarde die ik gebruikte. De waarde kan dus gemakkelijk worden gewijzigd, waar de variabelen zijn getypt en gedefinieerd. Bijvoorbeeld, worden Uno poorten genoemd dan genummerd in de code.
Het sterke gebruik maakt van functies. Dit houdt het hoofdprogramma [loop] eenvoudig omdat het opgeroepen functies die duidelijk worden genoemd en waarin de details van de schets worden uitgevoerd.
Het hoofdprogramma volgt aanbieding. Het is niet voor compilatie, maar wordt gepresenteerd in bijna dat formulier voor uw begrip. De functies zijn vet lettertype voor eenvoudige erkenning en worden beschreven na het hoofdprogramma aanbieding.
HOOFDPROGRAMMA: Void loop {}
CheckBattery() / /Flashes blue als batterij moet worden vervangen en zal niet overgaan.
[Als deksel open overschakelt Ga naar ProgramMode]
Anders goto OperateMode
ProgramMode:
[De servo ontgrendelen en licht de groene LED]
AwaitGoAhead() //Waiting voor de gebruiker indrukt deksel voor 5 sec om meer veilig programmeren.
ReadyToProgram: //A goto adres
GetKnock() //Wait voor gebruiker klopt, nummer en tijd tussen elk, test voor wettigheid, bepalen
Als ErrorFlag == 1 //Set vlag als illegale,
FlashLED() //Flash LED.
goto //Try weer ReadyToProgram
StoreSecretKnock() //Store secret knock gegevens in EEPROM
BlinkLED() //Blink LED te tonen gegevens zijn opgeslagen.
ProgramDwell: de reactie van de doos van het //Disable op verdere deksel sluitingen en stoten.
goto ProgramDwell
OperateMode:
[Vergrendelen van het vak en de rode LED licht]
GetKnock()
Als ErrorFlag == 1
FlashLED()
goto OperateMode
GetSecretKnock() //Retrieve gegevens uit de EEPROM
CompareKnocks() //Compare knock nummer en spaties voor gebruiker knock vs geheime knock.
Als ErrorFlag == 1 //Set vlag indien verschillend, en LED flash.
FlashLED()
goto //Try weer OperateMode
[Anders, licht de groene LED en ontgrendelen van het vak]
Wonen: //Disable vak reactie op verdere stoten of deksel sluitingen.
goto Dwell
FUNCTIES
CheckBattery() leest de 0-1023 lezing van analoge poort A1 en zet deze om in volt.
Als spanning kleiner dan 7V is begint de blauwe LED knippert en bevriest het programma in deze toestand totdat de stroom is uitgeschakeld. Echter, als spanning minder dan 5V is het vak wordt USB-aangedreven, dus blauw knipperen is uitgeschakeld.
AwaitGoAhead() zintuigen deksel sluiting, wacht 5 seconden, knippert de LED, wacht op het deksel te openen, keert vervolgens terug naar hoofdprogramma.
GetKnock() heet in zowel programma en Operate modi. Het berekent en bewaart het tijdsinterval tussen elke knock. Het bepaalt ook als de tijd toegestaan voor kloppen of het maximum aantal stoten heeft geschonden, in welk geval het een ErrorFlag ingesteld.
Het wacht totdat de amplitude van een klop op de analoge poort A0 vastgestelde drempel overschrijdt.
Wanneer de eerste knock (N = 0) treedt op het leest kloktijd en bewaart het in de tijd [N]-matrix als tijd [0]. Het ook knippert de LED.
Kloktijd voortdurend wordt gelezen en VerstrekenTijd berekend
Als de klok-tijd [0].
Verstreken tijd overschrijdt de toegestane tijd om stoten te proberen, en slechts één puls is geconstateerd, de ErrorFlag is ingesteld als de functie als resultaat. Anders retourneert de functie met geen set ErrorFlag.
Voor elke knock (N) gedetecteerd na de eerste knock, is VerstrekenTijd opgeslagen, zoals tijd [N], en de LED is knipperde.
Als het aantal stoten overschrijdt de toegestane (10), de ErrorFlag is ingesteld en de functie als resultaat.
Als er staan geen fouten, klop elk interval (Time [N] – Time[N-1]) wordt opgeslagen in de matrix KnockInterval [N], en wanneer toegestane VerstrekenTijd is bereikt, retourneert de functie.
StoreSecretKnock() heet in ProgramMode. Het wordt opgeslagen in EEPROM elke KnockInterval [N] opgeslagen in GetKnock(), evenals de totale KnockNumber. Deze worden opgeslagen als SecretKnockInterval [N] en SecretKnockNumber.
GetSecretKnock() heet in OperateMode. Elke SecretKnockInterval [N] worden opgehaald en SecretKnockNumber opgeslagen in EEPROM.
CompareKnocks() bepaalt eerst of de KnockNnumber opgeslagen in de GetKnock() gelijk is aan de MaxKnockNumber toegestaan (10); Als dat zo is, wordt het geopend. Dit is een manier om een doos open wanneer u zijn vergrendeld.
Deze functie bepaalt vervolgens als KnockNumber van GetKnock is gelijk aan de retieved van de SecretKnockNumber vanaf EEPROM. Als dat niet het geval is, de ErrorFlag is ingesteld en de functie als resultaat.
Als OK, de functie vergelijkt die elke KnockInterval in GetKnock() op elk SecretKnockInterval opgeslagen opgehaald vanaf EEPROM. Als niet gelijk aan binnen de tolerantie die is ingesteld in de Delta, is de ErrorFlag ingesteld; anders retourneert de functie met geen ErrorFlag set.
BlinkLED() en FlashLED() zijn eenvoudige, korte routines die doen gewoon wat ze zeggen.