IMP-ERSONATOR: Electric Imp + Arduino + protector de la onda = reproductor de archivos de sonido remoto (3 / 7 paso)

Paso 3: Añadir el código para el Arduino

Código el Arduino es un mashup de un ejemplo básico de Electric Imp y el ejemplo de botones para el protector de la onda.
Necesita una librería llamada WaveHC para el protector de la onda que encontrarás cuando sigues el tutorial de Ladyada.

Lo primero es establecer una conexión en serie con el Imp eléctrico para que las señales recibidas pueden ser utilizadas.
Entonces el código trata una señal recibida en uno de los pasadores del Imp como si fuera un pulsador. Esto a su vez hace que un archivo de sonido a reproducir desde la SD a través de la biblioteca de protector de la onda.

Copie el código abajo y pegarlo en el IDE de Arduino y subirlo a la Junta:

/*
Este código establece una conexión serial a un archivos de sonido eléctrico Imp y disparadores para reproducir desde una tarjeta SD cuando se recibe una señal de la Imp.
Básicamente es un mashup de lo ejemplo de botones escudo de onda y el ejemplo de arduino básico eléctrico imp
Pernos:
8,9 para imp
Pines 13, 12 y 11 se utilizan para hablar de la tarjeta SD y no se puede cambiar.
El resto de los pines, sin embargo, son más flexibles.
2 -> LCS
3 -> CLK
4 -> DI
5 -> LAT
10 -> CCS
0 = onwayhome.wav
6 = friday.wav
7 = tea.wav
*/

Necesita la biblioteca de WaveHC
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"
#include < SoftwareSerial.h >
configurar un conncetion serial para el Imp
ImpSerial SoftwareSerial (8, 9); RX 8, TX 9

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 5 / botón debouncer

Aquí es donde definimos los "botones" que vamos a utilizar - en este caso están conectados a los pines en el Imp eléctrico
botones de Byte [] = {6,0,7};
Esta macro útil nos permite determinar cuán grande es la matriz hasta arriba, comprobando el tamaño
#define NUMBUTTONS sizeof(buttons)
haremos el seguimiento si un botón se presiona sólo, sólo lanzado o 'presionado' (estado actual)
byte volátil presiona [NUMBUTTONS], justpressed [NUMBUTTONS], justreleased [NUMBUTTONS];

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() {}
byte me;

Configurar puerto serie
Serial.Begin(19200);
putstring_nl ("WaveHC con");
Serial.Print (NUMBUTTONS, DEC);
putstring_nl("buttons");

putstring ("memoria RAM libre:");       Esto puede ayudar con la depuración, es malo quedarse sin RAM
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 (2, salida);
pinMode (3, salida);
pinMode (4, salida);
pinMode (5, salida);
establecer la tarifa de datos para el puerto SoftwareSerial
impSerial.begin(19200);

Hacer entrada y habilitar las resistencias pull-up en las patillas del interruptor
para (i = 0; i < NUMBUTTONS; i ++) {}
pinMode (botones [i], entrada);
digitalWrite (botones [i], HIGH);
}

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!");

TCCR2A = 0;
TCCR2B = 1 << CS22 | 1 << CS21 | 1 << CS20;

Permiten interrumpir el desbordamiento del TIMER2
TIMSK2 | = 1 << TOIE2;

}

{Signal(TIMER2_OVF_vect)}
check_switches();
}

void check_switches()
{
Static byte previousstate [NUMBUTTONS];
currentstate static byte [NUMBUTTONS];
Índice de bytes;

para (índice = 0; índice < NUMBUTTONS; índice ++) {}
CurrentState [índice] = digitalRead(buttons[index]);   leer el botón

/*
Serial.Print (índice, DEC);
Serial.Print (": cstate =");
Serial.Print (currentstate [índice], DEC);
Serial.Print (", pstate =");
Serial.Print (previousstate [index], DEC);
Serial.Print (", presione =");
*/

Si (currentstate [índice] == {} previousstate[index])
Si ((presiona [índice] == LOW) & & (currentstate [índice] == LOW)) {}
solo presiona
justpressed [index] = 1;
}
else if ((presiona [índice] == HIGH) & & (currentstate [índice] == HIGH)) {}
acaba de publicar
justreleased [index] = 1;
}
presiona [índice] =! currentstate [índice];  Recuerde, medios digitales de alta no
}
Serial.println (prensada [índice], DEC);
previousstate [index] = currentstate [índice];   mantener una cuenta corriente de los botones
}
}

void loop() {}
Enviar datos desde el software de serie
Si (impSerial.available())
Serial.Write(impSerial.Read());  para el hardware de serie
Enviar datos desde el hardware serie
Si (Serial.available())
impSerial.write(Serial.read());  el software serie

byte me;

Si (justpressed[0]) {}
justpressed [0] = 0;
Serial.println ("pin 6 activadas");
playcomplete("Home.wav");
}

Si (justpressed[1]) {}
justpressed [1] = 0;
Serial.println ("pin 0 activadas");
playcomplete("Friday.wav");
}
Si (justpressed[2]) {}
justpressed [2] = 0;
Serial.println ("pin 7 activadas");
playcomplete("Tea.wav");
}
/*
Si (justpressed[3]) {}
justpressed [3] = 0;
playcomplete ("su Song.wav");
}
Si (justpressed[4]) {}
justpressed [4] = 0;
playcomplete ("su Song.wav");
}
Si (justpressed[5]) {}
justpressed [5] = 0;
playcomplete ("su Song.wav");
}
*/
}

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

Artículos Relacionados

Leer correo electrónico con Arduino y protector de la onda

Leer correo electrónico con Arduino y protector de la onda

como parte de mi proyecto (ese proyecto es en un concurso así que si usted esta entonces vota por que!) que usa un Arduino para interrumpir una fuente de sonido extrernal (es decir, iPod) para hacerle saber acerca de cosas que a tu alrededor, lo tení
Adafruit protector de la onda + arduino uno R3 = alarma (knight rider)

Adafruit protector de la onda + arduino uno R3 = alarma (knight rider)

Hey!Nuestro almacén tiene roto en hace un tiempo y han robado 2 bicicletas y mi laptop que yo solo he reparado. El portátil no merece la pena mucho, sin embargo, es (era) de un valor enorme, personal para mí y es más bien una vergüenza si algo consig
Realizar seguimiento de su ruta. (usando arduino, protector de tarjeta microSD y GPS)

Realizar seguimiento de su ruta. (usando arduino, protector de tarjeta microSD y GPS)

Usando Arduino Mega, MediaTek MT3329 GPS, datos Arduino MicroSD shieldy un par de pilas de 9V, hacer una pequeña unidad que puede ir a cualquier parte y luego asignar el recorrido en un simple paso.Paso 1: Hardware necesario Micro SD cardEscudo de ta
Mostrar datos en un sitio web - olla electrónica [Arduino Nano + Ethernet Shield]

Mostrar datos en un sitio web - olla electrónica [Arduino Nano + Ethernet Shield]

Siempre quise una planta en mi cuarto, que llenaría el espacio entre proyectos inacabados y caro, pero innecesario de componentes electrónicos. Así surgió la idea de una olla electrónica – The Arduino E-Pot – que se mide las necesidades básicas de la
Nivel de burbuja electrónico Arduino Micro

Nivel de burbuja electrónico Arduino Micro

Un año o así que de nuevo me construido un indicador de nivel de polo cámara que utiliza L.E.Ds para indicar el ángulo de la torre como una ayuda visual. Funcionó bien para lo que yo pretendía pero siempre he pensado podría ser "jazzed para arriba&qu
Construir un XBMC/KODI remoto con Arduino, protector del Sensor IR y VB.NET

Construir un XBMC/KODI remoto con Arduino, protector del Sensor IR y VB.NET

Construir un XBMC/KODI remoto con Arduino y un protector del Sensor IR, que funciona con cualquier mando a distancia.Quería controlar mi PC XBMC/Kodi de control remoto de mi decodificador satélite, ya sea ver películas en XMBC/Kodi o TV vía satélite,
Remitente de correo electrónico Arduino Ethernet adaptador/escudo

Remitente de correo electrónico Arduino Ethernet adaptador/escudo

Hola de nuevo.No hace mucho llegué a de 50.000 vistas en mi módulo de ESP8266 Wi-fi. Me sorprendió bastante y queria agradecer a todos los que visto, le gustó y comentado en él. El 2 de septiembre., he publicado instructable sobre estación meteorológ
Portátil, modular electrónica Arduino experimentadores y reparación laboratorio establecido.

Portátil, modular electrónica Arduino experimentadores y reparación laboratorio establecido.

Esta es la configuración de laboratorio modular y portátil que utilizo para disfrutar de prototipos y construcción de proyectos de electrónica con Arduino. A veces viajan al extranjero y tenerlo conmigo para distraerme durante el tiempo libre que ten
SEEED Studio / ladrillo electrónico Arduino: módulo de relé de 5V (Digital)--

SEEED Studio / ladrillo electrónico Arduino: módulo de relé de 5V (Digital)--

trabajando con el relé digital para control de alta tensión puede ser difícil de entender.  Hay no hay instrucciones sobre cómo hacer esto se realizar con un ARDUINO.  He creado esto para que personas podrán utilizar el relé con una toma de corriente
Alertas de correo electrónico Arduino

Alertas de correo electrónico Arduino

¡ Hola! En este instructable, te voy a mostrar cómo activar un LED cuando llegue un correo electrónico. La razón por la que hizo esto es porque cuando llego a casa de la escuela, quiero saber si me debo molesto en revisar mi correo.Es muy sencillo.Es
Mini portátil de Arduino EEG - Monitor de onda cerebral +

Mini portátil de Arduino EEG - Monitor de onda cerebral +

este es otro ejemplo de la versatilidad, y de lo que, el Arduino, una pequeña pantalla LCD Color y el tipo de sensores, son capaces de hacer.NOTA:Se trata de un trabajo en progreso... Trabajaba en varias fases hasta completar a un "monitor portátil s
Arduino desarrollado por tu SmartPhone (con SERIAL) - parte 1 - sonido y vibración acciones

Arduino desarrollado por tu SmartPhone (con SERIAL) - parte 1 - sonido y vibración acciones

Bienvenido a la primera parte de esta serie. En esta serie de que vamos a tratar saca tanto como podemos desde smartphone (android actualmente) a su microcontrolador usando cable serial (cable OTG).En esta parte vamos a explicar cómo puede reproducir
Dual Core Arduino / Atemga328 - Robot controlador y reproductor de Audio

Dual Core Arduino / Atemga328 - Robot controlador y reproductor de Audio

Hola creadores compañeros allí,Deseo compartir algunas experiencias que he engordado mientras trabajaba en mi
Reproducir archivos de sonido audio (wav) con un Arduino

Reproducir archivos de sonido audio (wav) con un Arduino

Reproducir el archivo wav Audio de tu tarjeta SD Audino.Este Instructable le mostrará cómo se puede reproducir un archivo wav en su SdCard a través de un circuito simple a un altavoz.El archivo wav debe ser mono de 8 bits. No he tenido ningún problem