Skip to content

Instantly share code, notes, and snippets.

@davidae1704
Created March 12, 2015 23:56
Show Gist options
  • Save davidae1704/144af20e62626b84fa66 to your computer and use it in GitHub Desktop.
Save davidae1704/144af20e62626b84fa66 to your computer and use it in GitHub Desktop.
programa para leer combinaciones de las entradas digitales de la 2 a la 7 para formar el codigo braille y repoducir sonidos de las letras
// reproductor de wav desde tarjeta SD
// wav 11kHz mono
#include <SD.h>
File dataFile;
char fileplay[20] ; //nombre del archivo a reproducir
boolean estadop1 = false;
boolean preestadop1 = false;
boolean estadop2 = false;
boolean preestadop2 = false;
boolean estadop3 = false;
boolean preestadop3 = false;
boolean estadop4 = false;
boolean preestadop4 = false;
boolean estadop5 = false;
boolean preestadop5 = false;
boolean estadop6 = false;
boolean preestadop6 = false;
byte valor;
byte bufer0[100];
byte bufer1[100];
int din=0;
int dout=0;
byte nf=0;
byte vacio=1;
byte fin=1;
void setup()
{
pinMode(2, INPUT);//punto1 braille
pinMode(3, INPUT);//punto2 braille
pinMode(4, INPUT);//punto3 braille
pinMode(5, INPUT);//punto4 braille
pinMode(6, INPUT);//punto5 braille
pinMode(7, INPUT);//punto6 braille
pinMode(9, OUTPUT); //pin de salida para reproducir sonido
// pinMode(4, OUTPUT); // si utilizamos la salida 4 como CS de la tarjeta SD
// if(!SD.begin(4)) //
pinMode(10, OUTPUT); // si utilizamos la salida 10 como CS de la tarjeta SD
if(!SD.begin(10))
{
return;
}
else
{
}
cli();//stop interrupts
TCCR1A = 0x81; // selección del contador PWM. (Pulse Width Moulation)
TCCR1B = 0x01; //pre-escala para el contador = 1, sin pre-escala
OCR1A = 255; //valor máximo para la señal PWM
TIMSK1=0; //habilitar cualquier interrupcion
//timer interrupts
//by Amanda Ghassaei
//set timer2 interrupt at 11kHz
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
OCR2A = 182;// = (16*10^6) / (11000*8) - 1 (must be <256) 11khz
// turn on CTC mode en este calculo se uso el valor de 1
TCCR2A |= (1 << WGM21);
// Set CS21 bit for 8 prescaler
TCCR2B |= (1 << CS21);
// enable timer compare interrupt
TIMSK2 |= (1 << OCIE2A);
sei();//allow interrupts
}//end setup
//bloque de vector de interrupcion para generar señal de audio por PWM
ISR(TIMER2_COMPA_vect)
{
//timer1 interrupt 11kHz toggles
if(nf==0) valor=bufer0[dout];
if(nf==1) valor=bufer1[dout];
dout++;
if(dout>99)
{
vacio=1;
dout=0;
if(nf==1)
nf=0;
else
nf=1;
}
OCR1AH = 0;
OCR1AL = valor; /* envio de la señal de audio al pin 9
para generarla en formato PWM */
//PORTC= valor;
}
void loop()
{
//lectura del archivo de sonido
if(vacio == 1 && fin == 0)
{
if(nf==0) for(din=0;din<100;din++) bufer0[din] = dataFile.read();
if(nf==1) for(din=0;din<100;din++) bufer1[din] = dataFile.read();
vacio=0;
//comprobando si termino la cancion
if(!dataFile.available())
{
for(din=0;din<100;din++){ bufer0[din]=128; bufer1[din]=128;} //vacia bufer
fin=1;
}
}
//recepción de la combinacion de botones
//combinaciones que empiezan con el punto 1
estadop1= digitalRead(2);
if(estadop1 != preestadop1){
if(estadop1 == true){
delay(1000);
estadop2 = digitalRead(3);
if(estadop2 != preestadop2){
if(estadop2 == true){
dataFile = SD.open("b.wav", FILE_READ);
if (dataFile)
{
for(din=0;din<1000;din++) dataFile.read(); //quita 1000 bytes del wav
fin=0;
}
}
}
estadop3 = digitalRead(4);
if(estadop3 != preestadop3){
if(estadop3 == true){
delay(1000);
estadop4 = digitalRead(5);
if(estadop4 != preestadop4){
if(estadop4 == true){
dataFile = SD.open("m.wav", FILE_READ);
if (dataFile)
{
for(din=0;din<1000;din++) dataFile.read(); //quita 1000 bytes del wav
fin=0;
}
}
}
if(estadop3 == true && estadop4 == false && estadop5 == false && estadop6 == false){
dataFile = SD.open("k.wav", FILE_READ);
if (dataFile)
{
for(din=0;din<1000;din++) dataFile.read(); //quita 1000 bytes del wav
fin=0;
}
}
}
}
estadop4 = digitalRead(5);
if(estadop4 != preestadop4){
if(estadop4 == true){
dataFile = SD.open("c.wav", FILE_READ);
if (dataFile)
{
for(din=0;din<1000;din++) dataFile.read(); //quita 1000 bytes del wav
fin=0;
}
}
}
estadop5 = digitalRead(6);
if(estadop5 != preestadop5){
if(estadop5 == true){
dataFile = SD.open("e.wav", FILE_READ);
if (dataFile)
{
for(din=0;din<1000;din++) dataFile.read(); //quita 1000 bytes del wav
fin=0;
}
}
}
if(estadop1 == true && estadop2 == false && estadop3 == false && estadop4 == false && estadop5 == false){
dataFile = SD.open("a.wav", FILE_READ);
if (dataFile)
{
for(din=0;din<1000;din++) dataFile.read(); //quita 1000 bytes del wav
fin=0;
}
}
}
}
preestadop1=estadop1;
preestadop2=estadop2;
preestadop3=estadop3;
preestadop4=estadop4;
preestadop5=estadop5;
preestadop6=estadop6;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment