Paso 5: El código de Arduino
Aquí es copia del código de Arduino. Puede descargar el archivo de código adjunto, o puede copiar y pegar este texto en un dibujo nuevo.
Luego conecte la placa Arduino al ordenador y cargar el código.
#include
#include #include #include "WaveUtil.h" #include "WaveHC.h"
Tarjeta SdReader; Este objeto contiene la información de la tarjeta FatVolume vol; Contiene la información de la partición en la raíz de FatReader de tarjeta; Esto contiene la información para el sistema de archivos en la tarjeta FatReader f; Esto contiene la información del archivo estamos jugamos
Ola WaveHC; Este es el único objeto (audio) de la onda, puesto que sólo jugaremos uno a la vez
#define DEBOUNCE 100 / botón debouncer
Esta práctica función devolverá el número de bytes actualmente libres en RAM, ideal para depuración! int freeRam(void) {extern int __bss_end; int extern * __brkval; int free_memory; si ((int) __brkval == 0) {free_memory = ((int) & free_memory)-((int) & __bss_end);} else {free_memory = ((int) & free_memory)-((int) __brkval);} volver free_memory;}
void sdErrorCheck(void) {si (! card.errorCode()) retorno; putstring ("\n\rSD I/O error:"); Serial.Print(Card.ErrorCode(), hexagonal); putstring (","); Serial.println(Card.errorData(), hexagonal); while(1); }
<---configuración de vacío void setup() {/ / configurar serie puerto Serial.begin(9600); putstring_nl ("WaveHC con 6 botones"); putstring ("memoria RAM libre:"); Esto puede ayudar con la depuración, quedarse sin RAM es mala Serial.println(freeRam()); Si es menor de 150 bytes escribe con problemas! Configurar los pines de salida para el control de la DAC. Este los pernos se definen en la biblioteca pinMode (2, salida); pinMode (3, salida); pinMode (4, salida); pinMode (5, salida); pin13 LED pinMode (13, salida); habilitar las resistencias pull-up en interruptor de pins (entradas analógicas) digitalWrite (14, alto); digitalWrite (15, alto); digitalWrite (16, alto); digitalWrite (17, HIGH); digitalWrite (18, alta); digitalWrite (19, alto); Si (! card.init(true)) {//play con spi de 4 MHz si 8MHz no funciona para usted si (! card.init()) {//play con 8 MHz spi (por defecto más rápido!) putstring_nl ("tarjeta init. no se pudo!"); Algo salió mal, permite imprimir por qué sdErrorCheck(); while(1); entonces 'detener': ¡ no! } / / permite optimizar la lectura - algunas tarjetas pueden tiempo de espera. Desactivar si tienes problemas card.partialBlockRead(true); Ahora buscaremos una partición FAT! parte de uint8_t; para (parte = 0; parte < 5; parte ++) {/ / tenemos hasta 5 ranuras en if (vol.init (tarjeta, parte)) break; / / nos encontró uno, permite la libertad bajo fianza} si (parte == 5) {/ / si terminamos por no encontrar uno :(putstring_nl ("No válida partición FAT!"); sdErrorCheck(); / / algo salió mal, permite imprimir por qué while(1); / / luego 'detener' - no!} / / permite decir que el usuario lo encontramos putstring ("partición de uso"); Serial.Print (parte, DEC); putstring (", el tipo es grasa"); Serial.println(Vol.fatType(),DEC); ¿FAT16 o FAT32? Intente abrir el directorio raíz si (! root.openRoot(vol)) {putstring_nl ("no se puede abrir raíz dir!"); / / algo salió mal, while(1); / / luego 'detener' - no!} / / ¡ UF! Llegamos pasado las partes difíciles. putstring_nl("Ready!"); }
//<------------------------------------------------------------------------------------- Void Loop
void loop() {/ / putstring("."); / / descomentar esto para ver si el bucle no está ejecutando int secretCodeOne [6] = {1, 2, 3, 4, 5, 6}; int secretCodeTwo [6] = {1, 1, 2, 2, 3, 3}; int secretCodeThree [6] = {2, 4, 6, 1, 3, 5}; int secretCodeFour [6] = {1, 2, 3, 5, 5, 5}; int secretCodeFive [6] = {1, 2, 3, 3, 2, 1}; int secretCodeSix [6] = {1 2, 3, 4, 5, 1};
int enteredCode [6] = {0, 0, 0, 0, 0, 0}; int correctKeys = 0; éxito de int = 0; byte que presiona; almacena valores de tecla int i = 0; iteración del bucle
para (me = 0; i < 6; i ++) //stores prensado valores en una matriz {hacer {presiona = check_switches();} mientras presionado < 1; enteredCode [i] = presiona; //stores presiona valores en una matriz delay(500); Serial.println(enteredCode[i]); tecla imprimir}
para (i = 0; i < 6; i ++) //Check código uno {si (enteredCode [i] == secretCodeOne[i]) {correctKeys = correctKeys + 1; //counts número de teclas correctas}} si (correctKeys == 6) //if el código introducido coincide con código uno, juego de pista uno {Serial.println ("código una correcta"); playcomplete("1.WAV"); éxito = 1;} correctKeys = 0; contador clave correcta
para (i = 0; i < 6; i ++) //Check código dos {si (enteredCode [i] == secretCodeTwo[i]) {correctKeys = correctKeys + 1; //counts número de teclas correctas}} si (correctKeys == 6) //if el código introducido coincide con código uno, juego de pista uno {Serial.println ("código dos correctos"); playcomplete("2.WAV"); éxito = 1;} correctKeys = 0; contador clave correcta
para (i = 0; i < 6; i ++) //Check código tres {si (enteredCode [i] == secretCodeThree[i]) {correctKeys = correctKeys + 1; //counts número de teclas correctas}} si (correctKeys == 6) //if el código introducido coincide con código uno, juego de pista uno {Serial.println ("código tres correcta"); playcomplete("3.WAV"); éxito = 1;} correctKeys = 0; contador clave correcta
para (i = 0; i < 6; i ++) //Check código cuatro {si (enteredCode [i] == secretCodeFour[i]) {correctKeys = correctKeys + 1; //counts número de teclas correctas}} si (correctKeys == 6) //if el código introducido coincide con código uno, juego de pista uno {Serial.println ("código cuatro correcta"); playcomplete("4.WAV"); éxito = 1;} correctKeys = 0; contador clave correcta
para (i = 0; i < 6; i ++) //Check código cinco {si (enteredCode [i] == secretCodeFive[i]) {correctKeys = correctKeys + 1; //counts número de teclas correctas}} si (correctKeys == 6) //if el código introducido coincide con código uno, juego de pista uno {Serial.println ("código cinco correctos"); playcomplete("5.WAV"); éxito = 1;} correctKeys = 0; contador clave correcta
para (i = 0; i < 6; i ++) //Check código seis {si (enteredCode [i] == secretCodeSix[i]) {correctKeys = correctKeys + 1; //counts número de teclas correctas}} si (correctKeys == 6) //if el código introducido coincide con código uno, juego de pista uno {Serial.println ("código seis correctos"); playcomplete("6.WAV"); éxito = 1;} correctKeys = 0; contador clave correcta
if(Success == 1) {Serial.println ("You Got un código correcto"); éxito = 0;} else {playcomplete("0.WAV"); Serial.println ("usted no"); } }
byte check_switches() {static byte anterior [6] estática mucho tiempo [6] byte de lectura; byte presiona; índice byte; presiona = 0;
para (índice byte = 0; índice < 6; ++ índice) {lectura = digitalRead (14 + índice); si (lectura == baja & & anterior [índice] == alta & & millis() - tiempo [índice] > DEBOUNCE) {/ interruptor tiempo presionado [índice] = millis(); Pulsa = index + 1; break;} anterior [índice] = lectura;} / / retorno número de conmutador (1-6) retorno (presionado); }
Reproduce un archivo completo de principio a fin sin pausa. void playcomplete(char *name) {/ / llamar a nuestro ayudante para encontrar y jugar este playfile(name) nombre; mientras que (wave.isplaying) {/ / hacer nada jugando su} / / ahora su hecho jugar}
void playfile(char *name) {/ / ver si el objeto ola está haciendo algo si (wave.isplaying) {/ / así ya jugando a algo, dejar! wave.stop(); / / detener} / / buscar en el directorio raíz y abrir el archivo si (! f.open (raíz, nombre)) {putstring ("no puede abrir archivo"); Serial.Print(Name); retorno; } / / OK leer el archivo y convertirlo en un objeto de onda si (! wave.create(f)) {putstring_nl ("no un válido WAV"); return;} / / ok el tiempo para jugar! iniciar reproducción wave.play(); }