Paso 42: Arduino Uno R3
La Arduino Uno R3 Lee un valor binario de 4 dígitos de la Arduino Mega 2560 y reproduce un archivo de audio asociado con el valor binario. Esta es la voz del droide C3PO. Consulte los planos eléctricos para obtener información de conexión.
John Guarnero
Septiembre de 2014
#include
#include
#include
#include
inp6 int = 0;
int inp7 = 0;
int inp8 = 0;
int inp9 = 0;
int TC_Value = 8;
int Last_TC = 0;
int Demonstration_Value = 0;
int Last_Demonstration_Value = 1;
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
dirLevel de uint8_t; aplicar sangría a nivel de nombres de archivo/dir
dirBuf de dir_t; buffer para directorio lecturas
/*
* 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);
PROGRAMA DE INSTALACIÓN
void setup() {}
Serial.Begin(9600); Biblioteca Serial a 9600 bps para la depuración
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(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!)
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, así que
}
Si (parte == 5) {/ / si terminamos por no encontrar uno :(
error ("No válida partición FAT!"); Decir lo que pasó
}
Permite decir al usuario sobre lo ocurrido
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,
}
//
putstring_nl ("archivos encontrados (* = fragmentadas):");
Imprima todos los archivos en los directorios.
root.LS(LS_R | LS_FLAG_FRAGMENTED);
}
AYUDANTES DE
/*
* imprimir mensaje de error y detener la
*/
void error_P (const char * str) {}
PgmPrint ("Error:");
SerialPrint_P(str);
sdErrorCheck();
while(1);
}
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);
}
Inicio de bucle
void loop()
{
byte me;
inp6 = digitalRead(6); 1 binario
inp7 = digitalRead(7); 2 binario
inp8 = digitalRead(8); Binario 4
inp9 = digitalRead(9); 8 binario
Si (inp6 == alto & & inp7 == baja & & inp8 == baja & & inp9 == LOW) / / 1 2 4 8
{//Happy cumpleaños Emily
Serial.println("1");
TC_Value = 1;
playcomplete("1.wav");
retardo (1);
}
Si (inp6 == baja & & inp7 == alto & & inp8 == baja & & inp9 == LOW) / / 1 2 4 8
{//Happy cumpleaños Kim
Serial.println("2");
TC_Value = 2;
playcomplete("2.wav");
retardo (1);
}
Si (inp6 == alto & & inp7 == alto & & inp8 == baja & & inp9 == LOW) / / 1 2 4 8
{//Happy cumpleaños Megan
Serial.println("3");
TC_Value = 3;
playcomplete("3.wav");
retardo (1);
}
Si (inp6 == baja & & inp7 == baja & & inp8 == alto & & inp9 == LOW) / / 1 2 4 8
{//Welcome a la casa de Guarnero
Serial.println("4");
TC_Value = 4;
playcomplete("4.wav");
retardo (1);
}
Si (inp6 == alto & & inp7 == baja & & inp8 == alto & & inp9 == LOW) / / 1 2 4 8
{Halloween //Happy
Serial.println("5");
TC_Value = 5;
playcomplete("5.wav");
retardo (1);
}
Si (inp6 == baja & & inp7 == alto & & inp8 == alto & & inp9 == LOW) / / 1 2 4 8
{//Happy aniversario
Serial.println("6");
TC_Value = 6;
playcomplete("6.wav");
retardo (1);
}
Si (inp6 == alto & & inp7 == alto & & inp8 == HIGH & & inp9 == LOW) / / 1 2 4 8
{//Say algunos chistes
Serial.println("7");
TC_Value = 7;
playcomplete("7.wav");
retardo (1);
}
Si (inp6 == baja & & inp7 == baja & & inp8 == baja & & inp9 == HIGH) / / 1 2 4 8
{//Kim Santo diálogo y diálogo Kim R2D2
Serial.println("8");
TC_Value = 8;
playcomplete("8.wav");
retardo (1);
}
Si (inp6 == alto & & inp7 == baja & & inp8 == baja & & inp9 == HIGH) / / 1 2 4 8
{//Happy gracias
Serial.println("9");
TC_Value = 9;
playcomplete("9.wav");
retardo (1);
}
Si (inp6 == baja & & inp7 == alto & & inp8 == baja & & inp9 == HIGH) / / 1 2 4 8
{//Kims diálogo de bollos
Serial.println("10");
TC_Value = 10;
playcomplete("10.wav");
retardo (1);
}
Si (inp6 == alto & & inp7 == alto & & inp8 == baja & & inp9 == HIGH) / / 1 2 4 8
{//Master Juan y perdido en espacio
Serial.println("11");
TC_Value = 11;
playcomplete("11.wav");
retardo (1);
}
Si (inp6 == baja & & inp7 == baja & & inp8 == alto & & inp9 == HIGH) / / 1 2 4 8
{//Merry de Navidad
Serial.println("12");
TC_Value = 12;
playcomplete("12.wav");
retardo (1);
}
Last_TC = TC_Value;
Serial.println(Last_TC);
//
}
Fin del bucle
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 audio
}
Audio se hace juego
}
void playfile(char *name) {}
ver si el objeto ola está haciendo algo
Si (wave.isplaying) {/ / sonido ya lo detenerlo
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();
}