Cryptap: Ett rytm-baserat dörrlås (5 / 5 steg)
Steg 5: kod
## DRIFT ##
1. Tryck på start/stopp knappen för att signalera att du är redo att börja koden input. Statuslampan börjar blinka långsamt.
2. Klicka i din kod på knappen kod. Statuslampan blinkar på 120 slag/minut, så du kan använda detta som din metronome om du vill. Dock mäter cryptap programmet puls längderna i förhållande till varandra proportionellt, så du kan också använda ditt eget tempo. Se bara till att du som är tillräckligt exakta!
3. När koden input är gjort, tryck på knappen start/stopp igen. Programmet kommer sedan besluta om att släppa in dig.
Eftersom människor inte mycket exakt tid djurhållare (din inte är verkligen), satt jag tolerans i förhållande till +/-30%. Det innebär att slå längder kan vara felaktiga av detta belopp, och fortfarande passera uppbåda. Detta är bra nog att skilja mellan ganska liknande låtar. Det finns en liten mängd svårt att nå överlappning mellan dubbel och trippel-längd beats, men koden är fortfarande ganska svårt att bryta.
För att låsa upp dörren, beats måste finnas i rätt proportioner till varandra (+/-tolerans förhållandet), och antalet slag måste vara korrekt. Om ett ogiltigt lösenord anges, väntar programmet några sekunder och bortse från någon användarindata. Det också blinkar statuslampan snabbt. Om rätt kod anges statuslampan tänds stadigt och dörren kommer att låsa upp till 8 sekunder.
## ANVÄNDARKONFIGURATION ##
Nyckeln som lagras i en rad som denna:
#define keylength 5
CONST int nyckel = {2, 1, 3, 3, 3}; "Happy birthday to you"
Matrisen lagrar mängden tid som händer mellan beats. Så om ditt lösenord har sex toner som "Happy birthday to you", det bör finnas fem element i matrisen. Om ditt lösenord är verkligen lång och du har mer än 16 beats i den, (riktigt hårt, jag inte rekommenderar det), måste du öka antalet definieras i den här raden:
#define inputCodeLength 16
## RESTEN AV KODEN ##
Jag var nyfiken på avbrott, så jag hade min knappar utlösa avbrott. För att göra dessa avbrott lätt att använda, hade jag min avbryta hanterare kontrollera vissa funktionspekare. Om pekaren inte har angetts till NULL anropas funktionen den pekar på. Dessa sätts med olika "-inställningen" funktioner inuti cryptap.c.
Jag gjorde ett försök att undvika buffertspill genom att ange ett maximalt antal matas in pulser. Om det maximala antalet pulser är ingång, omedelbart startas lösenord analys, och beslutar om att låsa upp dörren.
Jag hoppas mina kommentarer i kod hjälp.
## BUGGAR ##
Jag försökte ta bort USB felsökning koden, men koden fungerar inte om jag gör. Så, jag lämnade usb_init() och olika print() uttalanden. Jag skulle uppskatta om någon kunde ta bort dem och fortfarande har programmet fungerar. Ännu bättre om de kan förklara varför det inte fungerar för mig.
Omedelbart efter programmeras, accepterar Teensy ibland inte koden input. För att lösa detta, makt-cykel kretsen.