Hada de los dientes, la marioneta de la felpa rugiendo (3 / 7 paso)

Paso 3: Código conductual Resumen

En el bucle principal, leemos continuamente desde el sensor de luz
Si la entrada de sensor de luz supera un determinado valor, entonces el MP3 empieza a jugar
Si la entrada de sensor de luz cae por debajo de cierto valor, entonces se detiene el MP3

Mientras se reproduce el MP3, la entrada de sensor de luz se convierte en un nivel de decibelios para el MP3, donde más luz es igual a sonido más alto
Además, el sensor de luz de entrada valores de controles el LED dentro del bucle principal y el bucle de MP3
Como el aumento de entrada de sensor de luz, los aumentos de LED rojo y el LED azul disminuye

Aquí está el código:

código de < >

#include < SPI.h >

#include < SdFat.h >
#include < SdFatUtil.h >

#define cierto 1
#define falso 0

Tarjeta de Sd2Card;
Volumen de SdVolume;
SdFile raíz;
Pista de SdFile;

Asignación de pin de escudo de reproductor de MP3. Ver el esquema
#define MP3_XCS 6 //Control Chip seleccione Pin (para acceder a registros de Control de SPI, estado)
#define MP3_XDCS 7 //Data Chip Select / Pin BSYNC
#define MP3_DREQ 2 //Data solicitar Pin: jugador pide más datos
#define MP3_RESET 8 //Reset es el mínimo de activo
Recuerda que tienes que editar los Sd2PinMap.h de la biblioteca sdfatlib para corregir el control de la tarjeta SD.

VS10xx SCI registros
#define SCI_MODE 0 x 00
#define SCI_STATUS 0 x 01
#define SCI_BASS 0 x 02
#define SCI_CLOCKF 0 x 03
#define SCI_DECODE_TIME 0 x 04
#define SCI_AUDATA 0 x 05
#define SCI_WRAM 0 x 06
#define SCI_WRAMADDR 0x07
#define SCI_HDAT0 0x08
#define SCI_HDAT1 0 x 09
#define SCI_AIADDR 0x0A
#define SCI_VOL 0x0B
#define SCI_AICTRL0 0x0C
#define SCI_AICTRL1 0x0D
#define SCI_AICTRL2 0x0E
#define SCI_AICTRL3 0x0F

Este es el nombre del archivo en la tarjeta microSD que gustaría jugar
Stick con ceñiros 8,3 normal. Todo minúsculas funciona bien.
Nota: usted debe nombrar a las pistas en la tarjeta SD con 001, 002, 003, etc..
Por ejemplo, el código está esperando para jugar 'track002.mp3', no track2.mp3.
Char [] trackName = "sound.mp3";
número de pista int = 1;
int previousTrigger = 1; Esto indica que ya nos hemos accionado en 1

errorMsg Char [100]; Se trata de una matriz genérica utilizada para sprintf de mensajes de error

int inputPin = A0;
int inputValue = 0;
int blueOutputValue = 0;
int blueOutputLED = 5;
int redOutputValue = 0;
int redOutputLED = 10;
outputVolume int = 0;

lastCheck largo; Esto almacena el último milisegundo desde que tuvimos un gatillo

int is_playing;
int time_since_play;

int checkTriggers(void) {}

#define DEBOUNCE 100

int foundTrigger = 255;

Una vez que se activa un desencadenador, no queremos provocar en él perpetuamente
Pero después de 3 segundos, restablecer el número anterior de gatillo
Si ((previousTrigger! = 255) & & (millis() - lastCheck) > 3000) {}
lastCheck = millis();
previousTrigger = 255;
Serial.println ("anterior disparo reset");
}

Si (foundTrigger! = previousTrigger) {//We've tiene un nuevo desencadenador!
previousTrigger = foundTrigger;

Serial.Print("T");
Serial.println (foundTrigger, DEC);

Return(foundTrigger);
}
otra cosa
Return(255); No desencadenantes tiraron bajo (activado)
}

playMP3 - incluye función de ejemplo de SparkFun

void playMP3 (char * nombre) {}

Si (! track.open (y raíz, nombre de archivo, O_READ)) {//Open el archivo en modo lectura.
sprintf (errorMsg, "Error al abrir %s", nombre);
Serial.println(errorMsg);
retorno;
}

sprintf (errorMsg, "Pista de juego %s", nombre);
Serial.println(errorMsg);

mp3DataBuffer de uint8_t [32]; Búfer de 32 bytes. VS1053 puede tomar 32 bytes en un ir.
int need_data = TRUE;

{while(1)}
{while(!digitalRead(MP3_DREQ))}
DREQ es baja mientras que el búfer de recepción está lleno
Usted puede hacer algo más aquí, el buffer del MP3 es plena y feliz.
Puede ajustar el volumen o prueba a ver cuánto nos podemos retrasar antes de que se escuchan interferencias audibles

Si el IC de MP3 es feliz, pero necesitamos leer nuevos datos de la SD, ahora es un buen momento para hacerlo
if(need_data == true) {}
Si (! track.read (mp3DataBuffer, sizeof(mp3DataBuffer))) {//Try lectura de 32 bytes nuevo de la canción
¡ Oh no! No queda ningún datos para leer!
Tiempo para salir
rotura;
}
need_data = FALSE;
}

Compruebe para ver si necesitamos libertad bajo fianza en esta pista
if(checkTriggers()! = 255) {}
Serial.println ("salir MP3!");
Track.Close(); Cerrar esta pista!
previousTrigger = 255; Truco la próxima comprobación en pensamiento no hemos visto un desencadenador anterior
retorno;
}
}

if(need_data == true) {//This está aquí en caso de que no hemos tenido ningún tiempo libre para cargar nuevos datos
Si (! track.read (mp3DataBuffer, sizeof(mp3DataBuffer))) {//Go hacia fuera a la tarjeta SD y tratar de lectura de 32 bytes nuevo de la canción
¡ Oh no! No queda ningún datos para leer!
Tiempo para salir
rotura;
}
need_data = FALSE;
}

Una vez liberada (alto) DREQ ahora alimentamos a 32 bytes de datos a la VS1053 de nuestra SD leer buffer
digitalWrite (MP3_XDCS, bajo); Seleccionar datos
para (int y = 0; y < sizeof(mp3DataBuffer); y ++)
SPI.transfer(mp3DataBuffer[y]); Enviar byte SPI

digitalWrite (MP3_XDCS, alto); Anule la selección de datos
need_data = TRUE; Sólo hemos vertido 32 bytes en VS1053 nuestro SD leer el buffer está vacío. Establecido así que vamos a obtener datos más

inputValue = analogRead(inputPin);

outputVolume = mapa (inputValue, 0, 1023, 60, -20); <---es donde hace más fuerte/más suave dependiendo de cuánto luz entrada tu títere obtiene

redOutputValue = mapa (inputValue, 0, 1023, 0, 255);
blueOutputValue = mapa (inputValue, 0, 1023, 0, 255);

Mp3SetVolume (outputVolume, outputVolume);

analogWrite (redOutputLED, redOutputValue);
analogWrite (blueOutputLED, blueOutputValue);

}

while(!digitalRead(MP3_DREQ)); Espere DREQ ir indicando altos de la transferencia es completa
digitalWrite (MP3_XDCS, alto); Anule la selección de datos

Track.Close(); Cerrar esta pista

sprintf (errorMsg, "Pista %s hecho!", fileName);
Serial.println(errorMsg);
}

void setup()
{
pinMode (MP3_DREQ, entrada);
pinMode (MP3_XCS, salida);
pinMode (MP3_XDCS, salida);
pinMode (MP3_RESET, salida);

digitalWrite (MP3_XCS, alto); Anule la selección de Control
digitalWrite (MP3_XDCS, alto); Anule la selección de datos
digitalWrite (MP3_RESET, bajo); Poner VS1053 en reinicio de hardware

pinMode (inputPin, entrada);       declarar el LDR como INSUMO
pinMode (redOutputLED, salida);  declara el ledPin como salida
pinMode (blueOutputLED, salida);

Serial.Begin(57600); Use el serial para la depuración
Serial.println ("MP3 Player ejemplo usando Control");

Interfaz de la tarjeta SD de instalación
pinMode (10, salida);       PIN 10 se debe establecer como una salida para la comunicación de SD trabajar.
Si (! card.init(SPI_FULL_SPEED)) Serial.println ("Error: init de tarjeta"); Inicializar la tarjeta SD y configurar los pines de I/O.
Si (! volume.init (y tarjeta)) Serial.println ("Error: volumen ini"); Inicializar un volumen en la tarjeta SD.
Si (! root.openRoot (y volumen)) Serial.println ("Error: raíz de la apertura"); Abra el directorio raíz del volumen.

No necesitamos configurar SPI para VS1053 porque esto ya ha sido realizado por el SDfatlib

Página 12 de la hoja de datos, max Lee SCI es CLKI/7. Entrada reloj es 12.288 MHz.
Multiplicador de reloj interno es 1,0 x después de la energía para arriba.
Por lo tanto, velocidad máxima de SPI es de 1,75 MHz. Usaremos 1MHz seguro.
SPI.setClockDivider(SPI_CLOCK_DIV16); Ajustar la velocidad del bus SPI a 1MHz (16MHz / 16 = 1 MHz)
SPI.transfer(0xFF); Lanzar un maniquí bytes en el bus

Inicializar el chip VS1053
Delay(10);
digitalWrite (MP3_RESET, alto); Subir VS1053

Mp3SetVolume (20, 20); Volumen inicial (20 = - 10dB) LOUD
Mp3SetVolume (40, 40); Volumen inicial (20 = - 10dB) manejable
Mp3SetVolume (80, 80); Volumen inicial (20 = - 10dB) más tranquilo

Ahora que tenemos el VS1053 para arriba y correr, aumentar el multiplicador de reloj interno y hasta nuestra tasa de SPI
Mp3WriteRegister (SCI_CLOCKF, 0x60, 0 x 00); Sistema multiplicador a x 3.0

Página 12 de la hoja de datos, max Lee SCI es CLKI/7. Entrada reloj es 12.288 MHz.
Multiplicador de reloj interno es ahora x 3.
Por lo tanto, velocidad máxima de SPI es de que 5 MHz. 4MHz estarán a salvo.
SPI.setClockDivider(SPI_CLOCK_DIV4); Ajustar la velocidad del bus SPI a 4MHz (16MHz / 4 = 4 MHz)

Configuración del IC mp3 completo

Serial.println ("hecho con la instalación");

}

void loop()
{
inputValue = analogRead(inputPin);

LED ojos pedacitos (afinando necesidades de valores cuando se coloca en marioneta final)

redOutputValue = mapa (inputValue, 0, 1023, 0, 255);
blueOutputValue = mapa (inputValue, 0, 1023, 0, 255);
/ * Si (inputValue > 50)
{
blueOutputValue = 0;
}
Si (inputValue < 20)
{
redOutputValue = 0;
} */

Si es lo suficientemente abierto (inputValue > 600) //if boca
{
Si (is_playing == 0)
{
playMP3(trackName);
is_playing = 1;
}
}
Si (inputValue < 500) / / si boca se cierra bastante
{
Track.Close();
is_playing = 0;

}

Serial.Print(inputValue); a ver si funciona correctamente el sensor de luz
Serial.Print("\n");
analogWrite (redOutputLED, redOutputValue);
analogWrite (blueOutputLED, blueOutputValue);
}

Escribir a VS10xx registro - ejemplo de SparkFun
Lic: Las transferencias de datos son siempre de 16 bits. Cuando entra una nueva operación de SCI
DREQ baja. Entonces tenemos que esperar para que DREQ ir alto otra vez.
XCS debe ser baja para la duración completa de la operación.
void Mp3WriteRegister (unsigned char addressbyte, highbyte unsigned char, unsigned char lowbyte) {}
while(!digitalRead(MP3_DREQ)); Espere DREQ ir alta indicando IC disponible
digitalWrite (MP3_XCS, bajo); Seleccione control

SCI consta de byte de la instrucción, dirección byte y palabra de datos de 16 bits.
SPI.transfer(0x02); Escribir instrucciones
SPI.transfer(addressbyte);
SPI.transfer(highbyte);
SPI.transfer(lowbyte);
while(!digitalRead(MP3_DREQ)); Espere DREQ ir comando indicando alta es completa
digitalWrite (MP3_XCS, alto); Anule la selección de Control
}

Establecer registro de volumen de VS10xx - volumen establece la función del ejemplo de SparkFun
void Mp3SetVolume (unsigned char leftchannel, unsigned char rightchannel) {}
Mp3WriteRegister (SCI_VOL, leftchannel, rightchannel);
}

< / código >

Artículos Relacionados

Disfraz de hada de los dientes fácil

Disfraz de hada de los dientes fácil

Mi marido y yo pasamos muuuucho demasiado en nuestros propios disfraces como hipo y Astrid de cómo al tren su Dragon 2. Necesitábamos a manivela a un disfraz de hada de los dientes de mi niño en pocas horas antes de la gran trick or treat. Esto fue b
Escultura de hada de los dientes

Escultura de hada de los dientes

Me encanta "Cómo a Train Your Dragon". Desdentado es uno de mis favoritos dragones, y estaba super emocionado de tener la oportunidad de hacer mi propia hada de los dientes para agregar a mi colección de dragones.Paso 1: fuentes deAquí es lo que
Cómo hacer una almohada de hada de los dientes

Cómo hacer una almohada de hada de los dientes

una almohada de hada de los dientes que se cierne sobre el pomo de la puerta de su hijo es mucho más fácil para el hada de los dientes a que un pequeño diente escondido debajo de una almohada. Siga estos sencillos pasos para hacer tu propia almohada
Hacer el duende, hada de los dientes o huellas de cualquier carácter pequeñas

Hacer el duende, hada de los dientes o huellas de cualquier carácter pequeñas

¿Quieres hacer que tus hijos creen en cuentos de hadas? Si, usted puede aprender aquí cómo hacer fácilmente pequeñas huellas dejar como "evidencia" de que las pequeñas criaturas, tales como los duendes, el hada de los dientes o cualquier otro pe
Almohada de hada de los dientes

Almohada de hada de los dientes

Una almohada de hada de los dientes es una divertida manera para que los niños a saludar al hada de los dientes! Coloque el diente en el bolsillo del diente en la parte delantera de la almohada y el hada de los dientes lo reemplazará con su regalo.De
Traje de hada de los dientes (para los perros!)

Traje de hada de los dientes (para los perros!)

¿Quieres tener el mejor disfraz de perro alguna vez? Revisa este tutorial. ;)Materiales:PERRO trata (este es el material más importante!)envoltura de plástico transparente *cinta de ducto *relleno de algodón *tejido (para el mono)cremalleraVelcroarné
Restauración de un cortacéspedes de montar a caballo viejo - y agregar los dientes!!

Restauración de un cortacéspedes de montar a caballo viejo - y agregar los dientes!!

Hay un gran interés en el reciclaje de hoy, sin embargo, una de las formas más descuidadas de reciclaje permite que equipos antiguos simplemente se deterioran y desaparecen.  Una de mis actividades favoritas es encontrar algo viejo y descuidado y res
Cepillarse los dientes con una botella de Jack (Jack Daniels cepillo de dientes)

Cepillarse los dientes con una botella de Jack (Jack Daniels cepillo de dientes)

¿Te despiertas en el mornin' Feelin ' como P-Diddy?¿Agarra tus gafas y funcionar hacia fuera la puerta para golpear la ciudad?Antes de salir vas a tener que cepillar los dientes con una botella de Jack.Porque al salir por la noche, está no va a volve
Cómo blanquear los dientes con materiales comunes del hogar

Cómo blanquear los dientes con materiales comunes del hogar

Paso 1: Materiales que necesitará: Bicarbonato de sodio (puro)Peróxido de hidrógeno (3%)Cepillo de dientes (preferiblemente diferente al que usas diariamente)1 vidrio de mezclaMezcla de herramienta (plata)Una medida de cucharaditaPaso 2: Tomar el bic
Remineralizante de los dientes

Remineralizante de los dientes

cómo llegar a cavidad libre sin el taladro y el dentistaPaso 1: Que yoMe gustaría empezar diciendo que no soy responsable de cualquier lesión o ptoblems que puede ocurrir de que después de este instructable. Lo hace bajo su propio riesgo. No existe s
Cómo cepillar los dientes de su perro

Cómo cepillar los dientes de su perro

mientras que los perros rara vez obtienen cavidades, placa y sarro en los dientes de su perro pueden llevar a problemas serios. Enfermedad de las encías puede ser dolorosa y causar pérdida de dientes, pérdida de masa ósea, mal aliento e infección. La
Cómo cepillarse los dientes

Cómo cepillarse los dientes

Paso 1: Asegúrese de que los dientes están suciosPaso 2: ¿Qué necesitas? Un cepillo de dientes, pasta de dientes (diferentes sabores: fresa, manzana, refrescante,...) una toalla, una taza de agua y un lavabo.Paso 3: Tome su cepillo de dientesPaso 4:
Brillante, brillante de los dientes de diosa

Brillante, brillante de los dientes de diosa

este instructable le mostrará cómo blanquear sus dientes con fresas!Paso 1: fuentes dePaso 2: SMASH Puré de las fresas en un recipiente.Paso 3: Bakin Soda Añadir bicarbonato a la mezcla. Aproximadamente 1 cucharadita.Paso 4: diente Aplique la mezcla
Hacer el molde de los dientes para los dientes Halloween

Hacer el molde de los dientes para los dientes Halloween

aquí es cómo hacer un modelo de los dientes para enviar a un fabricante de dientes personalizado.Paso 1: Obtener materiales recibí la mayor parte de mis materiales de pintura de la perla en Canal Street... que es en Nueva York, pero probablemente ust