//SETA43 //xsetaseta@gmail.com //arduvoc Reproductor de audio con arduino //01/02/2014 #include <LiquidCrystal.h> LiquidCrystal lcd(7,6,5,4,3,2); int sensorValue ; int oldsensorValue=-1; #include <SD.h> File dataFile; String inputString = ""; char fileplay[20] ; boolean stringComplete = false; byte valor; byte bufer0[100]; byte bufer1[100]; int din=0; int dout=0; byte nf=0; byte vacio=1; byte fin=1; byte e1Pin=18; byte e2Pin=19; void setup() { lcd.begin(16, 2); pinMode(9, OUTPUT); //Salida audio // 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 4 como CS de la tarjeta SD if(!SD.begin(10)) { lcd.print("ERROR Tarjeta "); // Texto informativo return; } else { lcd.print("Tarjeta OK "); // Texto informativo } delay(900); lcd.clear(); lcd.print("Arduino VOC"); delay(500); lcd.clear(); cli();//stop interrupts //timer1 PWM 31KHz TCCR1A = 0x81; TCCR1B = 0x01; OCR1A = 255; TIMSK1=0; //set timer2 interrupt at 11kHz TCCR2A = 0; TCCR2B = 0; TCNT2 = 0; OCR2A = 182; TCCR2A =2; TCCR2B =2; TIMSK2=2; sei();//allow interrupts } //end setup ISR(TIMER2_COMPA_vect) //timer1 interrupt 11kHz toggles { if(fin==0) { if(nf==0) valor=bufer1[dout]; else valor=bufer0[dout]; dout++; if(dout>99) { vacio=1; dout=0; if(nf==1) nf=0; else nf=1; } OCR1AH = 0; OCR1AL = valor; } } void loop() { if(!digitalRead(e2Pin)) { clearBuffer(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("PLAY WAV "); lcd.print(inputString); inputString.toCharArray(fileplay,19); dataFile.close(); dataFile = SD.open(fileplay,FILE_READ); //dataFile = SD.open("11.wav",FILE_READ); while(!digitalRead(e2Pin)); if (dataFile) { for(din=0;din<200;din++) dataFile.read(); //quita 200 bytes del wav fillBuffer(); fin=0; } else { lcd.setCursor(0, 0); lcd.print("NO WAV "); } } if(!digitalRead(e1Pin)) { clearBuffer(); dataFile.close(); lcd.setCursor(0, 0); lcd.print("STOP WAV "); while(!digitalRead(e1Pin)); } sensorValue = analogRead(A0)>>4; if(oldsensorValue != sensorValue) { inputString=String(sensorValue,DEC); inputString+=".wav"; lcd.setCursor(0, 1); lcd.print(inputString); lcd.print(" "); } oldsensorValue = sensorValue; fillBuffer(); } //Borrar buffer void clearBuffer() { fin=1; for(din=0;din<100;din++){ bufer0[din]=128; bufer1[din]=128;} //vacia bufer } //llenado de buffer void fillBuffer() { if(vacio == 1 && fin == 0) { if(nf==0) for(din=0;din<100;din++) bufer0[din] = dataFile.read(); else for(din=0;din<100;din++) bufer1[din] = dataFile.read(); vacio=0; if(!dataFile.available()) { lcd.setCursor(0, 0); lcd.print("END WAV "); fin=1; for(din=0;din<100;din++){ bufer0[din]=128; bufer1[din]=128;} //vacia bufer } } } |