
possibly simultaneously
Dependencies: TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG
main.cpp
- Committer:
- chana_jo
- Date:
- 2019-05-04
- Revision:
- 3:3a2c11f459c4
- Parent:
- 2:58378cb7e76f
File content as of revision 3:3a2c11f459c4:
#include "mbed.h" #include "TS_DISCO_F746NG.h" #include "LCD_DISCO_F746NG.h" #include"sn44.h" #include"cl44.h" #include"clhh44.h" #include"ophh44.h" #include"kick44.h" #define sample_freq 16000.0 DigitalOut led(LED1); LCD_DISCO_F746NG lcd; TS_DISCO_F746NG ts; AnalogIn tempoknob(A1); AnalogIn volumeknob(A0); PwmOut speaker(D1); Serial pc(USBTX, USBRX); Ticker re,er,rr,ee,sn44tick,cl44tick,clhh44tick,ophh44tick,kick44tick,testprint;//timer ไว้ attach ตอนplay audio กับไว้รับปุ่ม int checkplay=1,beat[5][8],page=1; int tracking; char currentpage[50],volumechar[50],strvolume[50],strtempo[50],tempostr[50]; //สร้างไว้ให้เขียนอักษรได้เฉยๆ float volume,tempo; float speed; //tempo converted to sec int h,i,j,k,l; void test(void); //function for touchscreen void play(void);// function for play void screen(void);//function for display void knob(void);// read knob void testbeat1(void); void testbeat2(void); int main() { lcd.Clear(LCD_COLOR_BLUE); ee.attach(&screen, 0.03); re.attach(&play, speed);//เล่นตามtempo er.attach(&test, 0.25);//กดช้ากดเร็วแล้วแต่ //rr.attach(&knob,0.5);//readknob ทุก0.5 } //SAMPLE && SAMPLE PLAY FUNCTION void sn44_sample () { speaker = sn44_data[h]/16777215.0;//scale to 0.0 to 1.0 for PWM h++; if (h>= num_sn44) { h = 0; sn44tick.detach(); //led = 0; } } void cl44_sample () { speaker = cl44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM i++; if (i>= num_cl44) { i = 0; cl44tick.detach(); //led = 0; } } void clhh44_sample () { speaker = clhh44_data[j]/16777215.0;//scale to 0.0 to 1.0 for PWM j++; if (j>= num_clhh44) { j = 0; clhh44tick.detach(); //led = 0; } } void ophh44_sample () { speaker = ophh44_data[k]/16777215.0;//scale to 0.0 to 1.0 for PWM k++; if (k>= num_ophh44) { k = 0; ophh44tick.detach(); //led = 0; } } void kick44_sample () { speaker = kick44_data[l]/16777215.0;//scale to 0.0 to 1.0 for PWM l++; if (l>= num_kick44) { l = 0; kick44tick.detach(); //led = 0; } } ///////////////////////////////////////////////////////////////////////////// PLAY PART ////////////////////////////////////////////// void playsnare() { speaker = sn44_data[h]/16777215.0;//scale to 0.0 to 1.0 for PWM h++; speaker.period(1.0/330750.0); //PWM freq >10X audio sample rate if (h>= num_sn44) { h = 0; sn44tick.detach(); } } void playkick() { speaker = kick44_data[l]/16777215.0;//scale to 0.0 to 1.0 for PWM l++; speaker.period(1.0/441000.0); //PWM freq >10X audio sample rate if (l>= num_kick44) { l = 0; kick44tick.detach(); } } void playclap() { speaker = cl44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM i++; speaker.period(1.0/220500.0); //PWM freq >10X audio sample rate if (i>= num_cl44) { i = 0; cl44tick.detach(); } } void playclhh() { speaker = clhh44_data[j]/16777215.0;//scale to 0.0 to 1.0 for PWM j++; speaker.period(1.0/330750.0); //PWM freq >10X audio sample rate if (j>= num_clhh44) { j = 0; clhh44tick.detach(); } } void playophh() { speaker = ophh44_data[k]/16777215.0;//scale to 0.0 to 1.0 for PWM k++; speaker.period(1.0/330750.0); //PWM freq >10X audio sample rate if (k>= num_ophh44) { k = 0; ophh44tick.detach(); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void play() { if(checkplay==1)//led blink when button play is on { pc.printf("current beat : %d ",tracking); if(tracking<8) tracking=tracking+1; else if(tracking==8) tracking=1; led=!led; if(tracking==1) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][0]==1) { pc.printf("1"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][0]==1) { pc.printf("2"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][0]==1) { pc.printf("3"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][0]==1) { pc.printf("4"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][0]==1) { pc.printf("5"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==2) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][1]==1) { //pc.printf("1"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][1]==1) { //pc.printf("2"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][1]==1) { //pc.printf("3"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][1]==1) { //pc.printf("4"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][1]==1) { //pc.printf("5"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==3) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][2]==1) { //pc.printf("1"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][2]==1) { //pc.printf("2"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][2]==1) { //pc.printf("3"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][2]==1) { //pc.printf("4"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][2]==1) { //pc.printf("5"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==4) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][3]==1) { //pc.printf("1"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][3]==1) { //pc.printf("2"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][3]==1) { //pc.printf("3"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][3]==1) { //pc.printf("4"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][3]==1) { //pc.printf("5"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==5) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][4]==1) { //pc.printf("1"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][4]==1) { //pc.printf("2"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][4]==1) { //pc.printf("3"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][4]==1) { //pc.printf("4"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][4]==1) { //pc.printf("5"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==6) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][5]==1) { //pc.printf("1"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][5]==1) { //pc.printf("2"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][5]==1) { //pc.printf("3"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][5]==1) { //pc.printf("4"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][5]==1) { //pc.printf("5"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==7) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][0]==1) { //pc.printf("6"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][0]==1) { //pc.printf("6"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][0]==1) { //pc.printf("6"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][0]==1) { //pc.printf("6"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][0]==1) { //pc.printf("6"); ophh44tick.attach(&playophh,1.0 / 33075); } } else if(tracking==8) { sn44tick.detach(); cl44tick.detach(); clhh44tick.detach(); ophh44tick.detach(); kick44tick.detach(); if(beat[0][0]==1) { //pc.printf("7"); kick44tick.attach(&playkick,1.0 / 33075); } if(beat[1][0]==1) { //pc.printf("7"); sn44tick.attach(&playsnare,1.0 / 33075); } if(beat[2][0]==1) { //pc.printf("7"); cl44tick.attach(&playclap,1.0 /22050); } if(beat[3][0]==1) { //pc.printf("7"); clhh44tick.attach(&playclhh,1.0 / 33075); } if(beat[4][0]==1) { //pc.printf("7"); ophh44tick.attach(&playophh,1.0 / 33075); } } } else if(checkplay==0)//led off { led=0; tracking=1; } } void test() { TS_StateTypeDef TS_State; /*uint8_t status;//ไม่ได้ใช้สร้างไว้ก่อน*/ ts.GetState(&TS_State); if((TS_State.touchDetected))//รับtouchอะไรก็ตาม จะเข้าfunctionนี้ { if(TS_State.touchX[0]<74&&TS_State.touchX[0]>24&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//playbutton { if(checkplay==0) { checkplay=1; } else if(checkplay==1) { checkplay=0; } } if(TS_State.touchX[0]<74&&TS_State.touchX[0]>24&&TS_State.touchY[0]<161&&TS_State.touchY[0]>136)//previous page { page=page-1; if(page<1) { page=5; } pc.printf("change to page %d",page); } if(TS_State.touchX[0]<431&&TS_State.touchX[0]>406&&TS_State.touchY[0]<161&&TS_State.touchY[0]>136)//next page { page=page+1; if(page>5) { page=1; } pc.printf("change to page %d",page); } if(TS_State.touchX[0]<122&&TS_State.touchX[0]>98&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat1 { if(beat[page-1][0]==0) { beat[page-1][0]=1; } else if(beat[page-1][0]==1) { beat[page-1][0]=0; } } if(TS_State.touchX[0]<166&&TS_State.touchX[0]>142&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat2 { if(beat[page-1][1]==0) { beat[page-1][1]=1; } else if(beat[page-1][1]==1) { beat[page-1][1]=0; } } if(TS_State.touchX[0]<210&&TS_State.touchX[0]>186&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat3 { if(beat[page-1][2]==0) { beat[page-1][2]=1; } else if(beat[page-1][2]==1) { beat[page-1][2]=0; } } if(TS_State.touchX[0]<254&&TS_State.touchX[0]>230&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat4 { if(beat[page-1][3]==0) { beat[page-1][3]=1; } else if(beat[page-1][3]==1) { beat[page-1][3]=0; } } if(TS_State.touchX[0]<298&&TS_State.touchX[0]>274&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat5 { if(beat[page-1][4]==0) { beat[page-1][4]=1; } else if(beat[page-1][4]==1) { beat[page-1][4]=0; } } if(TS_State.touchX[0]<342&&TS_State.touchX[0]>318&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat6 { if(beat[page-1][5]==0) { beat[page-1][5]=1; } else if(beat[page-1][5]==1) { beat[page-1][5]=0; } } if(TS_State.touchX[0]<386&&TS_State.touchX[0]>362&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat7 { if(beat[page-1][6]==0) { beat[page-1][6]=1; } else if(beat[page-1][6]==1) { beat[page-1][6]=0; } } if(TS_State.touchX[0]<430&&TS_State.touchX[0]>406&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat8 { if(beat[page-1][7]==0) { beat[page-1][7]=1; } else if(beat[page-1][7]==1) { beat[page-1][7]=0; } } pc.printf("at page :%d ",page); //ไว้check uart เฉยๆ pc.printf("%d",beat[page-1][0]); pc.printf("%d",beat[page-1][1]); pc.printf("%d",beat[page-1][2]); pc.printf("%d",beat[page-1][3]); pc.printf("%d",beat[page-1][4]); pc.printf("%d",beat[page-1][5]); pc.printf("%d",beat[page-1][6]); pc.printf("%d",beat[page-1][7]); pc.printf("\n\r"); } } void knob()//read analog { volume=(volumeknob.read()*100);//0to100 tempo=(tempoknob.read()*100);//problematic******************************************** sprintf(tempostr,"%1.1f",tempo); sprintf(volumechar,"%1.1f",volume); pc.printf("tempo = %s \n\r",tempostr); //print ในuart ถูก pc.printf("volume = %s\n\r",volumechar); speed=floor(tempo); speed=(60/speed)/2; } void screen()// function for display { lcd.SetBackColor(LCD_COLOR_BLUE); lcd.SetTextColor(LCD_COLOR_BROWN);//play button lcd.FillRect(24,198,50,50); lcd.SetTextColor(LCD_COLOR_YELLOW);//previous page lcd.FillRect(24,136,50,25); lcd.SetTextColor(LCD_COLOR_YELLOW);// next page lcd.FillRect(406,136,50,25); sprintf(strvolume,"%s","Volume "); //display volume lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(1),(uint8_t*)strvolume,LEFT_MODE); sprintf(volumechar,"%s",volumechar); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(2),(uint8_t*)volumechar,LEFT_MODE); sprintf(strtempo,"%s","Tempo "); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(1),(uint8_t*)strtempo,RIGHT_MODE); sprintf(tempostr,"%1.1f",tempo); ////////////////////////////////////////////display tempo on lcd ไม่ถูก lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(2),(uint8_t*)tempostr,RIGHT_MODE); if(page==1) //พวกนี้คือแสดงหน้าว่าอยู่หน้าอะไร { sprintf(currentpage,"%s","Current page is Kick "); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE); } else if(page==2) { sprintf(currentpage,"%s","Current page is Snare "); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE); } else if(page==3) { sprintf(currentpage,"%s","Current page is Clap "); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE); } else if(page==4) { sprintf(currentpage,"%s","Current page is Close HiHat "); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE); } else if(page==5) { sprintf(currentpage,"%s","Current page is Open HiHat "); lcd.SetTextColor(LCD_COLOR_BLACK); lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE); } // พวกนี้คือเปลี่ยนปุ่มแต่ละ beat if(beat[page-1][0]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(98,198,24,50); } if(beat[page-1][0]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(98,198,24,50); } if(beat[page-1][1]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(142,198,24,50); } if(beat[page-1][1]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(142,198,24,50); } if(beat[page-1][2]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(186,198,24,50); } if(beat[page-1][2]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(186,198,24,50); } if(beat[page-1][3]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(230,198,24,50); } if(beat[page-1][3]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(230,198,24,50); } if(beat[page-1][4]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(274,198,24,50); } if(beat[page-1][4]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(274,198,24,50); } if(beat[page-1][5]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(318,198,24,50); } if(beat[page-1][5]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(318,198,24,50); } if(beat[page-1][6]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(362,198,24,50); } if(beat[page-1][6]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(362,198,24,50); } if(beat[page-1][7]==0) { lcd.SetTextColor(LCD_COLOR_LIGHTRED); lcd.FillRect(406,198,24,50); } if(beat[page-1][7]==1) { lcd.SetTextColor(LCD_COLOR_GREEN); lcd.FillRect(406,198,24,50); } }