use VS1033(MP3 decoder) and UL024TF(TFTLCD)
Dependencies: TFTLCDwithFastIO FastIO SDFileSystem TouchPanel VS1033 mbed
Diff: main.cpp
- Revision:
- 3:67e97c846cec
- Parent:
- 2:0090839c8276
- Child:
- 4:28900cff8f48
--- a/main.cpp Sun Jul 12 06:59:22 2015 +0000 +++ b/main.cpp Thu Jul 16 11:40:58 2015 +0000 @@ -1,8 +1,10 @@ #include "ili9328.h" #include <stdio.h> -#include "mbed.h" #include "SDFileSystem.h" #include "VS1053.h" +#include "image.h" +#include "TouchPanel.h" +#include "mbed.h" // prepare the data bus for writing commands and pixel data BusOut dataBus( P1_28,P2_3,P1_18,P1_24,P1_19,P1_26,P1_27,P1_25 ); // 16 pins @@ -12,28 +14,128 @@ SDFileSystem sd(/*MOSI*/ P0_9, /*MISO*/ P0_8, /*SCK*/ P1_29, /*CS*/ P0_2, /*Mountpoint*/ "sd"); VS1053 mp3(/*MOSI*/ P1_22 , /*MISO*/ P1_21, /*SCK*/ P1_20, /*CS*/ P1_23, - /*BSYNC*/ P2_16, /*DREQ*/ P2_17, /*RST*/ P2_18, /*SPI freq.*/ 10000000); + /*BSYNC*/ P2_17, /*DREQ*/ P2_16, /*RST*/ P2_18, /*SPI freq.*/ 10000000); + +Serial pc(P0_19,P0_18); +#define SD_READ_BLOCK_SIZE (1024) -#define SD_READ_BLOCK_SIZE (1024) +#define BOTTON_PREV_XPOS (15) +#define BOTTON_PREV_YPOS (170) +#define BOTTON_PLAY_XPOS (91) +#define BOTTON_PLAY_YPOS (170) +#define BOTTON_STOP_XPOS (168) +#define BOTTON_STOP_YPOS (170) +#define BOTTON_NEXT_XPOS (245) +#define BOTTON_NEXT_YPOS (170) +#define BOTTON_VOLUP_XPOS (245) +#define BOTTON_VOLUP_YPOS (10) +#define BOTTON_VOLDOWN_XPOS (245) +#define BOTTON_VOLDOWN_YPOS (80) + +bool checkTouchBotton_prev(int32_t xpos,int32_t ypos) +{ + bool result = 0; + if( (xpos >= BOTTON_PREV_XPOS && xpos <= (BOTTON_PREV_XPOS+60) ) && + (ypos >= BOTTON_PREV_YPOS && ypos <= (BOTTON_PREV_YPOS+60)) ) + { + result = 1; + } + return result; +} + +bool checkTouchBotton_play(int32_t xpos,int32_t ypos) +{ + bool result = 0; + if( (xpos >= BOTTON_PLAY_XPOS && xpos <= (BOTTON_PLAY_XPOS+60) ) && + (ypos >= BOTTON_PLAY_YPOS && ypos <= (BOTTON_PLAY_YPOS+60)) ) + { + result = 1; + } + return result; +} + +bool checkTouchBotton_stop(int32_t xpos,int32_t ypos) +{ + bool result = 0; + if( (xpos >= BOTTON_STOP_XPOS && xpos <= (BOTTON_STOP_XPOS+60) ) && + (ypos >= BOTTON_STOP_XPOS && ypos <= (BOTTON_STOP_XPOS+60)) ) + { + result = 1; + } + return result; +} + +bool checkTouchBotton_next(int32_t xpos,int32_t ypos) +{ + bool result = 0; + if( (xpos >= BOTTON_NEXT_XPOS && xpos <= (BOTTON_NEXT_XPOS+60) ) && + (ypos >= BOTTON_NEXT_YPOS && ypos <= (BOTTON_NEXT_YPOS+60)) ) + { + result = 1; + } + return result; +} + +bool checkTouchBotton_volup(int32_t xpos,int32_t ypos) +{ + bool result = 0; + if( (xpos >= BOTTON_VOLUP_XPOS && xpos <= (BOTTON_VOLUP_XPOS+60) ) && + (ypos >= BOTTON_VOLUP_YPOS && ypos <= (BOTTON_VOLUP_YPOS+60)) ) + { + result = 1; + } + return result; +} + +bool checkTouchBotton_voldown(int32_t xpos,int32_t ypos) +{ + bool result = 0; + if( (xpos >= BOTTON_VOLDOWN_XPOS && xpos <= (BOTTON_VOLDOWN_XPOS+60) ) && + (ypos >= BOTTON_VOLDOWN_YPOS && ypos <= (BOTTON_VOLDOWN_YPOS+60)) ) + { + result = 1; + } + return result; +} + int main() { static FILE *fp = NULL; - size_t sizeRead = 0; - size_t totalSizeSent=0; - size_t fileSize=0; + uint8_t SDFileOpenFailCnt = 0; + size_t mp3_ReadFileSize = 0; + size_t mp3_totalSizeSent=0; + size_t mp3_fileSize=0; + uint8_t mp3Player_State = 0; + uint16_t mp3Player_Volume = 0; + bool f_mp3Playwe_VolmeUpdate = 0; + bool f_mp3Playwe_Playing = 0; uint8_t buf[SD_READ_BLOCK_SIZE]; + char str[100]; + int32_t XReadPos = 0,YReadPos = 0; + bool touchPanel_Touched = 0; + //Format,Xsize,Ysize,PixelData + const bitmap_t img_button_play = { RGB16, 60, 60, &bmp_button_play }; + const bitmap_t img_button_stop = { RGB16, 60, 60, &bmp_button_stop }; + const bitmap_t img_button_next = { RGB16, 60, 60, &bmp_button_next }; + const bitmap_t img_button_prev = { RGB16, 60, 60, &bmp_button_prev }; + const bitmap_t img_button_volup = { RGB16, 60, 60, &bmp_button_volup }; + const bitmap_t img_button_voldown = { RGB16, 60, 60, &bmp_button_voldown }; + pc.baud(115200); printf("Power ON\r\n"); + //SD Init.(本来ならいらないけど、SDカードによっちゃもう1回リセットしないとダメポ + sd.disk_initialize(); + //LCD Init. lcd.Initialize(LANDSCAPE,RGB16); /* for sine test mode */ // mp3.sine_test_activate(SineWave_10k); // while(1); - + //MP3 decoder Init. mp3.hardwareReset(); mp3.sci_init(); @@ -45,39 +147,173 @@ lcd.SetBackground(COLOR_BLUE); lcd.FillScreen(-1); lcd.SetFont( &TerminusFont ); - lcd.Print( "STOP:XXXXXXXX", CENTER, 25 ); // align text to center horizontally and use starndard colors - - fp = fopen("/sd/2.mp3", "rb"); - //Get file size - fseek( fp, 0, SEEK_END ); - fileSize = ftell( fp ); - printf("file size:%d\r\n",fileSize); +/* for Caliblation + lcd.DrawCircle(40,40,10,COLOR_WHITE); + lcd.DrawCircle(280,200,10,COLOR_WHITE); +*/ + //Xpos, Ypos, ImageData(type:bitmap_t), Scale + lcd.DrawBitmap( BOTTON_PREV_XPOS, BOTTON_PREV_YPOS, (const bitmap_t*)&img_button_prev, 1 ); + lcd.DrawBitmap( BOTTON_PLAY_XPOS, BOTTON_PLAY_YPOS, (const bitmap_t*)&img_button_play, 1 ); + lcd.DrawBitmap( BOTTON_STOP_XPOS, BOTTON_STOP_YPOS, (const bitmap_t*)&img_button_stop, 1 ); + lcd.DrawBitmap( BOTTON_NEXT_XPOS, BOTTON_STOP_YPOS, (const bitmap_t*)&img_button_next, 1 ); + lcd.DrawBitmap( BOTTON_VOLUP_XPOS, BOTTON_VOLUP_YPOS, (const bitmap_t*)&img_button_volup, 1 ); + lcd.DrawBitmap( BOTTON_VOLDOWN_XPOS, BOTTON_VOLDOWN_YPOS, (const bitmap_t*)&img_button_voldown, 1 ); - //move file pointer to top. - rewind(fp); +//mp3Player_Stateに対して↓ +#define MP3_STATE_STOPPING (0) +#define MP3_STATE_STOPREQ (1) +#define MP3_STATE_PLAYREQ (2) +#define MP3_STATE_PLAYING (3) +#define MP3_STATE_NEXTREQ (4) +#define MP3_STATE_PREVREQ (5) +#define MP3_STATE_VOLCHANGEREQ (6) - if (fp) { - clearerr(fp); - totalSizeSent = 0; - } while(1) { - if(totalSizeSent>=fileSize) - { // Close when the track reaches the end +////////////////////////////////////////////////////////////// +/* TouchPanel GetStatas Section */ +////////////////////////////////////////////////////////////// + + XReadPos = getTouchPanelPosX(); + YReadPos = getTouchPanelPosY(); + + if( checkTouchBotton_prev(XReadPos,YReadPos) ) + { + if(touchPanel_Touched == 0) + { + mp3Player_State = MP3_STATE_PREVREQ; + touchPanel_Touched = 1; + } + } + else if( checkTouchBotton_play(XReadPos,YReadPos) ) + { + if(touchPanel_Touched == 0) + { + if( (mp3Player_State != MP3_STATE_PLAYING) && (mp3Player_State != MP3_STATE_PLAYREQ) ) + { + mp3Player_State = MP3_STATE_PLAYREQ; + } + touchPanel_Touched = 1; + } + } + else if( checkTouchBotton_stop(XReadPos,YReadPos) ) + { + if(touchPanel_Touched == 0) + { + if( (mp3Player_State != MP3_STATE_STOPPING) && (mp3Player_State != MP3_STATE_STOPREQ) ) + { + mp3Player_State = MP3_STATE_STOPREQ; + } + touchPanel_Touched = 1; + } + } + else if( checkTouchBotton_next(XReadPos,YReadPos) ) + { + if(touchPanel_Touched == 0) + { + mp3Player_State = MP3_STATE_NEXTREQ; + touchPanel_Touched = 1; + } + } + else if( checkTouchBotton_volup(XReadPos,YReadPos) ) + { + if(touchPanel_Touched == 0) + { + if(mp3Player_Volume >= 6527) + { + mp3Player_Volume-=6527; + f_mp3Playwe_VolmeUpdate = 1; + } + touchPanel_Touched = 1; + } + + } + else if( checkTouchBotton_voldown(XReadPos,YReadPos) ) + { + if(touchPanel_Touched == 0) + { + if(mp3Player_Volume <= 0xE57F ) + { + mp3Player_Volume+=6527; + f_mp3Playwe_VolmeUpdate = 1; + } + touchPanel_Touched = 1; + } + printf("VolDownTouched\r\n"); + } + else //any botton not touched + { + touchPanel_Touched = 0; + } +////////////////////////////////////////////////////////////// +/* MP3 Player Control Section */ +////////////////////////////////////////////////////////////// + if(mp3Player_State == MP3_STATE_PLAYREQ) + { + printf("state:%d\r\n",mp3Player_State); + fp = fopen("/sd/1.mp3", "rb"); + SDFileOpenFailCnt = 0; + while(!fp) + { + SDFileOpenFailCnt+=1; + if(SDFileOpenFailCnt >= 3) + { + printf("Fail SD init\r\n"); + printf("System Stop.\r\n"); + while(1); + } + printf("Fail file open n=%d\r\n",SDFileOpenFailCnt); + sd.disk_initialize(); + fp = fopen("/sd/1.mp3", "rb"); + wait(1); + } + + //Get file size + fseek( fp, 0, SEEK_END ); + mp3_fileSize = ftell( fp ); + printf("FileOpen. size=%dbit\r\n",mp3_fileSize); + + //move file pointer to top. + rewind(fp); + clearerr(fp); + mp3_totalSizeSent = 0; + mp3Player_State = MP3_STATE_PLAYING; + } + if( mp3Player_State == MP3_STATE_PLAYING ) + { + printf("state:%d\r\n",mp3Player_State); + printf("totalSendSize:%d\r\n",mp3_totalSizeSent); + + if(mp3_totalSizeSent>=mp3_fileSize) //play song end + { + mp3Player_State = MP3_STATE_STOPREQ; + } + else //transmit from SDCard to VS1033 + { + mp3_ReadFileSize = fread(buf, sizeof(uint8_t), SD_READ_BLOCK_SIZE, fp); + mp3_totalSizeSent += mp3.sendDataBlock(buf, mp3_ReadFileSize); + f_mp3Playwe_Playing = 1; + } + } + if( mp3Player_State == MP3_STATE_STOPREQ ) + { + printf("state:%d\r\n",mp3Player_State); mp3.stop(); fclose(fp); fp = NULL; + f_mp3Playwe_Playing = 0; printf("stop\r\n"); - while(1) - { - } + mp3Player_State = MP3_STATE_STOPPING; } - else + if( mp3Player_State == MP3_STATE_STOPPING ) { - sizeRead = fread(buf, sizeof(uint8_t), SD_READ_BLOCK_SIZE, fp); - totalSizeSent += mp3.sendDataBlock(buf, sizeRead); - //printf("total %d Send %d\r\n",totalSizeSent,sizeRead); + printf("state:%d\r\n",mp3Player_State); + } + + if( mp3Player_State == MP3_STATE_VOLCHANGEREQ ) + { + printf("state:%d\r\n",mp3Player_State); } } }