MP3 Player with touch panel interface and LCD display.
Dependencies: TextLCD mbed SDFileSystem
Diff: main.cpp
- Revision:
- 0:a265079d50a2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Oct 06 06:49:38 2011 +0000 @@ -0,0 +1,124 @@ +/* Author: Pramod Nataraja & Vishnu Venkat */ + + #include "mbed.h" + #include "VS1002.h" + #include "TextLCD.h" + #include "mpr121.h" + +VS1002 mp3(p5, p6, p7, p8,"sd",p11, p12 ,p13, p14, p23, p22, p21, p15); //Setup Audio decoder. Name is VS1002 even though VS1053 is used. +TextLCD lcd1(p30, p29, p17, p18, p19, p20); //setup lcd +InterruptIn interrupt(p26); // Create the interrupt receiver object on pin 26 +I2C i2c(p9, p10); // Setup the i2c bus on pins 9 and 10 +Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); //Setup Mpr121 + +/* Global Variables to store Status*/ +int new_song_number=1; //Variable to store the Song Number +int volume_set=-20; //Variable to store the Volume +int previous_volume; //Variable to store the volume when muted +bool pause=false; //Variable to store the status of Pause button +bool mute=false; //Variable to store the status of mute button + +int check=0; //Capacitative touch generates interrupt on both press and release. This variable tracks this and updates only on press. +char *song_name[6]={"18 till I Die","Summer of 69","Boulevard", "Serenity","Crawling","In the end"}; //Array of song names entered manually + +void fallInterrupt() +{ + int key_code=0; + int i=0; + int value; + value=mpr121.read(0x00); + value +=mpr121.read(0x01)<<8; + + i=0; + if(check) + check=0; + else + check=1; + if(check) + { + for (i=0; i<12; i++) { + if (((value>>i)&0x01)==1) key_code=i+1; //Convert value into decimal + } + + switch(key_code) // Different cases depending on key press + { + case 0:break; // Invalid entry . Valid 1-12 + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: new_song_number=key_code; // Play the selected song + break; + case 7:new_song_number+=1; // Next song + if(new_song_number==7) + new_song_number=1; + break; + case 8: new_song_number-=1; // Previous Song + if(new_song_number==0) + new_song_number=6; + break; + case 9: pause=!pause; // Pause/Play button + break; + case 10: volume_set+=3; // Volume Up + if(volume_set>=0) + volume_set=0; + break; + case 11: volume_set-=3; //Volume Down + if(volume_set<-55) + volume_set=-55; + break; + case 12: mute=!mute; //Mute/Unmute + if(mute) + { + previous_volume=volume_set; // Attenuation of -55 db is small enough to not hear anything + volume_set=-55; + } + else + { + volume_set=previous_volume; + } + break; + default: lcd1.cls(); + lcd1.printf("error"); // exit on error + exit(1); + } + } + /* Print to LCD the status of Song */ + lcd1.cls(); + if(pause) + lcd1.printf("Paused "); + if(mute) + lcd1.printf("Muted"); + if(!mute && !pause) + lcd1.printf("Playing"); + lcd1.printf("\n %d %s",new_song_number,song_name[new_song_number-1]); + + } + + int main () + { + /*============================================================ + * MP3 Initialising + *==========================================================*/ + + mp3._RST = 1; + mp3.cs_high(); //chip disabled + mp3.sci_initialise(); //initialise MBED + mp3.sci_write(0x00,(SM_SDINEW+SM_STREAM+SM_DIFF)); + mp3.sci_write(0x03, 0x9800); + mp3.sdi_initialise(); + + + /* Touch Pad setup */ + interrupt.fall(&fallInterrupt); + interrupt.mode(PullUp); + + while(1) + { + mp3.play_song(new_song_number); + } + + } + +