Etape 8: Télécharger le fichier esquisse et le mettre dans votre carnet de croquis
Le fichier de schéma est sur Dropbox. Il est nommé KnockKnockTreasureBox_9.ino, il s’agit d’une copie du même fichier qui est dans mon carnet de croquis.
Utilisez ce lien pour télécharger : https://www.dropbox.com/s/a0dqwk3ziauz2ir/KnockKnockTreasureBox_9.ino
Copier ou déplacer ce fichier dans votre dossier de téléchargement dans votre carnet de croquis.
Dans l’IDE Arduino, cliquez sur Carnet de croquis. Cliquez ensuite sur KnockKnockTreasureBox_9 pour la voir.
L’esquisse est fortement commentée et conçue pour faciliter la lecture par quiconque est familier avec le codage de l’Arduino.
Il utilise deux bibliothèques : Servo.h et EEPROM.h
Dans la plupart des endroits, un nom de variable est utilisé plutôt que la valeur que j’ai utilisé. Ainsi la valeur peut facilement être modifiée où les variables sont typées et définis. Par exemple, Uno ports sont nommés non numérotés dans le code.
Il fait un usage fort de fonctions. Cela empêche le programme principal [loop()] simple parce qu’elle appelle des fonctions qui sont clairement nommé et où sont accomplies les détails de l’esquisse.
Le programme principal énumérant les suit. Il n’est pas pour la compilation mais est présenté près cette forme pour votre compréhension. Les fonctions sont des caractères gras pour une reconnaissance facile et sont décrites après la liste principale du programme.
PROGRAMME principal : Void loop() {}
CheckBattery() / /Flashes bleu si la batterie doit être remplacée et ne donnera pas suite.
[Si le couvercle interrupteur ouvert aller à ProgramMode]
Else goto OperateMode
ProgramMode :
[Débloquer le servo et allumer la LED verte]
AwaitGoAhead() //Waiting pour l’utilisateur d’appuyer sur le couvercle pendant 5 s permettre une programmation plus sûre.
ReadyToProgram : //A goto adresse
GetKnock() //Wait pour l’utilisateur frappe, déterminer le nombre et le temps entre chaque, test de la légalité,
Si ErrorFlag == 1 //Set drapeau si illégal,
FlashLED() //Flash LED.
Goto ReadyToProgram //Try nouveau
StoreSecretKnock() //Store secret knock données en EEPROM
BlinkLED() //Blink LED pour afficher les données ont été stockées.
ProgramDwell : //Disable réponse de boîte à couvercle autres fermetures et des chocs.
Goto ProgramDwell
OperateMode :
[Bloquer la boîte et allumer la LED rouge]
GetKnock()
Si ErrorFlag == 1
FlashLED()
Goto OperateMode
GetSecretKnock() //Retrieve données d’EEPROM
CompareKnocks() //Compare frapper nombre et espacements l'on frappe secrète de l’utilisateur knock vs.
Si ErrorFlag == 1 drapeau de //Set si elle est différente, et le flash LED.
FlashLED()
Goto OperateMode //Try nouveau
[Else, allumer la LED verte et déverrouiller la boîte]
Arrêt : //Disable boîte en faveur des coups supplémentaires ou de fermeture du couvercle.
Goto Dwell
FONCTIONS
CheckBattery() lit la 0-1023 lecture analogique port A1 et le convertit en volts.
Si la tension est inférieure à 7V, il commence à clignoter la LED bleue et gèle le programme dans cet état jusqu'à ce que l’alimentation est coupée. Toutefois, si la tension est inférieure à 5 v la boîte est d’être alimenté par USB, bleu clignotant est donc désactivée.
Clignotements de la LED, attend le couvercle pour ouvrir, AwaitGoAhead() sens couvercle fermeture, attend pendant 5 secondes, puis retourne sur le programme principal.
GetKnock() est appelé en mode programme et Operate. Il calcule et enregistre l’intervalle de temps entre chaque coup. Il détermine également si le délai accordé pour frapper ou le nombre maximal de coups autorisés a été violée, dans ce cas, il définit une ErrorFlag.
Il attend jusqu'à ce qu’une amplitude de frapper sur le port analogique A0 dépasse la valeur programmée.
Quand le premier knock (N = 0) se produit il lit l’heure de l’horloge et l’enregistre dans le tableau de temps [N] dans le temps [0]. Il clignote aussi la LED.
Heure de l’horloge est constamment lu et ElapsedTime calculée
comme horloge-temps [0].
Si le temps écoulé dépasse le temps imparti pour essayer les coups, et seulement une impulsion a été détectée, le ErrorFlag a la valeur et la fonction renvoie. Sinon, la fonction retourne avec aucun ErrorFlag set.
Pour chaque coup (N) détecté après le premier coup, ElapsedTime est enregistré comme temps [N] et la LED est cligna des yeux.
Si le nombre de coups est supérieure au maximum autorisé (10), le ErrorFlag a la valeur et la fonction renvoie.
S’il n’y a pas d’erreurs, chacun frapper intervalle (temps [N] – Time[N-1]) est enregistré dans le tableau KnockInterval [N] et lorsque ElapsedTime autorisée est atteinte la fonction renvoie.
StoreSecretKnock() est appelé ProgramMode. Il stocke dans l’EEPROM chaque KnockInterval [N] enregistrée dans GetKnock(), comme KnockNumber total. Ceux-ci sont stockés comme SecretKnockInterval [N] et SecretKnockNumber.
GetSecretKnock() est appelé OperateMode. Il récupère chaque SecretKnockInterval [N] et SecretKnockNumber enregistrées dans l’EEPROM.
CompareKnocks() détermine d’abord si le KnockNnumber enregistré dans GetKnock() est égale à la MaxKnockNumber permis (10) ; dans l’affirmative, la boîte s’ouvre. Il s’agit d’un moyen d’ouvrir une boîte lorsque vous êtes enfermé.
Ensuite, cette fonction détermine si KnockNumber de GetKnock est égale à la retieved de SecretKnockNumber de l’EEPROM. Si ce n’est pas le cas, le ErrorFlag a la valeur et la fonction renvoie.
Si OK, la compare de fonction que chaque KnockInterval enregistré dans GetKnock() à chaque SecretKnockInterval Récupérée de l’EEPROM. Si différent, de la tolérance dans le Delta, la ErrorFlag est définie ; Sinon, la fonction retourne avec aucun ensemble de ErrorFlag.
BlinkLED() et FlashLED() sont des routines simples et courtes qui font tout ce qu’ils disent.