Created
March 12, 2015 23:56
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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