Paso 5: código
La mayor parte del código es para el WaveShield, basado en http://www.ladyada.net/make/waveshield/Hay varios ejemplos de botones múltiples alrededor - utilicé un mash-up basado en Rayshobby blog http://rayshobby.net/?p=16 con un poco de este uno, lanzado.
Código de selección aleatoria para el último botón es adaptada de www.arduino.cc/en/Tutorial/Blink y www.arduino.cc/en/Reference/Random.
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
int buttonPinR = 0; Botones de brazo derecho en el pin analógico 0
int buttonValueR = 0;
int buttonPinL = 1; Brazo izquierdo botones pin analógico 1
int buttonValueL = 0;
randChoose largo = 0; Inicializar el elemento aleatorio
largo randNumber;
Tarjeta SdReader; Este objeto contiene la información de la tarjeta
FatVolume vol; Contiene la información de la partición en la tarjeta
FatReader raíz; 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
int wasplaying = 0;
rVal int;
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;
extern int * __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);
}
void setup()
{
Serial.Begin(9600);
Serial.println ("onda prueba!");
pinMode (2, salida);
pinMode (3, salida);
pinMode (4, salida);
pinMode (5, salida);
pinMode (13, salida);
randomSeed (analogRead (1)); generador de números aleatorios de la configuración
Si (! card.init(true)) {//play con spi de 4 MHz si 8MHz no funciona para usted
Si (! card.init()) {//play con spi de 8 MHz (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!
}
permiten 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
Si (vol.init (tarjeta, parte))
rotura; 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); entonces 'detener': ¡ no!
}
Permite decir que el usuario lo que 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); entonces 'detener': ¡ no!
}
¡ UF! Llegamos pasado las partes difíciles.
putstring_nl("Ready!");
}
Botones de calibrado con un resistor de 10K en el pin de 5v con una batería de 9v conexión con el enchufe de alimentación de Arduino.
Utilice los valores de su bosquejo lectura analógica para el valor asignado a cada botón del soporte. Tuyo puede variar de los asignado aquí.
Brazo derecho botones pin 0
void loop() {}
buttonValueR = analogRead(buttonPinR);
Si (buttonValueR > 645 & & buttonValueR < 660) {}
playcomplete ("R1. WAV");
}
Delay(25); Siempre es bueno un poco cuando leyendo entradas las cosas lento
Si (buttonValueR > 225 & & buttonValueR < 240) {}
playcomplete ("R2. WAV");
}
Delay(25);
Si (buttonValueR > 165 & & buttonValueR < 185) {}
playcomplete ("R3. WAV");
}
Delay(25);
Si (buttonValueR > 325 & & buttonValueR < 345) {}
playcomplete ("R4. WAV");
}
Delay(25);
Si (buttonValueR > 495 & & buttonValueR < 515) {}
playcomplete ("R5. WAV");
}
Brazo izquierdo botones pin 1
buttonValueL = analogRead(buttonPinL);
Si (buttonValueL > 645 & & buttonValueL < 660) {}
playcomplete ("L1. WAV");
}
Delay(25);
Si (buttonValueL > 225 & & buttonValueL < 245) {}
playcomplete ("L2. WAV");
}
Delay(25);
Si (buttonValueL > 165 & & buttonValueL < 185) {}
playcomplete ("L3. WAV");
}
Delay(25);
Si (buttonValueL > 325 & & buttonValueL < 350) {}
playcomplete («L4. WAV");
}
Delay(25);
Aleatoria el efecto de sonido cuando se presiona el último botón en el brazo izquierdo
Si (buttonValueL > 495 & & buttonValueL < 515) {}
randChoose = al azar (1, 20); generar la posibilidad de elegir entre 1 y 20
interruptor (randChoose)
{
caso 1:
playcomplete ("RAND1. WAV");
rotura;
caso 2:
playcomplete ("RAND2. WAV");
rotura;
caso 3:
playcomplete ("RAND3. WAV");
rotura;
caso 4:
playcomplete ("RAND4. WAV");
rotura;
caso 5:
playcomplete ("RAND5. WAV");
rotura;
caso 6:
playcomplete ("RAND6. WAV");
rotura;
caso 7:
playcomplete ("RAND7. WAV");
rotura;
caso 8:
playcomplete ("RAND8. WAV");
rotura;
caso 9:
playcomplete ("RAND9. WAV");
rotura;
caso 10:
playcomplete ("RAND10. WAV");
rotura;
caso 11:
playcomplete ("RAND11. WAV");
rotura;
caso 12:
playcomplete ("RAND12. WAV");
rotura;
caso 13:
playcomplete ("RAND13. WAV");
rotura;
caso 14:
playcomplete ("RAND14. WAV");
rotura;
caso 15:
playcomplete ("RAND15. WAV");
rotura;
caso 16:
playcomplete ("RAND16. WAV");
rotura;
caso 17:
playcomplete ("RAND17. WAV");
rotura;
caso 18:
playcomplete ("RAND18. WAV");
rotura;
caso 19:
playcomplete ("RAND19. WAV");
rotura;
caso 20:
playcomplete ("RAND20. WAV");
rotura;
}
Delay(25);
}
}
Reproduce un archivo completo de principio a fin sin pausa.
void playcomplete(char *name) {}
llamar a nuestro ayudante para buscar y reproducir este nombre
playfile(Name);
mientras (wave.isplaying) {}
no hacer nada durante la reproducción de su
}
su hecho reproduciendo
}
void playfile(char *name) {}
ver si el objeto ola está haciendo algo
Si (wave.isplaying) {/ / así que ya está reproduciendo algo, stop!
Wave.STOP(); Basta
}
Buscar en el directorio raíz y abre el archivo
Si (! f.open (raíz, nombre)) {}
putstring ("no puede abrir archivo"); Serial.Print(Name); retorno;
}
Leer bien el archivo y convertirlo en un objeto de onda
Si (! {wave.create(f))}
putstring_nl ("no un válido WAV"); retorno;
}
OK el tiempo para jugar! iniciar la reproducción
Wave.Play();
}