Smart pole
Dependencies: FTPClient SDFileSystem WIZnetInterface mbed
Fork of FTP_Streaming_Music_Player_WIZwiki-W7500 by
main.cpp@0:fa775d326f9c, 2015-09-22 (annotated)
- Committer:
- justinkim
- Date:
- Tue Sep 22 23:14:59 2015 +0000
- Revision:
- 0:fa775d326f9c
- Child:
- 1:c47c255fcad4
Music Player
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
justinkim | 0:fa775d326f9c | 1 | #include "mbed.h" |
justinkim | 0:fa775d326f9c | 2 | #include "EthernetInterface.h" |
justinkim | 0:fa775d326f9c | 3 | #include "SDFileSystem.h" |
justinkim | 0:fa775d326f9c | 4 | #include <stdio.h> |
justinkim | 0:fa775d326f9c | 5 | #include <string.h> |
justinkim | 0:fa775d326f9c | 6 | |
justinkim | 0:fa775d326f9c | 7 | #include "FTPClient.h" |
justinkim | 0:fa775d326f9c | 8 | #include "VS1002.h" |
justinkim | 0:fa775d326f9c | 9 | #include "TextLCD.h" |
justinkim | 0:fa775d326f9c | 10 | |
justinkim | 0:fa775d326f9c | 11 | #define MAC "\x00\x08\xDC\x11\x34\x78" |
justinkim | 0:fa775d326f9c | 12 | #define IP "192.168.77.191" |
justinkim | 0:fa775d326f9c | 13 | #define MASK "255.255.255.0" |
justinkim | 0:fa775d326f9c | 14 | #define GATEWAY "192.168.77.1" |
justinkim | 0:fa775d326f9c | 15 | |
justinkim | 0:fa775d326f9c | 16 | #define FTP_SERVER_IP "192.168.77.209" |
justinkim | 0:fa775d326f9c | 17 | |
justinkim | 0:fa775d326f9c | 18 | #define _MAX_FNAME_LEN_ 127 |
justinkim | 0:fa775d326f9c | 19 | #define _FTP_UPDATE_TIME_ 20 |
justinkim | 0:fa775d326f9c | 20 | |
justinkim | 0:fa775d326f9c | 21 | |
justinkim | 0:fa775d326f9c | 22 | Serial uart(USBTX, USBRX); |
justinkim | 0:fa775d326f9c | 23 | |
justinkim | 0:fa775d326f9c | 24 | //SDFileSystem sd(p5, p6, p7, p8, "sd"); // LPC1768 MBD2PMD |
justinkim | 0:fa775d326f9c | 25 | //SDFileSystem sd(P0_18, P0_17, P0_15, P0_16, "sd"); // Seeeduino Arch Pro SPI2SD |
justinkim | 0:fa775d326f9c | 26 | //SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // K64F |
justinkim | 0:fa775d326f9c | 27 | //SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // WIZwiki-W7500 |
justinkim | 0:fa775d326f9c | 28 | |
justinkim | 0:fa775d326f9c | 29 | EthernetInterface eth; |
justinkim | 0:fa775d326f9c | 30 | |
justinkim | 0:fa775d326f9c | 31 | DigitalOut led1(LED1); //server listning status |
justinkim | 0:fa775d326f9c | 32 | DigitalOut led2(LED2); //socket connecting status |
justinkim | 0:fa775d326f9c | 33 | |
justinkim | 0:fa775d326f9c | 34 | InterruptIn K_VU(D3); // Create the interrupt receiver object on pin 26 |
justinkim | 0:fa775d326f9c | 35 | InterruptIn K_NT(D4); // Create the interrupt receiver object on pin 26 |
justinkim | 0:fa775d326f9c | 36 | InterruptIn K_PS(D5); // Create the interrupt receiver object on pin 26 |
justinkim | 0:fa775d326f9c | 37 | InterruptIn K_BK(D6); // Create the interrupt receiver object on pin 26 |
justinkim | 0:fa775d326f9c | 38 | InterruptIn K_VD(D7); // Create the interrupt receiver object on pin 26 |
justinkim | 0:fa775d326f9c | 39 | VS1002 mp3(PB_3, PB_2, PB_1, PB_0,"sdc",D11, D12 ,D13, PC_12, PC_15, PC_14, PC_13); //Setup Audio decoder. Name is VS1002 even though VS1053 is used. |
justinkim | 0:fa775d326f9c | 40 | TextLCD lcd1(D8, D9, D0, D1, D2, D15); //setup lcd |
justinkim | 0:fa775d326f9c | 41 | |
justinkim | 0:fa775d326f9c | 42 | FTPClient myFTP("/sdc"); // mountname in MySeeedStudioTFTv2 |
justinkim | 0:fa775d326f9c | 43 | |
justinkim | 0:fa775d326f9c | 44 | Ticker ledTick; |
justinkim | 0:fa775d326f9c | 45 | |
justinkim | 0:fa775d326f9c | 46 | /* Global Variables to store Status*/ |
justinkim | 0:fa775d326f9c | 47 | int new_song_number=1; //Variable to store the Song Number |
justinkim | 0:fa775d326f9c | 48 | int volume_set=-20; //Variable to store the Volume |
justinkim | 0:fa775d326f9c | 49 | int previous_volume; //Variable to store the volume when muted |
justinkim | 0:fa775d326f9c | 50 | bool pause=false; //Variable to store the status of Pause button |
justinkim | 0:fa775d326f9c | 51 | bool mute=false; //Variable to store the status of mute button |
justinkim | 0:fa775d326f9c | 52 | |
justinkim | 0:fa775d326f9c | 53 | int check=0; //Capacitative touch generates interrupt on both press and release. This variable tracks this and updates only on press. |
justinkim | 0:fa775d326f9c | 54 | char *song_name[9]={"Good Day","Leong","Sponsor","I'm So Sexy","My Life","Oh My god","Wonderful bar","Whale Hunting","Love"}; //Array of song names entered manually |
justinkim | 0:fa775d326f9c | 55 | |
justinkim | 0:fa775d326f9c | 56 | uint32_t ftp_time_1s = 0; |
justinkim | 0:fa775d326f9c | 57 | |
justinkim | 0:fa775d326f9c | 58 | char myfilelist[MAX_SS] = {0,}; |
justinkim | 0:fa775d326f9c | 59 | |
justinkim | 0:fa775d326f9c | 60 | void ledTickfunc() |
justinkim | 0:fa775d326f9c | 61 | { |
justinkim | 0:fa775d326f9c | 62 | led1 = !led1; |
justinkim | 0:fa775d326f9c | 63 | if(ftp_time_1s) |
justinkim | 0:fa775d326f9c | 64 | { |
justinkim | 0:fa775d326f9c | 65 | if(ftp_time_1s++ > _FTP_UPDATE_TIME_) ftp_time_1s = 0; |
justinkim | 0:fa775d326f9c | 66 | } |
justinkim | 0:fa775d326f9c | 67 | } |
justinkim | 0:fa775d326f9c | 68 | |
justinkim | 0:fa775d326f9c | 69 | void Next_Song() |
justinkim | 0:fa775d326f9c | 70 | { |
justinkim | 0:fa775d326f9c | 71 | new_song_number+=1; // Next Song |
justinkim | 0:fa775d326f9c | 72 | if(new_song_number==10) |
justinkim | 0:fa775d326f9c | 73 | new_song_number=1; |
justinkim | 0:fa775d326f9c | 74 | |
justinkim | 0:fa775d326f9c | 75 | lcd1.cls(); |
justinkim | 0:fa775d326f9c | 76 | if(pause) |
justinkim | 0:fa775d326f9c | 77 | lcd1.printf(" Paused "); |
justinkim | 0:fa775d326f9c | 78 | else |
justinkim | 0:fa775d326f9c | 79 | lcd1.printf(" Playing..."); |
justinkim | 0:fa775d326f9c | 80 | |
justinkim | 0:fa775d326f9c | 81 | lcd1.printf("\n %d %s",new_song_number,song_name[new_song_number-1]); |
justinkim | 0:fa775d326f9c | 82 | } |
justinkim | 0:fa775d326f9c | 83 | |
justinkim | 0:fa775d326f9c | 84 | void Preveious_Song() |
justinkim | 0:fa775d326f9c | 85 | { |
justinkim | 0:fa775d326f9c | 86 | new_song_number-=1; // Preveious Song |
justinkim | 0:fa775d326f9c | 87 | if(new_song_number==0) |
justinkim | 0:fa775d326f9c | 88 | new_song_number=9; |
justinkim | 0:fa775d326f9c | 89 | |
justinkim | 0:fa775d326f9c | 90 | lcd1.cls(); |
justinkim | 0:fa775d326f9c | 91 | if(pause) |
justinkim | 0:fa775d326f9c | 92 | lcd1.printf(" Paused "); |
justinkim | 0:fa775d326f9c | 93 | else |
justinkim | 0:fa775d326f9c | 94 | lcd1.printf(" Playing..."); |
justinkim | 0:fa775d326f9c | 95 | |
justinkim | 0:fa775d326f9c | 96 | lcd1.printf("\n %d %s",new_song_number,song_name[new_song_number-1]); |
justinkim | 0:fa775d326f9c | 97 | } |
justinkim | 0:fa775d326f9c | 98 | |
justinkim | 0:fa775d326f9c | 99 | void Pause_Song() |
justinkim | 0:fa775d326f9c | 100 | { |
justinkim | 0:fa775d326f9c | 101 | pause=!pause; // Pause/Play button |
justinkim | 0:fa775d326f9c | 102 | |
justinkim | 0:fa775d326f9c | 103 | lcd1.cls(); |
justinkim | 0:fa775d326f9c | 104 | if(pause) |
justinkim | 0:fa775d326f9c | 105 | lcd1.printf(" Paused "); |
justinkim | 0:fa775d326f9c | 106 | else |
justinkim | 0:fa775d326f9c | 107 | lcd1.printf(" Playing..."); |
justinkim | 0:fa775d326f9c | 108 | |
justinkim | 0:fa775d326f9c | 109 | lcd1.printf("\n %d %s",new_song_number,song_name[new_song_number-1]); |
justinkim | 0:fa775d326f9c | 110 | } |
justinkim | 0:fa775d326f9c | 111 | |
justinkim | 0:fa775d326f9c | 112 | void Volume_Up() |
justinkim | 0:fa775d326f9c | 113 | { |
justinkim | 0:fa775d326f9c | 114 | volume_set+=3; // Volume Up |
justinkim | 0:fa775d326f9c | 115 | if(volume_set>=0) |
justinkim | 0:fa775d326f9c | 116 | volume_set=0; |
justinkim | 0:fa775d326f9c | 117 | } |
justinkim | 0:fa775d326f9c | 118 | |
justinkim | 0:fa775d326f9c | 119 | void Volume_Down() |
justinkim | 0:fa775d326f9c | 120 | { |
justinkim | 0:fa775d326f9c | 121 | volume_set-=3; //Volume Down |
justinkim | 0:fa775d326f9c | 122 | if(volume_set<-55) |
justinkim | 0:fa775d326f9c | 123 | volume_set=-55; |
justinkim | 0:fa775d326f9c | 124 | } |
justinkim | 0:fa775d326f9c | 125 | /* |
justinkim | 0:fa775d326f9c | 126 | void Volume_Mute() |
justinkim | 0:fa775d326f9c | 127 | { |
justinkim | 0:fa775d326f9c | 128 | mute=!mute; //Mute/Unmute |
justinkim | 0:fa775d326f9c | 129 | |
justinkim | 0:fa775d326f9c | 130 | if(mute) |
justinkim | 0:fa775d326f9c | 131 | { |
justinkim | 0:fa775d326f9c | 132 | previous_volume=volume_set; // Attenuation of -55 db is small enough to not hear anything |
justinkim | 0:fa775d326f9c | 133 | volume_set=-55; |
justinkim | 0:fa775d326f9c | 134 | } |
justinkim | 0:fa775d326f9c | 135 | else |
justinkim | 0:fa775d326f9c | 136 | { |
justinkim | 0:fa775d326f9c | 137 | volume_set=previous_volume; |
justinkim | 0:fa775d326f9c | 138 | } |
justinkim | 0:fa775d326f9c | 139 | }*/ |
justinkim | 0:fa775d326f9c | 140 | |
justinkim | 0:fa775d326f9c | 141 | int main (void) |
justinkim | 0:fa775d326f9c | 142 | { |
justinkim | 0:fa775d326f9c | 143 | *(volatile uint32_t *)(0x41001014) = 0x0060100; |
justinkim | 0:fa775d326f9c | 144 | *(volatile uint32_t *)(0x41003000) = 0x10; |
justinkim | 0:fa775d326f9c | 145 | *(volatile uint32_t *)(0x41003004) = 0x10; |
justinkim | 0:fa775d326f9c | 146 | *(volatile uint32_t *)(0x41003008) = 0x10; |
justinkim | 0:fa775d326f9c | 147 | *(volatile uint32_t *)(0x41003080) = 0x10; |
justinkim | 0:fa775d326f9c | 148 | *(volatile uint32_t *)(0x41003098) = 0x10; |
justinkim | 0:fa775d326f9c | 149 | |
justinkim | 0:fa775d326f9c | 150 | char* tok = NULL; |
justinkim | 0:fa775d326f9c | 151 | char* lasts = NULL; |
justinkim | 0:fa775d326f9c | 152 | char filename[_MAX_FNAME_LEN_]; |
justinkim | 0:fa775d326f9c | 153 | FILE* fp; |
justinkim | 0:fa775d326f9c | 154 | |
justinkim | 0:fa775d326f9c | 155 | // Serial Interface eth; |
justinkim | 0:fa775d326f9c | 156 | uart.baud(115200); |
justinkim | 0:fa775d326f9c | 157 | uart.printf("Initializing\r\n"); |
justinkim | 0:fa775d326f9c | 158 | |
justinkim | 0:fa775d326f9c | 159 | // EthernetInterface eth; |
justinkim | 0:fa775d326f9c | 160 | uart.printf("Initializing Ethernet\r\n"); |
justinkim | 0:fa775d326f9c | 161 | |
justinkim | 0:fa775d326f9c | 162 | //eth.init(); //Use DHCP |
justinkim | 0:fa775d326f9c | 163 | eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); //IP,mask,Gateway |
justinkim | 0:fa775d326f9c | 164 | uart.printf("Connecting\r\n"); |
justinkim | 0:fa775d326f9c | 165 | eth.connect(); |
justinkim | 0:fa775d326f9c | 166 | uart.printf("IP Address is %s\r\n", eth.getIPAddress()); |
justinkim | 0:fa775d326f9c | 167 | |
justinkim | 0:fa775d326f9c | 168 | // Check File System |
justinkim | 0:fa775d326f9c | 169 | uart.printf("Checking File System\r\n"); |
justinkim | 0:fa775d326f9c | 170 | DIR *d = opendir("/sdc/"); |
justinkim | 0:fa775d326f9c | 171 | if (d != NULL) { |
justinkim | 0:fa775d326f9c | 172 | uart.printf("SD Card Present\r\n"); |
justinkim | 0:fa775d326f9c | 173 | closedir(d); |
justinkim | 0:fa775d326f9c | 174 | } else { |
justinkim | 0:fa775d326f9c | 175 | uart.printf("SD Card Root Directory Not Found\r\n"); |
justinkim | 0:fa775d326f9c | 176 | } |
justinkim | 0:fa775d326f9c | 177 | |
justinkim | 0:fa775d326f9c | 178 | ledTick.attach(&ledTickfunc,1); |
justinkim | 0:fa775d326f9c | 179 | |
justinkim | 0:fa775d326f9c | 180 | while(1) |
justinkim | 0:fa775d326f9c | 181 | { |
justinkim | 0:fa775d326f9c | 182 | if(ftp_time_1s == 0) |
justinkim | 0:fa775d326f9c | 183 | { |
justinkim | 0:fa775d326f9c | 184 | //Configure the display driver |
justinkim | 0:fa775d326f9c | 185 | ftp_time_1s = 1; |
justinkim | 0:fa775d326f9c | 186 | |
justinkim | 0:fa775d326f9c | 187 | printf(" UPDATING MP3\r\n"); |
justinkim | 0:fa775d326f9c | 188 | printf("==================\n\r\n"); |
justinkim | 0:fa775d326f9c | 189 | myFTP.open("192.168.77.209", 21, "user", "pass"); |
justinkim | 0:fa775d326f9c | 190 | |
justinkim | 0:fa775d326f9c | 191 | if(myFTP.open("192.168.77.209", 21, "user", "pass")) |
justinkim | 0:fa775d326f9c | 192 | { |
justinkim | 0:fa775d326f9c | 193 | printf("Connect Success to FTPServer\r\n"); |
justinkim | 0:fa775d326f9c | 194 | printf("Connected to FTP Server\r\n"); |
justinkim | 0:fa775d326f9c | 195 | |
justinkim | 0:fa775d326f9c | 196 | myFTP.ls(myfilelist); |
justinkim | 0:fa775d326f9c | 197 | |
justinkim | 0:fa775d326f9c | 198 | if(*myfilelist !=0) |
justinkim | 0:fa775d326f9c | 199 | { |
justinkim | 0:fa775d326f9c | 200 | tok = myfilelist; |
justinkim | 0:fa775d326f9c | 201 | while(tok) |
justinkim | 0:fa775d326f9c | 202 | { |
justinkim | 0:fa775d326f9c | 203 | tok = strtok_r(tok,"\r\n",&lasts); |
justinkim | 0:fa775d326f9c | 204 | if(tok != NULL) |
justinkim | 0:fa775d326f9c | 205 | { |
justinkim | 0:fa775d326f9c | 206 | printf("tok=%s\r\n",tok); |
justinkim | 0:fa775d326f9c | 207 | if(strstr(tok,"mp3")) |
justinkim | 0:fa775d326f9c | 208 | { |
justinkim | 0:fa775d326f9c | 209 | sprintf(filename,"/sdc/%s",tok); |
justinkim | 0:fa775d326f9c | 210 | fp = fopen(filename, "r"); |
justinkim | 0:fa775d326f9c | 211 | printf("fp=%d\r\n",fp); |
justinkim | 0:fa775d326f9c | 212 | if(fp==NULL) |
justinkim | 0:fa775d326f9c | 213 | { |
justinkim | 0:fa775d326f9c | 214 | myFTP.getfile(tok); |
justinkim | 0:fa775d326f9c | 215 | printf("Get File : %s\r\n",tok); |
justinkim | 0:fa775d326f9c | 216 | printf("New file : %s\r\n",tok); |
justinkim | 0:fa775d326f9c | 217 | } |
justinkim | 0:fa775d326f9c | 218 | else fclose(fp); |
justinkim | 0:fa775d326f9c | 219 | } |
justinkim | 0:fa775d326f9c | 220 | tok = lasts; |
justinkim | 0:fa775d326f9c | 221 | } |
justinkim | 0:fa775d326f9c | 222 | } |
justinkim | 0:fa775d326f9c | 223 | } |
justinkim | 0:fa775d326f9c | 224 | else printf(" Empty FTP Server\r\n"); |
justinkim | 0:fa775d326f9c | 225 | printf("\n UPDATE DONE\n\r\n"); |
justinkim | 0:fa775d326f9c | 226 | myFTP.quit(); |
justinkim | 0:fa775d326f9c | 227 | } |
justinkim | 0:fa775d326f9c | 228 | else |
justinkim | 0:fa775d326f9c | 229 | { |
justinkim | 0:fa775d326f9c | 230 | printf(" Can't connect to FTP Server\r\n"); |
justinkim | 0:fa775d326f9c | 231 | printf(" UPDATE FAIL\r\n"); |
justinkim | 0:fa775d326f9c | 232 | } |
justinkim | 0:fa775d326f9c | 233 | printf("==================\n"); |
justinkim | 0:fa775d326f9c | 234 | } |
justinkim | 0:fa775d326f9c | 235 | |
justinkim | 0:fa775d326f9c | 236 | /*============================================================ |
justinkim | 0:fa775d326f9c | 237 | * MP3 Initialising |
justinkim | 0:fa775d326f9c | 238 | *==========================================================*/ |
justinkim | 0:fa775d326f9c | 239 | |
justinkim | 0:fa775d326f9c | 240 | mp3._RST = 1; |
justinkim | 0:fa775d326f9c | 241 | mp3.cs_high(); //chip disabled |
justinkim | 0:fa775d326f9c | 242 | mp3.sci_initialise(); //initialise MBED |
justinkim | 0:fa775d326f9c | 243 | mp3.sci_write(0x00,(SM_SDINEW+SM_STREAM+SM_DIFF)); |
justinkim | 0:fa775d326f9c | 244 | mp3.sci_write(0x03, 0x9800); |
justinkim | 0:fa775d326f9c | 245 | mp3.sdi_initialise(); |
justinkim | 0:fa775d326f9c | 246 | |
justinkim | 0:fa775d326f9c | 247 | /* UI Button setup */ |
justinkim | 0:fa775d326f9c | 248 | K_VU.fall(&Volume_Up); |
justinkim | 0:fa775d326f9c | 249 | K_VU.mode(PullUp); |
justinkim | 0:fa775d326f9c | 250 | K_VD.fall(&Volume_Down); |
justinkim | 0:fa775d326f9c | 251 | K_VD.mode(PullUp); |
justinkim | 0:fa775d326f9c | 252 | K_NT.fall(&Next_Song); |
justinkim | 0:fa775d326f9c | 253 | K_NT.mode(PullUp); |
justinkim | 0:fa775d326f9c | 254 | K_BK.fall(&Preveious_Song); |
justinkim | 0:fa775d326f9c | 255 | K_BK.mode(PullUp); |
justinkim | 0:fa775d326f9c | 256 | K_PS.fall(&Pause_Song); |
justinkim | 0:fa775d326f9c | 257 | K_PS.mode(PullUp); |
justinkim | 0:fa775d326f9c | 258 | |
justinkim | 0:fa775d326f9c | 259 | while(1) |
justinkim | 0:fa775d326f9c | 260 | { |
justinkim | 0:fa775d326f9c | 261 | mp3.play_song(new_song_number); |
justinkim | 0:fa775d326f9c | 262 | } |
justinkim | 0:fa775d326f9c | 263 | } |
justinkim | 0:fa775d326f9c | 264 | } |