Paso 8: Descargue el archivo de dibujo y moverlo a su carpeta de bocetos
El archivo de dibujo está en Dropbox. El nombre KnockKnockTreasureBox_9.ino se trata de una copia del mismo archivo que está en mi cuaderno de bocetos.
Use este enlace para descargar: https://www.dropbox.com/s/a0dqwk3ziauz2ir/KnockKnockTreasureBox_9.ino
Copiar o mover este archivo desde la carpeta de descarga a su Sketchbook.
En el Arduino IDE haga clic en libro de bocetos. Haga clic en KnockKnockTreasureBox_9 para verlo.
El bosquejo es comentado y diseñado para facilitar la lectura por cualquiera que esté familiarizado con la codificación de Arduino.
Utiliza dos librerías: Servo.h y EEPROM.h
En muchos lugares se utiliza un nombre de variable en lugar del valor de que utilizado. Así el valor puede cambiarse fácilmente donde las variables se ha escrito y definidas. Por ejemplo, puertos Uno son llamados en lugar de números en el código.
Hace fuerte uso de las funciones. Esto evita que el programa principal [loop()] simple porque llama a las funciones que son claramente el nombre y en el que se logran los detalles del bosquejo.
El programa principal sigue el listado. No es para la compilación, pero se presenta casi para su comprensión. Las funciones son fuente en negrita para el fácil reconocimiento y se describen siguiendo el listado principal del programa.
PRINCIPAL programa: Void loop() {}
CheckBattery() / /Flashes azul si la batería necesita reemplazarse y no procederá.
[Si la tapa del interruptor abierto ir a ProgramMode]
Else goto OperateMode
ProgramMode:
[Desbloquear el servo y enciende el LED verde]
AwaitGoAhead() //Waiting para el usuario al presionar la tapa durante 5 segundos activar la programación más segura.
ReadyToProgram: //A goto dirección
GetKnock() //Wait para usuario golpes, determinar el número y el tiempo entre cada uno, test de legalidad,
Si ErrorFlag == 1 bandera //Set si ilegal,
FlashLED() //Flash LED.
Goto ReadyToProgram //Try otra vez
StoreSecretKnock() //Store secreto llamar datos en EEPROM
BlinkLED() //Blink LED para mostrar los datos se almacenan.
ProgramDwell: //Disable respuesta de caja a la tapa más cierres y golpes.
Goto ProgramDwell
OperateMode:
[La caja de la cerradura y el LED rojo de luz]
GetKnock()
Si ErrorFlag == 1
FlashLED()
Goto OperateMode
GetSecretKnock() //Retrieve datos de EEPROM
CompareKnocks() //Compare llamo número y espaciamientos para golpe secreto del usuario golpe vs.
Si ErrorFlag == 1 bandera //Set si es diferente, y flash LED.
FlashLED()
Goto OperateMode //Try otra vez
[, Enciende el LED verde y la caja]
Permanencia: //Disable caja ante más golpes o cierres de la tapa.
Goto de la detención
FUNCIONES
CheckBattery() Lee 0-1023 puerto A1 lectura de análogo y lo convierte en voltios.
Si el voltaje es inferior a 7V empieza a parpadear el LED azul y se congela el programa en este estado hasta que se apaga. Sin embargo, si el voltaje es menor que 5V la caja está siendo alimentado por USB, para destellar azul está deshabilitado.
AwaitGoAhead() sentidos tapa cierre, esperas 5 segundos, parpadea el LED, espera poder abrir, tapa entonces vuelve al programa principal.
GetKnock() se llama en modo de programa y operar. Calcula y guarda el intervalo de tiempo entre cada golpe. También determina si el tiempo permitido para golpear o el número máximo de golpes permitido ha sido violado, en cuyo caso establece una ErrorFlag.
Espera hasta que una amplitud de knock en el puerto analógico A0 supera el umbral establecido.
Cuando el primer golpe (N = 0) ocurre lee la hora del reloj y guarda en el array de tiempo [N] tiempo [0]. También parpadea el LED.
Constantemente se lee la hora del reloj y ElapsedTime computada
como reloj de tiempo [0].
Si el tiempo transcurrido sobrepasa el tiempo permitido para tratar golpes, y se detectó sólo un impulso, se encuentra el ErrorFlag y la función devuelve. De lo contrario la función devuelve con ningún conjunto ErrorFlag.
Por cada golpe (N) detectado tras el primer golpe, ElapsedTime se guarda como tiempo [N] y el LED se parpadeó.
Si el número de golpes supera el máximo permitido (10), se encuentra el ErrorFlag y la función devuelve.
Si no hay ningún error, cada golpe de intervalo (tiempo de [N] – Time[N-1]) se guarda en la matriz KnockInterval [N], y alcanzado ElapsedTime permitió la función devuelve.
StoreSecretKnock() se llama en ProgramMode. Almacena en la EEPROM cada KnockInterval [N] guardado en GetKnock(), como KnockNumber total. Estas se almacenan como SecretKnockInterval [N] y SecretKnockNumber.
GetSecretKnock() se llama en OperateMode. Recupera cada SecretKnockInterval [N] y SecretKnockNumber guardado en la EEPROM.
CompareKnocks() primero determina si la KnockNnumber en GetKnock() es igual a la MaxKnockNumber permitido (10); Si es así, la caja se abrirá. Esto es una forma para abrir un cuadro de cuando está bloqueadas.
A continuación, esta función determina si KnockNumber de GetKnock es igual a la SecretKnockNumber retieved de EEPROM. Si no, se encuentra el ErrorFlag y la función devuelve.
Si bien, el compara de función que cada KnockInterval guardado en GetKnock() para cada SecretKnockInterval Obtenido de EEPROM. Si no igual, dentro de la tolerancia en Delta, se encuentra el ErrorFlag; de lo contrario la función devuelve ningún conjunto de ErrorFlag.
BlinkLED() y FlashLED() son rutinas simples, cortas que hacen lo que dicen.