Décodeur MP3 de test monofichier
Dependencies: SDFileSystem TextLCD VS1053lib mbed MPR121
Fork of MP3_test by
Diff: touchpad.cpp
- Revision:
- 1:d1ed30ba5ca9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/touchpad.cpp Sun Oct 30 23:20:20 2016 +0000 @@ -0,0 +1,326 @@ + #include "MPR121.h" + #include "mbed.h" + #include "TextLCD.h" + #include "SDFileSystem.h" + #include <VLSIcodec.h> + +#define BUFFER_SIZE 2048 +#define play 0x0001 +#define stop 0x0010 +#define pause 0x0100 +#define Vhigh 0x0002 +#define Vdown 0x0020 +#define previous 0x0004 +#define next 0x0040 + +Serial com(USBTX, USBRX); //Initiallize the Serial Port 0 (9600 bits/sec) + // codec +VS1053Codec codec(p11, p12, p13, p14, p16, p15, p17); // mosi, miso, sck, cs, dreq, rst, bsync + // SD card +SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sclk, cs the pinout on the mbed Cool Components workshop board + // I2C Communication +/*I2C i2c_lcd(p9, p10 ); // SDA, SCL */ + I2C i2c(p28, p27); //SDA, SCL + // LCD +TextLCD_I2C lcd(&i2c, 0x40, TextLCD::LCD16x2); // I2C bus, PCF8574 Slaveaddress, LCD Type + //Touch_pad + InterruptIn irq(p26); + MPR121 touch_pad(i2c, irq, MPR121::ADDR_VSS ); + + unsigned char buff[BUFFER_SIZE]; + int check=0; + Timer timer; + + int main() +{ + touch_pad.init(); //initialisation du touch_pad + touch_pad.enable(); //activation du touch_pad + uint16_t button_val; // variable recueillant la valeur du bouton + bool lecture=0; //booléen conditionnant l'etat play + int right=0x30, left =0x30; //initialisation des valeurs de volumes de départ + int temps = 0 ; + FILE *song; + char ligne[13],time[10]; + int aff=0; + char *title_song[8]={"wind", "toreador", "Moove", "Pirate", "DBZ", "Safe", "yolanda"}; + + + lcd.cls(); + lcd.setBacklight(TextLCD::LightOff); + wait(1); + lcd.printf(" "); + lcd.cls(); + lcd.setBacklight(TextLCD::LightOn); + lcd.setCursor(TextLCD::CurOff_BlkOff); + mkdir("/sd/mydir", 0777); + FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); + if(fp == NULL) + { + error("Could not open file for write\n"); + } + fprintf(fp, "IUT---MP3"); + fclose(fp); + fp = fopen("/sd/mydir/sdtest.txt", "r"); + fscanf(fp,"%s",ligne); + lcd.printf(ligne); + fclose(fp); + + + // + codec.init(); // initialise le codec + codec.loadpatch(); // charge le patch (rev 1.5) + codec.setbassboost( 15, 150); // basse + codec.settrebleboost( 7, 15000); // aigue + codec.setvolume(right, left); // volume + + int song_number=1; + char str[16] = "/sd/music/"; + + printf("\n Ouverture fichie \n \n"); + wait(1); + + codec.resetplaytime(); + + + while(1) + { + + button_val=touch_pad.buttonPressed(); + printf("\n button = 0x%04x \n", button_val); + + typedef enum{e_primordial, e_init, e_play, e_pause, e_next, e_previous, e_stop,e_suite}type_etat; + static type_etat etat=e_primordial; + + switch(etat) + { + case e_primordial : + if(button_val==play)etat=e_init; + break; + + case e_init : + lecture=1; + sprintf(str+10,"%d",song_number); //donne le numéro de la musique + strcat(str,".mp3"); //concatene le numero avec l'extension de la musique + song = fopen(str, "r"); + etat = e_play; + break; + //Play + + case e_play : + lcd.cls(); + lcd.locate(0,0); + lcd.printf("%d %s",song_number,title_song[song_number]); + while(lecture) + { + + timer.start(); + printf("feof \n"); + fread(buff, 1, BUFFER_SIZE, song); // lecture buffer + printf("lecture buffer \n"); + lcd.locate(9,1); + lcd.printf("PLAY"); + aff++; + if(aff%1==0){ + codec.getplaytime(ligne); + ligne[5]=NULL; + lcd.locate(1,1); + lcd.puts(ligne);} + + int iSize=0; + for( iSize=0;iSize < BUFFER_SIZE;iSize++) + { + codec.testdreq(); + codec.writedata( buff[ iSize]); + } + if(feof(song)&&button_val==0x0000) + { + printf("fin du fichier \n"); + codec.resetplaytime(); + etat=e_next; + } + + button_val = touch_pad.buttonPressed(); + if(button_val==stop)//stop + { + lecture=0; + etat=e_stop; + } + + if(button_val==0x0004)//previeous + { + lecture=0; + wait(0.5); + etat=e_previous; + } + if(button_val==0x0040)//next + { + lecture=0; + wait(0.5); + etat=e_next; + } + if(button_val==0x0020)//augmenter la volume + { + if(temps%1==0) + { + codec.setvolume(right--, left--); + printf("Volume++ \n"); + lcd.locate(12,0); + lcd.printf("Vol+"); + //affiche=0; + } + } + + if(button_val==0x0002)//dimunuer la volume + { + if(temps%1==0) + { + codec.setvolume(right++, left++); + printf("Volume-- \n"); + lcd.locate(12,0); + lcd.printf("Vol-"); + } + } + + if(button_val==pause)//pause + { + lecture=!lecture; + etat = e_pause; + } + + if(button_val==0x000)//augmenter la volume + { + lcd.locate(10,0); + lcd.printf(" "); + } + + } + break; + //Stop + + case e_stop : + printf("stop \n"); + lcd.locate(9,1); + lcd.printf("Stop"); + lecture=0; + fclose(song); + codec.resetplaytime(); + song = fopen(str, "r"); + if(button_val==play)etat=e_init; + if(button_val==0x0004)//previeous + { + lecture=0; + wait(1); + etat=e_previous; + } + if(button_val==0x0040)//next + { + lecture=0; + wait(1); + etat=e_next; + } + break; + + //Pause + + case e_pause : + printf("\n button = 0x%04x \n", button_val); + printf("pause \n"); + lcd.locate(9,1); + lcd.printf("Pause"); + if(button_val==play) + { + lecture=1; + etat=e_play; + } + if(button_val==0x0004)//previeous + { + lecture=0; + wait(1); + etat=e_previous; + } + if(button_val==0x0040)//next + { + lecture=0; + wait(1); + etat=e_next; + } + if(button_val==stop) + { + lcd.locate(9,1); + lcd.printf(" "); + etat=e_stop; + } + if(button_val==0x0020)//augmenter la volume + { + if(temps%1==0) + { + codec.setvolume(right--, left--); + printf("Volume++ \n"); + lcd.locate(12,0); + lcd.printf("Vol+"); + + } + } + + if(button_val==0x0002)//dimunuer la volume + { + if(right<=0x00 && left<=0x00) + { + codec.setvolume(0x00, 0x00); + printf("volume max"); + } + else + { + if(temps%1==0) + { + codec.setvolume(right++, left++); + printf("Volume-- \n"); + lcd.locate(12,0); + lcd.printf("Vol-"); + + } + } + } + + if(button_val==0x000)//augmenter la volume + { + lcd.locate(10,0); + lcd.printf(" "); + } + break; + //Next + + case e_next : + lcd.locate(9,1); + lcd.printf("Next"); + wait(0.5); + codec.resetplaytime(); + song_number++; + if(song_number==7)song_number=0; + lecture=1; + printf("Next \n"); + etat=e_init; + break; + //Previous + + case e_previous : + lcd.locate(7,1); + lcd.printf("Previous"); + wait(0.5); + codec.resetplaytime(); + song_number--; + if(song_number<0)song_number=6; + lecture=1; + printf("Previous \n"); + etat=e_init; + break; + + default: + printf("error"); + break; + } + } + + } + + \ No newline at end of file