Paso 10: códigos
Descargar arduino 1.0.También, antes de usar el código vaya a http://www.ladyada.net/make/waveshield/use.html.
Usted debe formatear la tarjeta SD, convertir archivos de audio como se sugiere en este sitio.
Además, no te olvides de poner el audio se puede convertir a la tarjeta SD.
Código de Arduino que utilizamos:
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#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 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
#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;
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() {}
Configurar puerto serie
Serial.Begin(9600);
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
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!");
}
void loop() {}
putstring("."); Sin comentarios para ver si no está ejecutando el bucle
int sensorValue;
sensorValue = analogRead(2); leyó el pin de entrada analógica 2
if(sensorValue<100) {/ / determina la canción que tocamos
playcomplete ("agua. WAV");
playcomplete ("viernes. WAV");
}
else if (sensorValue > = 100 & & sensorValue < 250) {}
playcomplete ("milkbaby. WAV");
playcomplete ("bebé. WAV");}
Else {playcomplete ("coque. WAV");
playcomplete ("myjeans. WAV");
}
}
void playcomplete(char *name) {}
llamar a nuestro ayudante para buscar y reproducir este nombre
playfile(Name);
mientras (wave.isplaying) {//while es jugar!
int16_t potval = 450;
newsamplerate de uint32_t;
int16_t lastpotval = 0;
#define histéresis 3
int sensorValue;
sensorValue = analogRead(5); leer entrada 5 que es el sensor de luz ambiente
if(sensorValue<10) {}
Break;} Si tenemos cerca el sensor de luz ambiente, detiene la canción y cambiar a otra música
Este es el código que cambia la velocidad
potval = analogRead(0); leer el sensor de curva y este código cambia la velocidad según el sensor
Si (((potval-lastpotval) > histéresis) || ((lastpotval-potval) > histéresis)) {
newsamplerate = wave.dwSamplesPerSec; obtener la frecuencia de muestreo original
newsamplerate * = potval; escala el valor analógico
newsamplerate = 512; queremos 'split' entre 2 x acelerado y desacelerado.
wave.setSampleRate(newsamplerate); ponerlo inmediatamente!
Serial.println (newsamplerate, DEC); para la depuración
lastpotval = potval;
}
Serial.Print(potval,DEC);
Delay(100);
}
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();}