Caja de almuerzo que juega extractos de "Los Simpson"

aunque no es un instructivo paso a paso, espero que usted puede conseguir la esencia de lo que hice y voy a intentar responder a las preguntas lo mejor que pueda.

Mi hijo es un gran fan de los Simpsons (y supongo, soy yo).  He creado como un regalo para él para la Navidad.

Lo que tenemos aquí es la caja de almuerzo de los Simpson que, cuando se presiona el interruptor rojo, jugarán al azar uno de 413 archivos wav que se almacenan en la tarjeta SD que se utiliza por el waveshield Adafruit.

Sigue un video de ella en uso.

Los materiales utilizados son:

-Arduino UNO
-Adafruit onda Shield Kit v1.1
-2GB SD card
-Caja de almuerzo Simpsons - de Amazon.com
-2 baterías de 9 voltios y 2 sostenedores - radio shack
-3 LEDs
-un altavoz de 8 ohm
-un interruptor DPDT
-un par de condensadores, resistencias y un LM386 chip para un pequeño amplificador, el sonido del protector de la onda no es lo suficientemente alto para el altavoz.

-Algunos cables

También usé un lector de tarjetas SD y un programa llamado Switch-it a descomprimir los archivos wav.

Pasos:
1. comprar un Arduino Uno - muchas fuentes para esto - aproximadamente $25,00

2. comprar un Kit de Adafruit Waveshield - cerca de las 22.00.
Esto debe ser montado y las instrucciones están aquí:
http://www.Ladyada.net/make/waveshield/make.html

(Estos son fáciles de seguir las instrucciones con muchas buenas fotos)

3. comprar una tarjeta SD de 2gb para ser utilizado en el protector de la onda

4. hice una búsqueda en internet para: "Simpson wav" y encontré un par de sitios que tenía una buena colección de fragmentos de archivo de wav de los Simpsons.   Pude (con ayuda de mi hijo) Descargar más de 400 archivos y guardarlos en la tarjeta SD.

-Nota el protector de la onda no como archivos comprimidos así que algunos de los archivos necesarios para ser descomprimido que hice usando un software freeware llamado "Switch-it".

5. desde la salida de sonido del protector de la onda está muy bien para auriculares pero no era lo bastante fuerte como para que el altavoz, he enviado la salida del protector de la onda a un pequeño amplificador LM386 que construí utilizando las instrucciones siguientes.

http://www.rason.org/projects/icamps/icamps.htm

6.  Añadido LEDs para indicar que está encendido (lado del interruptor) y para indicar cuándo es aceptable solicitar un nuevo archivo.

(Nota: he añadido una función que cuando se presiona el interruptor rojo cuando el LED verde está parpadeando, toda la onda se reproducirá archivos)

7. otras observaciones:
-básicamente el código espera a que el interruptor rojo ser presionado.
a continuación, genera un randow número entre 1 y 413 (el número de archivos).  Entonces lee a través de los archivos de onda e incrementa un contador hasta que se alcance el número aleatorio.  Luego juega con ese archivo.   Esto significa que el número de archivos es difícil codificado en el código.  Probablemente hay alguna manera que la figura de código cuántos archivos hay.
-a veces no puede reproducir un archivo creo que es porque también no le gusta archivos estéreo.

8. el código:

-copiados de diversas fuentes y lo indicado en el código.  En concreto, empecé con el código que está en el sitio de Adafruit y modificado según sea necesario.

/*

trata de reproducir un archivo wav al azar cada vez que se pulse el botón
V2 intentando añadir botón y otro código
V2 funciona bien
V3 - añadir capacidad de reproducir todas las canciones manteniendo el botón pulsado durante el parpadeo

*/

#include
#include

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 directorio de raíz de volúmenes

Ola WaveHC;      Este es el único objeto (audio) de la onda, puesto que sólo jugaremos uno a la vez

dirLevel de uint8_t; aplicar sangría a nivel de nombres de archivo/dir (para prettyIndent)
dirBuf de dir_t;     buffer para directorio lecturas

#define DEBOUNCE 5 / botón debouncer
const int buttonPin = 8;     el número de pin pulsador
int buttonState = 0;         variable para lectura del estado del pulsador

para el juego de rsndom
largo randNumber;
ct largo = 0;

necesarios para la reproducción de todas
playAll int = 0;
int numPress = 0;         variable para lectura del estado del pulsador
xx int = 0;
firstTime mucho = 1;

hay que cambiar esto para igual numberr de archivos wav en tarjeta sd
numWavs largo = 413;

const int ledPin = 7;      el número de los pines del LED
Va a cambiar las variables:
int ledState = alto;             ledState permite configurar el LED

/*
* Definir macro para mensajes de error en memoria flash
*/
#define error(msg) error_P(PSTR(msg))

Definiciones de la función (definimos aquí, pero el código está a continuación)
juego vacío (FatReader & dir);

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;
}

//////////////////////////////////// SETUP
void setup() {}
Serial.Begin(9600);           Biblioteca Serial a 9600 bps para la depuración

Si la clavija de entrada analógica 0 es análogo al azar,
ruido hará que la llamada a randomSeed() para generar
número de semillas diferentes cada vez que se ejecuta el bosquejo.
randomSeed() entonces se baraja la función aleatorizada.
randomSeed(analogRead(3));
inicializar el perno pulsador como entrada:
pinMode (buttonPin, entrada);
configurar el pin digital como salida:

pinMode (ledPin, salida);
digitalWrite(ledPin,HIGH);

putstring_nl ("\nWave test!");  decir que nos despertamos!

putstring ("memoria RAM libre:");       Esto puede ayudar con la depuración, es malo quedarse sin RAM
Serial.println(FreeRam());

Si (! card.init()) {//play con spi de 8 MHz (por defecto más rápido!)
error ("tarjeta init. no se pudo!");  Algo salió mal, permite imprimir por qué
}

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 :(
error ("No válida partición FAT!");  Algo salió mal, permite imprimir por qué
}

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))}
error ("no puede abrir raíz dir!");      Algo salió mal,
}

¡ UF! Llegamos pasado las partes difíciles.
putstring_nl ("archivos encontrados (* = fragmentadas):");

Imprima todos los archivos en los directorios.
root.LS(LS_R | LS_FLAG_FRAGMENTED);


digitalWrite(ledPin,HIGH);
}

//////////////////////////////////// LOOP
void loop() {}
corto bucle durante 3 segundos la primera vez sólo
Si pulsa el botón más de una vez, [Coloque todas las ondas p
Serial.println (firstTime);
Delay(1000);
Si (firstTime == 1) {}
hacer
{
digitalWrite(ledPin,HIGH);
Delay(250);
digitalWrite(ledPin,LOW);
Delay(250);

numPress = digitalRead(buttonPin);
Si (numPress == HIGH) {}
playAll ++;
firstTime ++;
}
XX ++;
Serial.println (xx);
} y (xx < 10);

firstTime ++;
}

Serial.println (firstTime);
Serial.println (playAll);
Delay(1000);


leer el estado del pulsador valor:
buttonState = digitalRead(buttonPin);
digitalWrite(ledPin,HIGH);
comprobar si el pulsador está presionado.
Si es así, el buttonState es alta:
Si (buttonState == HIGH) {}

CT = 0;
reproducir un archivo wav es decir continuar con el código

digitalWrite(ledPin,LOW);

imprimir un número aleatorio de 1 a 60
randNumber = al azar (1, numWavs);
Serial.println(randNumber);

Delay(50);


root.Rewind();
Play(root);
}
Else {}
no hacer nada

}
}

/////////////////////////////////// HELPERS
/*
* imprimir mensaje de error y detener la
*/
void error_P (const char * str) {}
PgmPrint ("Error:");
SerialPrint_P(str);
sdErrorCheck();
while(1);
}
/*
* imprimir mensaje de error y detener si error E/S SD, ideal para depuración!
*/
void sdErrorCheck(void) {}
Si (! card.errorCode()) retorno;
PgmPrint ("\r\nSD I/O error:");
Serial.Print(Card.ErrorCode(), hexagonal);
PgmPrint (",");
Serial.println(Card.errorData(), hexagonal);
while(1);
}
/*
* jugar a recursivamente - con desbordamiento de pila posible si subdirectorios anidados demasiado
*/
juego vacío {} (FatReader y dir)
Archivo FatReader;
mientras (dir.readDir(dirBuf) > 0) {/ / leer cada archivo en el directorio uno a la vez

Saltar si no un subdirectorio y no una. Archivo WAV
if (!. DIR_IS_SUBDIR(dirBuf)
& & strncmp_P ((char *) & dirBuf.name[8], PSTR("WAV"), 3)) {}
continuar;
}

Serial.println();            limpiar una nueva línea

para (uint8_t i = 0; i < dirLevel; i ++) {}
Serial.Write(' ');       Esto es para prettyIndent, poner espacios en el frente
}
Si (! file.open (vol, dirBuf)) {/ / abrir el archivo en el directorio
error ("file.open fallado");          algo salió mal
}

Si (file.isDir()) {/ / comprobar si abrimos un nuevo directorio
putstring ("Subdir:");
printEntryName(dirBuf);
Serial.println();
dirLevel += 2;                      Añadir más espacios
reproducir archivos en el subdirectorio
Play(File);                         recursiva!
dirLevel-= 2;
}
Else {}
¡ Ajá! se encontró un archivo que no es un directorio
putstring ("jugando");
printEntryName(dirBuf);              imprimir
¿Si (! wave.create(file)) {/ / la figura, es un WAV correcto?
putstring ("no un válido WAV");     OK saltarlo
} else {}
Serial.println();

¡ Hurra es un WAV correcto!
TC ++;
Serial.println(randNumber);
Serial.println(CT);
Aquí es donde tenemos el archivo
Quiero sin embargo solamente el un archivo wav que es seleccionado por el número aleatorio
Si ((randNumber == ct) || (playAll > 1)) {

Wave.Play();

hacer algo de ruido!

uint8_t n = 0;
mientras (wave.isplaying) {/ / reproducción ocurre en interrupciones, por lo que imprimimos puntos en tiempo real
putstring(".");
Si (! () ++ n % 32))Serial.println();
Delay(100);
}
digitalWrite(ledPin,HIGH);
}

sdErrorCheck();                    ¿todo OK?
Si (wave.errors)Serial.println(wave.errors);     ola errores de descodificación
}
}


}
}

Artículos Relacionados

Caja de almuerzo calentado/refrescó solar

Caja de almuerzo calentado/refrescó solar

verano o invierno, algunos gustos de comidas mejor cuando están frescas y frescas, otros cuando están calientes.Para calor/frío tu almuerzo estés donde estés, hice una caja de almuerzo calentado/refrescó solar.Los paneles solares cargan las baterías,
Caja de almuerzo XBMC portátil

Caja de almuerzo XBMC portátil

Quería un sistema portátil de XBMC. Quiero tenerlo en mi remolque, camping, hoteles, casa de amigos etc. Básicamente se trata de un Pi de frambuesa corriente XMBC, USB concentrador, 2.5" SATA USB con un disco de laptop de 250 GB caja. Este caso debe
Cómo fabricar una caja de almuerzo en una fuente de alimentación 0-12V dual.

Cómo fabricar una caja de almuerzo en una fuente de alimentación 0-12V dual.

Prefacio:Hola y Bienvenidos a mi Instructable.Soy un estudiante de primer año de ingeniería electrónica y se dio la oportunidad de construir una fuente de alimentación. Inmediatamente estaba había fascinado pero quería hacer algo más que un funcionam
Caja de una Pizza caja de almuerzo

Caja de una Pizza caja de almuerzo

hace varios meses que estuve leyendo un artículo sobre el reciclaje y decidió probar y volver a usar cosas que no pueden ser recicladas. Una cosa que realmente me sorprendió fue saber que eran cajas de pizza en la lista.  Así que decidí cubrir una ca
Volver a caja de almuerzo de escuela atún (GF)

Volver a caja de almuerzo de escuela atún (GF)

Si te gusta este video y esta recetas, sería super cool si usted puede suscribirse a mi canal de YouTube: https://www.youtube.com/c/DarnyouglutenfoodPaso 1: Cómo1. Comience por preparar todos los ingredientes. Mezclar el atún, la mayonesa y la mostaz
Caja de almuerzo Bento madera

Caja de almuerzo Bento madera

preparar un lindo almuerzo y hacer que todos en la cafetería celoso con su caja de dulces personalizados bento!Las Cajas Bento son super cool, pero tan caro en línea! Hice este uno de los materiales que tenía alrededor de la casa; es prácticamente gr
Cómo hacer una caja de Bento (caja de almuerzo Japon) para un niño

Cómo hacer una caja de Bento (caja de almuerzo Japon) para un niño

un Bento Box es una caja de comida japonesa tradicional. Las cajas del bentó pueden contener cualquier número de artículos alimentarios y tipos. Cajas de almuerzo Bento tradicionales están llenos de una relación de servicio de 4:3:2:1; 4 de arroz, 3
¿Caja de almuerzo con alimentación solar impresionante

¿Caja de almuerzo con alimentación solar impresionante

alguna vez has querido un alimento portátil más caliente pero no quería gastar mucho dinero?Esta caja de almuerzo utilizando el concepto del efecto invernadero. Pueden calentar más alimentos en menos de una hora y cuesta menos de $10.Paso 1: material
El pequeño Altavoz caja de goma que podría

El pequeño Altavoz caja de goma que podría

¿Te gusta para escuchar música sin auriculares, pero no tienes mucho espacio? ¿Tienes algunas piezas de repuesto y sentados alrededor de la basura? ¿Quieres un pequeño proyecto para mostrar a amigos? Entonces esto es para ti!Este pequeño Altavoz base
Colección de cosas que he hecho en los años

Colección de cosas que he hecho en los años

he estado disfrutando de mirar todas las cosas maravillosas que todos mis compañeros crocheters y tejedores han estado compartiendo con todos nosotros y decidió que le gustaría compartir algunas de las cosas que he hecho sobre los años también. Esper
Tarjeta que juega Mazzipan

Tarjeta que juega Mazzipan

Aquí es cómo hacer una tarjeta que juega mazzipan cool poder comer o dejarlo driy y una decoraciónPaso 1: Wat necesitatodo lo que necesitas esMazzipanColorante de alimentos rojoAzúcar glasforro de pergaminoPaso 2: Cómo hacerloEspolvorear azúcar glas
Cómo dibujar a Bart Simpson (los Simpson)

Cómo dibujar a Bart Simpson (los Simpson)

Siga las instrucciones de dibujos paso a paso aquí abajo para aprender a dibujar los Simpson personaje de dibujos animados Bart Simpson.Paso 1: Paso 1Iniciar a su Bart Simpson dibujo por dibujar una forma que parece como una lata con los lados doblan
Daily Sketch de velocidad... Los Simpsons

Daily Sketch de velocidad... Los Simpsons

todo el mundo ama los Simpson. Hay algo acerca de una familia amarilla que calienta tu corazón. Se por eso decidí velocidad Esboce la familia Simpson (incluyendo perros y gatos). Se basa de un cuadro (como mi pasado) pero con modificaciones personale
Los Simpsons Lego

Los Simpsons Lego

En este instructable veremos como crear rapida y facilmente una divertida versión minimalista de nuestra familia favorita de la serie animada de Los Simpsons utilizando solo simples piezas de Lego!Paso 1: Lo imagen Estas son las piezas necesarias par