MP3 Player with touch panel interface and LCD display.
Dependencies: TextLCD mbed SDFileSystem
main.cpp@0:a265079d50a2, 2011-10-06 (annotated)
- Committer:
- pramodnataraja
- Date:
- Thu Oct 06 06:49:38 2011 +0000
- Revision:
- 0:a265079d50a2
Version 1.0
Who changed what in which revision?
User | Revision | Line number | New 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 |