Paso 7: El código de Arduino
Aquí es una copia del código que usé para este proyecto. Puede copiar y pegar en un dibujo nuevo o descargar el archivo de 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
int ledPin = 6;
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 (13, salida);
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!");
pinMode (ledPin, salida); }
//<------------------------------------------------------------------------------------- Void Loop
void loop() {/ / putstring("."); / / descomentar esto para ver si no está ejecutando el bucle
int sensorValue = 0; int sensorPin = 5; int sensorThreshold = 200;
sensorValue = analogRead(sensorPin); leer la entrada de pin
Serial.println(sensorValue); valor de depuración
if(sensorValue > sensorThreshold) {Serial.println ("juego de sonidos y luces); digitalWrite (ledPin, HIGH); / / establece el LED playcomplete("1.WAV"); digitalWrite (ledPin, LOW); / / establece el LED apagado delay(500);
} }
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(); }