Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FastIO SDFileSystem TFTLCDwithFastIO TouchPanel VS1033 mbed
Fork of 11U68_MP3Player with TFTLCD by
Diff: main.cpp
- Revision:
- 5:a493361aead2
- Parent:
- 4:28900cff8f48
- Child:
- 6:74271fce2368
diff -r 28900cff8f48 -r a493361aead2 main.cpp
--- a/main.cpp Thu Jul 16 12:43:08 2015 +0000
+++ b/main.cpp Thu Jul 16 18:18:00 2015 +0000
@@ -1,5 +1,6 @@
#include "ili9328.h"
-#include <stdio.h>
+#include "stdio.h"
+#include "string.h"
#include "SDFileSystem.h"
#include "VS1053.h"
#include "image.h"
@@ -15,11 +16,11 @@
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);
+Ticker Int100ms;
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)
@@ -99,6 +100,15 @@
return result;
}
+uint8_t g_mp3Player_State = 0;
+uint16_t g_mp3Player_Volume = 0;
+bool gf_mp3Playwe_VolmeUpdate = 0;
+bool gf_100ms = 0;
+
+void Int100msFunc()
+{
+ gf_100ms = 1;
+}
int main()
{
@@ -107,14 +117,11 @@
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;
+ static 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 };
@@ -122,9 +129,11 @@
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(921600);
+ printf("Power ON\r\n");
- pc.baud(115200);
- printf("Power ON\r\n");
+ Int100ms.attach_us(&Int100msFunc, 100000);
//SD Init.(本来ならいらないけど、SDカードによっちゃもう1回リセットしないとダメポ
sd.disk_initialize();
@@ -146,12 +155,20 @@
lcd.SetBackground(COLOR_BLUE);
lcd.FillScreen(-1);
- lcd.SetFont( &TerminusFont );
+ lcd.SetFont( &TerminusBigFont );
-/* for Caliblation
- lcd.DrawCircle(40,40,10,COLOR_WHITE);
- lcd.DrawCircle(280,200,10,COLOR_WHITE);
-*/
+ //for Caliblation
+ while(0)
+ {
+ int32_t XReadPos = 0,YReadPos = 0;
+ lcd.DrawCircle(40,40,10,COLOR_WHITE);
+ lcd.DrawCircle(280,200,10,COLOR_WHITE);
+ XReadPos = getTouchPanelPosX();
+ YReadPos = getTouchPanelPosY();
+ printf("X:%d Y:%d\r\n",XReadPos,YReadPos);
+ wait_ms(500);
+ }
+
//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 );
@@ -160,7 +177,67 @@
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に対して↓
+////////////////////////////////////////////////////////////
+/* SDCard GetFileList Section */
+////////////////////////////////////////////////////////////
+#define SD_MAX_FILENAME_LENGTH (256) //MAX 256
+#define SD_MAX_FILE_COUNT (20)
+
+ char SDFileList[SD_MAX_FILE_COUNT][SD_MAX_FILENAME_LENGTH]={0};
+ char SDFileList_short[SD_MAX_FILE_COUNT][SD_MAX_FILENAME_LENGTH]={0};
+ char SDFileList_cnt = 0;
+ char mp3PlayingFileName[SD_MAX_FILENAME_LENGTH]={0};
+ uint8_t mp3PlayingFileNo = 0;
+ int i = 0;
+ DIR *d;
+ struct dirent *p;
+
+ d = opendir("/sd");
+ if ( d != NULL )
+ {
+ while ( (p = readdir(d)) != NULL )
+ {
+ char *ret;
+ ret = strstr(p->d_name,"System"); //System Vol..フォルダは除外
+ if(ret == 0)
+ {
+ sprintf((char *)(SDFileList_short[i]+0),"%s",(const char *)p->d_name);
+ sprintf((char *)(SDFileList[i]+0),"/sd/%s",(const char *)p->d_name);
+ i+=1;
+ }
+ }
+ SDFileList_cnt = i;
+ }
+ closedir(d);
+
+ for(i=0;i<SDFileList_cnt;i++)
+ {
+ sprintf(str,"%d:%s",i,SDFileList_short[i]);
+ lcd.Print( str, LEFT, i*28 ); // align text to center horizontally and use starndard colors
+ lcd.Print( "*", LEFT, 0 ); // align text to center horizontally and use starndard colors
+ }
+
+ mp3PlayingFileNo = 0;
+ sprintf(mp3PlayingFileName,"%s",SDFileList[mp3PlayingFileNo]);
+
+ printf("file count=%d\r\n",SDFileList_cnt);
+ printf("FirstPlayFile:%s\r\n",mp3PlayingFileName);
+ g_mp3Player_State = 0;
+ f_mp3Playwe_Playing = 0;
+ while(1)
+ {
+
+//////////////////////////////////////////////////////////////
+/* TouchPanel GetStatas Section */
+//////////////////////////////////////////////////////////////
+ if(gf_100ms == 1)
+ {
+ XReadPos = getTouchPanelPosX();
+ YReadPos = getTouchPanelPosY();
+ gf_100ms = 0;
+ }
+
+//g_mp3Player_Stateに対して↓
#define MP3_STATE_STOPPING (0)
#define MP3_STATE_STOPREQ (1)
#define MP3_STATE_PLAYREQ (2)
@@ -168,21 +245,15 @@
#define MP3_STATE_NEXTREQ (4)
#define MP3_STATE_PREVREQ (5)
#define MP3_STATE_VOLCHANGEREQ (6)
-
- while(1)
- {
-//////////////////////////////////////////////////////////////
-/* TouchPanel GetStatas Section */
-//////////////////////////////////////////////////////////////
-
- XReadPos = getTouchPanelPosX();
- YReadPos = getTouchPanelPosY();
+#define MP3_STATE_REPLAY (7)
+#define MP3_STATE_FILECHANGE (8)
if( checkTouchBotton_prev(XReadPos,YReadPos) )
{
if(touchPanel_Touched == 0)
{
- mp3Player_State = MP3_STATE_PREVREQ;
+ printf("prev touch\r\n");
+ g_mp3Player_State = MP3_STATE_PREVREQ;
touchPanel_Touched = 1;
}
}
@@ -190,9 +261,10 @@
{
if(touchPanel_Touched == 0)
{
- if( (mp3Player_State != MP3_STATE_PLAYING) && (mp3Player_State != MP3_STATE_PLAYREQ) )
+ printf("play touch\r\n");
+ if( (g_mp3Player_State != MP3_STATE_PLAYING) && (g_mp3Player_State != MP3_STATE_PLAYREQ) )
{
- mp3Player_State = MP3_STATE_PLAYREQ;
+ g_mp3Player_State = MP3_STATE_PLAYREQ;
}
touchPanel_Touched = 1;
}
@@ -201,9 +273,10 @@
{
if(touchPanel_Touched == 0)
{
- if( (mp3Player_State != MP3_STATE_STOPPING) && (mp3Player_State != MP3_STATE_STOPREQ) )
+ printf("stop touch\r\n");
+ if( (g_mp3Player_State != MP3_STATE_STOPPING) && (g_mp3Player_State != MP3_STATE_STOPREQ) )
{
- mp3Player_State = MP3_STATE_STOPREQ;
+ g_mp3Player_State = MP3_STATE_STOPREQ;
}
touchPanel_Touched = 1;
}
@@ -212,7 +285,8 @@
{
if(touchPanel_Touched == 0)
{
- mp3Player_State = MP3_STATE_NEXTREQ;
+ printf("next touch\r\n");
+ g_mp3Player_State = MP3_STATE_NEXTREQ;
touchPanel_Touched = 1;
}
}
@@ -220,38 +294,41 @@
{
if(touchPanel_Touched == 0)
{
- if(mp3Player_Volume >= 6527)
+ printf("volup touch\r\n");
+ if(g_mp3Player_Volume >= 6527)
{
- mp3Player_Volume-=6527;
- f_mp3Playwe_VolmeUpdate = 1;
+ g_mp3Player_Volume-=6527;
+ gf_mp3Playwe_VolmeUpdate = 1;
}
touchPanel_Touched = 1;
}
-
+
}
else if( checkTouchBotton_voldown(XReadPos,YReadPos) )
{
if(touchPanel_Touched == 0)
{
- if(mp3Player_Volume <= 0xE57F )
+ printf("voldown touch\r\n");
+ if(g_mp3Player_Volume <= 0xE57F )
{
- mp3Player_Volume+=6527;
- f_mp3Playwe_VolmeUpdate = 1;
+ g_mp3Player_Volume+=6527;
+ gf_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)
+ if(g_mp3Player_State == MP3_STATE_PLAYREQ)
{
- fp = fopen("/sd/1.mp3", "rb");
+ printf("FileOpen:%s\r\n",mp3PlayingFileName);
+ fp = fopen(mp3PlayingFileName, "rb");
SDFileOpenFailCnt = 0;
while(!fp)
{
@@ -264,7 +341,7 @@
}
printf("Fail file open n=%d\r\n",SDFileOpenFailCnt);
sd.disk_initialize();
- fp = fopen("/sd/1.mp3", "rb");
+ fp = fopen(mp3PlayingFileName, "rb");
wait(1);
}
@@ -277,15 +354,15 @@
rewind(fp);
clearerr(fp);
mp3_totalSizeSent = 0;
- mp3Player_State = MP3_STATE_PLAYING;
+ g_mp3Player_State = MP3_STATE_PLAYING;
}
- if( mp3Player_State == MP3_STATE_PLAYING )
+ if( g_mp3Player_State == MP3_STATE_PLAYING )
{
- printf("totalSendSize:%d\r\n",mp3_totalSizeSent);
+// printf("totalSendSize:%d\r\n",mp3_totalSizeSent);
if(mp3_totalSizeSent>=mp3_fileSize) //play song end
{
- mp3Player_State = MP3_STATE_STOPREQ;
+ g_mp3Player_State = MP3_STATE_STOPREQ;
}
else //transmit from SDCard to VS1033
{
@@ -294,7 +371,7 @@
f_mp3Playwe_Playing = 1;
}
}
- if( mp3Player_State == MP3_STATE_STOPREQ )
+ if( (g_mp3Player_State == MP3_STATE_STOPREQ) || (g_mp3Player_State == MP3_STATE_REPLAY) )
{
uint16_t returnCode=0;
uint16_t stopFailCnt = 0;
@@ -307,7 +384,7 @@
{
stopFailCnt++;
}
- if(stopFailCnt >= 10)
+ if(stopFailCnt >= 20)
{
printf("ERROR! impossible of stop\r\nSystem STOP\r\n");
while(1);
@@ -316,14 +393,65 @@
fclose(fp);
fp = NULL;
f_mp3Playwe_Playing = 0;
- mp3Player_State = MP3_STATE_STOPPING;
+ if(g_mp3Player_State == MP3_STATE_STOPREQ)
+ {
+ g_mp3Player_State = MP3_STATE_STOPPING;
+ }
+ if(g_mp3Player_State == MP3_STATE_REPLAY)
+ {
+ g_mp3Player_State = MP3_STATE_PLAYREQ;
+ }
}
- if( mp3Player_State == MP3_STATE_STOPPING )
+
+ if( g_mp3Player_State == MP3_STATE_STOPPING )
+ {
+ f_mp3Playwe_Playing = 0;
+ }
+
+ if( g_mp3Player_State == MP3_STATE_NEXTREQ )
{
+ if( mp3PlayingFileNo >= (SDFileList_cnt -1) )
+ {
+ mp3PlayingFileNo = 0;
+ }
+ else
+ {
+ mp3PlayingFileNo+=1;
+ }
+ g_mp3Player_State = MP3_STATE_FILECHANGE;
}
- if( mp3Player_State == MP3_STATE_VOLCHANGEREQ )
+ if( g_mp3Player_State == MP3_STATE_PREVREQ )
+ {
+ if( mp3PlayingFileNo <= 0 )
+ {
+ mp3PlayingFileNo = (SDFileList_cnt - 1);
+ }
+ else
+ {
+ mp3PlayingFileNo-=1;
+ }
+ g_mp3Player_State = MP3_STATE_FILECHANGE;
+ }
+ if( g_mp3Player_State == MP3_STATE_FILECHANGE )
{
+ printf("next:%d,%s\r\n",mp3PlayingFileNo,SDFileList[mp3PlayingFileNo]);
+ sprintf(mp3PlayingFileName,"%s",SDFileList[mp3PlayingFileNo]);
+ if(f_mp3Playwe_Playing == 1)
+ {
+ g_mp3Player_State = MP3_STATE_REPLAY;
+ }
+ else
+ {
+ g_mp3Player_State = MP3_STATE_STOPPING;
+ }
+ }
+
+ if( gf_mp3Playwe_VolmeUpdate == 1 )
+ {
+ mp3.VolControl(g_mp3Player_Volume);
+ gf_mp3Playwe_VolmeUpdate = 0;
+ printf("Vol:%d\r\n",g_mp3Player_Volume);
}
}
}
