MP3 Player with touch panel interface and LCD display.

Dependencies:   TextLCD mbed SDFileSystem

Committer:
pramodnataraja
Date:
Thu Oct 06 06:49:38 2011 +0000
Revision:
0:a265079d50a2
Version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pramodnataraja 0:a265079d50a2 1 /* Author: Pramod Nataraja & Vishnu Venkat */
pramodnataraja 0:a265079d50a2 2
pramodnataraja 0:a265079d50a2 3 #include "mbed.h"
pramodnataraja 0:a265079d50a2 4 #include "VS1002.h"
pramodnataraja 0:a265079d50a2 5 #include "TextLCD.h"
pramodnataraja 0:a265079d50a2 6 #include "mpr121.h"
pramodnataraja 0:a265079d50a2 7
pramodnataraja 0:a265079d50a2 8 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.
pramodnataraja 0:a265079d50a2 9 TextLCD lcd1(p30, p29, p17, p18, p19, p20); //setup lcd
pramodnataraja 0:a265079d50a2 10 InterruptIn interrupt(p26); // Create the interrupt receiver object on pin 26
pramodnataraja 0:a265079d50a2 11 I2C i2c(p9, p10); // Setup the i2c bus on pins 9 and 10
pramodnataraja 0:a265079d50a2 12 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS); //Setup Mpr121
pramodnataraja 0:a265079d50a2 13
pramodnataraja 0:a265079d50a2 14 /* Global Variables to store Status*/
pramodnataraja 0:a265079d50a2 15 int new_song_number=1; //Variable to store the Song Number
pramodnataraja 0:a265079d50a2 16 int volume_set=-20; //Variable to store the Volume
pramodnataraja 0:a265079d50a2 17 int previous_volume; //Variable to store the volume when muted
pramodnataraja 0:a265079d50a2 18 bool pause=false; //Variable to store the status of Pause button
pramodnataraja 0:a265079d50a2 19 bool mute=false; //Variable to store the status of mute button
pramodnataraja 0:a265079d50a2 20
pramodnataraja 0:a265079d50a2 21 int check=0; //Capacitative touch generates interrupt on both press and release. This variable tracks this and updates only on press.
pramodnataraja 0:a265079d50a2 22 char *song_name[6]={"18 till I Die","Summer of 69","Boulevard", "Serenity","Crawling","In the end"}; //Array of song names entered manually
pramodnataraja 0:a265079d50a2 23
pramodnataraja 0:a265079d50a2 24 void fallInterrupt()
pramodnataraja 0:a265079d50a2 25 {
pramodnataraja 0:a265079d50a2 26 int key_code=0;
pramodnataraja 0:a265079d50a2 27 int i=0;
pramodnataraja 0:a265079d50a2 28 int value;
pramodnataraja 0:a265079d50a2 29 value=mpr121.read(0x00);
pramodnataraja 0:a265079d50a2 30 value +=mpr121.read(0x01)<<8;
pramodnataraja 0:a265079d50a2 31
pramodnataraja 0:a265079d50a2 32 i=0;
pramodnataraja 0:a265079d50a2 33 if(check)
pramodnataraja 0:a265079d50a2 34 check=0;
pramodnataraja 0:a265079d50a2 35 else
pramodnataraja 0:a265079d50a2 36 check=1;
pramodnataraja 0:a265079d50a2 37 if(check)
pramodnataraja 0:a265079d50a2 38 {
pramodnataraja 0:a265079d50a2 39 for (i=0; i<12; i++) {
pramodnataraja 0:a265079d50a2 40 if (((value>>i)&0x01)==1) key_code=i+1; //Convert value into decimal
pramodnataraja 0:a265079d50a2 41 }
pramodnataraja 0:a265079d50a2 42
pramodnataraja 0:a265079d50a2 43 switch(key_code) // Different cases depending on key press
pramodnataraja 0:a265079d50a2 44 {
pramodnataraja 0:a265079d50a2 45 case 0:break; // Invalid entry . Valid 1-12
pramodnataraja 0:a265079d50a2 46 case 1:
pramodnataraja 0:a265079d50a2 47 case 2:
pramodnataraja 0:a265079d50a2 48 case 3:
pramodnataraja 0:a265079d50a2 49 case 4:
pramodnataraja 0:a265079d50a2 50 case 5:
pramodnataraja 0:a265079d50a2 51 case 6: new_song_number=key_code; // Play the selected song
pramodnataraja 0:a265079d50a2 52 break;
pramodnataraja 0:a265079d50a2 53 case 7:new_song_number+=1; // Next song
pramodnataraja 0:a265079d50a2 54 if(new_song_number==7)
pramodnataraja 0:a265079d50a2 55 new_song_number=1;
pramodnataraja 0:a265079d50a2 56 break;
pramodnataraja 0:a265079d50a2 57 case 8: new_song_number-=1; // Previous Song
pramodnataraja 0:a265079d50a2 58 if(new_song_number==0)
pramodnataraja 0:a265079d50a2 59 new_song_number=6;
pramodnataraja 0:a265079d50a2 60 break;
pramodnataraja 0:a265079d50a2 61 case 9: pause=!pause; // Pause/Play button
pramodnataraja 0:a265079d50a2 62 break;
pramodnataraja 0:a265079d50a2 63 case 10: volume_set+=3; // Volume Up
pramodnataraja 0:a265079d50a2 64 if(volume_set>=0)
pramodnataraja 0:a265079d50a2 65 volume_set=0;
pramodnataraja 0:a265079d50a2 66 break;
pramodnataraja 0:a265079d50a2 67 case 11: volume_set-=3; //Volume Down
pramodnataraja 0:a265079d50a2 68 if(volume_set<-55)
pramodnataraja 0:a265079d50a2 69 volume_set=-55;
pramodnataraja 0:a265079d50a2 70 break;
pramodnataraja 0:a265079d50a2 71 case 12: mute=!mute; //Mute/Unmute
pramodnataraja 0:a265079d50a2 72 if(mute)
pramodnataraja 0:a265079d50a2 73 {
pramodnataraja 0:a265079d50a2 74 previous_volume=volume_set; // Attenuation of -55 db is small enough to not hear anything
pramodnataraja 0:a265079d50a2 75 volume_set=-55;
pramodnataraja 0:a265079d50a2 76 }
pramodnataraja 0:a265079d50a2 77 else
pramodnataraja 0:a265079d50a2 78 {
pramodnataraja 0:a265079d50a2 79 volume_set=previous_volume;
pramodnataraja 0:a265079d50a2 80 }
pramodnataraja 0:a265079d50a2 81 break;
pramodnataraja 0:a265079d50a2 82 default: lcd1.cls();
pramodnataraja 0:a265079d50a2 83 lcd1.printf("error"); // exit on error
pramodnataraja 0:a265079d50a2 84 exit(1);
pramodnataraja 0:a265079d50a2 85 }
pramodnataraja 0:a265079d50a2 86 }
pramodnataraja 0:a265079d50a2 87 /* Print to LCD the status of Song */
pramodnataraja 0:a265079d50a2 88 lcd1.cls();
pramodnataraja 0:a265079d50a2 89 if(pause)
pramodnataraja 0:a265079d50a2 90 lcd1.printf("Paused ");
pramodnataraja 0:a265079d50a2 91 if(mute)
pramodnataraja 0:a265079d50a2 92 lcd1.printf("Muted");
pramodnataraja 0:a265079d50a2 93 if(!mute && !pause)
pramodnataraja 0:a265079d50a2 94 lcd1.printf("Playing");
pramodnataraja 0:a265079d50a2 95 lcd1.printf("\n %d %s",new_song_number,song_name[new_song_number-1]);
pramodnataraja 0:a265079d50a2 96
pramodnataraja 0:a265079d50a2 97 }
pramodnataraja 0:a265079d50a2 98
pramodnataraja 0:a265079d50a2 99 int main ()
pramodnataraja 0:a265079d50a2 100 {
pramodnataraja 0:a265079d50a2 101 /*============================================================
pramodnataraja 0:a265079d50a2 102 * MP3 Initialising
pramodnataraja 0:a265079d50a2 103 *==========================================================*/
pramodnataraja 0:a265079d50a2 104
pramodnataraja 0:a265079d50a2 105 mp3._RST = 1;
pramodnataraja 0:a265079d50a2 106 mp3.cs_high(); //chip disabled
pramodnataraja 0:a265079d50a2 107 mp3.sci_initialise(); //initialise MBED
pramodnataraja 0:a265079d50a2 108 mp3.sci_write(0x00,(SM_SDINEW+SM_STREAM+SM_DIFF));
pramodnataraja 0:a265079d50a2 109 mp3.sci_write(0x03, 0x9800);
pramodnataraja 0:a265079d50a2 110 mp3.sdi_initialise();
pramodnataraja 0:a265079d50a2 111
pramodnataraja 0:a265079d50a2 112
pramodnataraja 0:a265079d50a2 113 /* Touch Pad setup */
pramodnataraja 0:a265079d50a2 114 interrupt.fall(&fallInterrupt);
pramodnataraja 0:a265079d50a2 115 interrupt.mode(PullUp);
pramodnataraja 0:a265079d50a2 116
pramodnataraja 0:a265079d50a2 117 while(1)
pramodnataraja 0:a265079d50a2 118 {
pramodnataraja 0:a265079d50a2 119 mp3.play_song(new_song_number);
pramodnataraja 0:a265079d50a2 120 }
pramodnataraja 0:a265079d50a2 121
pramodnataraja 0:a265079d50a2 122 }
pramodnataraja 0:a265079d50a2 123
pramodnataraja 0:a265079d50a2 124