use VS1033(MP3 decoder) and UL024TF(TFTLCD)
Dependencies: TFTLCDwithFastIO FastIO SDFileSystem TouchPanel VS1033 mbed
main.cpp
- Committer:
- nameless129
- Date:
- 2015-07-16
- Revision:
- 3:67e97c846cec
- Parent:
- 2:0090839c8276
- Child:
- 4:28900cff8f48
File content as of revision 3:67e97c846cec:
#include "ili9328.h" #include <stdio.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 // create the lcd instance //(PinName CS, PinName RESET, PinName RS, PinName WR, BusOut *DATA_PORT, PinName BL=NC, PinName RD=NC, backlight_t blType=Constant, float defaultBackLightLevel=1.0) ILI9328_LCD lcd( P0_12, P0_11, P0_13, P0_14, &dataBus, NC, P1_9 ); // control pins and data bus 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_17, /*DREQ*/ P2_16, /*RST*/ P2_18, /*SPI freq.*/ 10000000); Serial pc(P0_19,P0_18); #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; 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(); mp3.sdi_init(); wait(0.1); printf("init CMPL.\r\n"); lcd.SetBackground(COLOR_BLUE); lcd.FillScreen(-1); lcd.SetFont( &TerminusFont ); /* 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 ); //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) while(1) { ////////////////////////////////////////////////////////////// /* 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"); mp3Player_State = MP3_STATE_STOPPING; } if( mp3Player_State == MP3_STATE_STOPPING ) { printf("state:%d\r\n",mp3Player_State); } if( mp3Player_State == MP3_STATE_VOLCHANGEREQ ) { printf("state:%d\r\n",mp3Player_State); } } }