Tantep Sinjanakhom / Mbed 2 deprecated 808

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TS_DISCO_F746NG.h"
00003 #include "LCD_DISCO_F746NG.h"
00004 #include"sn44.h"
00005 #include"cl44.h"
00006 #include"clhh44.h"
00007 #include"ophh44.h"
00008 #include"kick44.h"
00009 
00010 #define sample_freq 16000.0
00011 DigitalOut led(LED1);
00012 LCD_DISCO_F746NG lcd;
00013 TS_DISCO_F746NG ts;
00014 AnalogIn tempoknob(A1);
00015 AnalogIn volumeknob(A0);
00016 PwmOut speaker(D1);
00017 Serial pc(USBTX, USBRX);
00018 Ticker re,er,rr,ee,sn44tick,cl44tick,clhh44tick,ophh44tick,kick44tick;//timer ไว้ attach ตอนplay audio กับไว้รับปุ่ม
00019 
00020 int checkplay=1,beat[5][8],page=1;
00021 char currentpage[50],volumechar[50],strvolume[50],strtempo[50],tempostr[50]; //สร้างไว้ให้เขียนอักษรได้เฉยๆ
00022 float volume,tempo;
00023 int i=0;
00024 void test(void); //function for touchscreen
00025 void play(void);// function for play
00026 void screen(void);//function for display
00027 void knob(void);// read knob
00028 
00029 int main() 
00030 {  
00031     lcd.Clear(LCD_COLOR_BLUE);
00032     ee.attach(&screen, 0.03);
00033     re.attach(&play, 0.1);//เล่นตามsamplerate
00034     er.attach(&test, 0.25);//กดช้ากดเร็วแล้วแต่
00035     rr.attach(&knob,0.5);//readknob ทุก0.5
00036     
00037    
00038 }
00039 
00040  
00041 //SAMPLE && SAMPLE PLAY FUNCTION
00042 
00043 void sn44_sample ()
00044 {
00045  
00046     speaker = sn44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM
00047     i++;
00048     if (i>= num_sn44) {
00049         i = 0;
00050         sn44tick.detach();
00051         led = 0;
00052     }
00053 }
00054 void cl44_sample ()
00055 {
00056  
00057     speaker = cl44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM
00058     i++;
00059     if (i>= num_cl44) {
00060         i = 0;
00061         cl44tick.detach();
00062         led = 0;
00063     }
00064 }
00065 void clhh44_sample ()
00066 {
00067  
00068     speaker = clhh44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM
00069     i++;
00070     if (i>= num_clhh44) {
00071         i = 0;
00072         clhh44tick.detach();
00073         led = 0;
00074     }
00075 }
00076 void ophh44_sample ()
00077 {
00078  
00079     speaker = ophh44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM
00080     i++;
00081     if (i>= num_ophh44) {
00082         i = 0;
00083         ophh44tick.detach();
00084         led = 0;
00085     }
00086 }
00087 void kick44_sample ()
00088 {
00089  
00090     speaker = kick44_data[i]/16777215.0;//scale to 0.0 to 1.0 for PWM
00091     i++;
00092     if (i>= num_kick44) {
00093         i = 0;
00094         kick44tick.detach();
00095         led = 0;
00096     }
00097 }
00098 
00099 void playsnare()
00100 {
00101     speaker.period(1.0/330750.0); //PWM freq >10X audio sample rate
00102     
00103 
00104         sn44tick.attach(&sn44_sample, 1.0 / 33075);
00105 
00106         wait(0.5);
00107     
00108 }
00109 void playkick()
00110 {
00111     speaker.period(1.0/441000.0); //PWM freq >10X audio sample rate
00112 
00113 
00114         kick44tick.attach(&kick44_sample, 1.0 / 33075);
00115 
00116         wait(0.2);
00117     
00118 }
00119 void playclap()
00120 {
00121     speaker.period(1.0/220500.0); //PWM freq >10X audio sample rate
00122     
00123 
00124         cl44tick.attach(&cl44_sample, 1.0 /22050);
00125 
00126         wait(0.5);
00127     
00128 }
00129 void playclhh()
00130 {
00131     speaker.period(1.0/330750.0); //PWM freq >10X audio sample rate
00132     
00133         clhh44tick.attach(&clhh44_sample, 1.0 / 33075);
00134 
00135         wait(0.5);
00136     
00137 }
00138 void playophh()
00139 {
00140     speaker.period(1.0/330750.0); //PWM freq >10X audio sample rate
00141         ophh44tick.attach(&ophh44_sample, 1.0 / 33075);
00142 
00143         wait(0.2);
00144     
00145 }
00146 ////////////////////////////////////////////////////////////////
00147 void play() 
00148 {
00149       if(checkplay==1)//led blink when button play is on
00150       {
00151       led=!led;
00152       }
00153       else if(checkplay==0)//led off
00154             {
00155                 led=0;
00156             }
00157    
00158 }
00159 
00160 void test() 
00161 {
00162        TS_StateTypeDef TS_State;
00163        /*uint8_t status;//ไม่ได้ใช้สร้างไว้ก่อน*/
00164        ts.GetState(&TS_State);  
00165        if((TS_State.touchDetected))//รับtouchอะไรก็ตาม จะเข้าfunctionนี้
00166        {
00167         
00168         if(TS_State.touchX[0]<74&&TS_State.touchX[0]>24&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//playbutton
00169         {
00170             if(checkplay==0)  
00171             {
00172             checkplay=1;
00173             }  
00174             else if(checkplay==1)
00175             {
00176                 checkplay=0;
00177             }
00178         }
00179         if(TS_State.touchX[0]<74&&TS_State.touchX[0]>24&&TS_State.touchY[0]<161&&TS_State.touchY[0]>136)//previous page
00180         {
00181             page=page-1;
00182             if(page<1) 
00183             {
00184             page=5;
00185             }  
00186             pc.printf("change to page %d",page);
00187             
00188         }
00189          if(TS_State.touchX[0]<431&&TS_State.touchX[0]>406&&TS_State.touchY[0]<161&&TS_State.touchY[0]>136)//next page
00190         {
00191             page=page+1;
00192             if(page>5) 
00193             {
00194             page=1;
00195             }  
00196             pc.printf("change to page %d",page);
00197             
00198         }
00199           if(TS_State.touchX[0]<122&&TS_State.touchX[0]>98&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat1
00200         {
00201             
00202             if(beat[page-1][0]==0) 
00203             {
00204             beat[page-1][0]=1;
00205             
00206             }
00207             else if(beat[page-1][0]==1)
00208             {
00209                 beat[page-1][0]=0;
00210             }
00211             
00212         
00213             
00214         }
00215           if(TS_State.touchX[0]<166&&TS_State.touchX[0]>142&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat2
00216         {
00217             if(beat[page-1][1]==0) 
00218             {
00219             beat[page-1][1]=1;
00220             }  
00221             else if(beat[page-1][1]==1)
00222             {
00223                 beat[page-1][1]=0;
00224             }
00225 
00226         }          
00227           if(TS_State.touchX[0]<210&&TS_State.touchX[0]>186&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat3
00228         {
00229             if(beat[page-1][2]==0) 
00230             {
00231             beat[page-1][2]=1;
00232             }  
00233             else if(beat[page-1][2]==1)
00234             {
00235                 beat[page-1][2]=0;
00236             }
00237 
00238         }
00239           if(TS_State.touchX[0]<254&&TS_State.touchX[0]>230&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat4
00240         {
00241             if(beat[page-1][3]==0) 
00242             {
00243             beat[page-1][3]=1;
00244             }  
00245             else if(beat[page-1][3]==1)
00246             {
00247                 beat[page-1][3]=0;
00248             }
00249 
00250         }
00251           if(TS_State.touchX[0]<298&&TS_State.touchX[0]>274&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat5
00252         {
00253             if(beat[page-1][4]==0) 
00254             {
00255             beat[page-1][4]=1;
00256             }  
00257             else if(beat[page-1][4]==1)
00258             {
00259                 beat[page-1][4]=0;
00260             }
00261 
00262         }
00263           if(TS_State.touchX[0]<342&&TS_State.touchX[0]>318&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat6
00264         {
00265             if(beat[page-1][5]==0) 
00266             {
00267             beat[page-1][5]=1;
00268             }  
00269             else if(beat[page-1][5]==1)
00270             {
00271                 beat[page-1][5]=0;
00272             }
00273 
00274         }
00275           if(TS_State.touchX[0]<386&&TS_State.touchX[0]>362&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat7
00276         {
00277             if(beat[page-1][6]==0) 
00278             {
00279             beat[page-1][6]=1;
00280             }  
00281             else if(beat[page-1][6]==1)
00282             {
00283                 beat[page-1][6]=0;
00284             }
00285 
00286         }
00287           if(TS_State.touchX[0]<430&&TS_State.touchX[0]>406&&TS_State.touchY[0]<248&&TS_State.touchY[0]>198)//beat8
00288         {
00289             if(beat[page-1][7]==0) 
00290             {
00291             beat[page-1][7]=1;
00292             }  
00293             else if(beat[page-1][7]==1)
00294             {
00295                 beat[page-1][7]=0;
00296             }
00297 
00298         }
00299 
00300         pc.printf("at page :%d    ",page); //ไว้check uart เฉยๆ
00301         pc.printf("%d",beat[page-1][0]);
00302         pc.printf("%d",beat[page-1][1]);
00303         pc.printf("%d",beat[page-1][2]);
00304         pc.printf("%d",beat[page-1][3]);
00305         pc.printf("%d",beat[page-1][4]);
00306         pc.printf("%d",beat[page-1][5]);
00307         pc.printf("%d",beat[page-1][6]);
00308         pc.printf("%d",beat[page-1][7]);
00309         pc.printf("\n\r");
00310         }
00311  }
00312  
00313  void knob()//read analog
00314 {
00315  
00316   volume=(volumeknob.read()*100);//0to100
00317    tempo=(tempoknob.read()*100);//problematic********************************************
00318   
00319   sprintf(tempostr,"%1.1f",tempo);  
00320   sprintf(volumechar,"%1.1f",volume);  
00321   pc.printf("tempo =  %s \n\r",tempostr);  //print ในuart ถูก
00322   pc.printf("volume =  %s\n\r",volumechar);  
00323     
00324 }
00325  
00326  
00327  
00328  
00329  void screen()// function for display
00330 {
00331     lcd.SetBackColor(LCD_COLOR_BLUE);
00332     lcd.SetTextColor(LCD_COLOR_BROWN);//play button
00333     lcd.FillRect(24,198,50,50);
00334     lcd.SetTextColor(LCD_COLOR_YELLOW);//previous page
00335     lcd.FillRect(24,136,50,25);
00336     lcd.SetTextColor(LCD_COLOR_YELLOW);// next page
00337     lcd.FillRect(406,136,50,25);
00338     
00339     sprintf(strvolume,"%s","Volume "); //display volume
00340     lcd.SetTextColor(LCD_COLOR_BLACK);
00341     lcd.DisplayStringAt(24,LINE(1),(uint8_t*)strvolume,LEFT_MODE);
00342     sprintf(volumechar,"%s",volumechar);
00343     lcd.SetTextColor(LCD_COLOR_BLACK);
00344     lcd.DisplayStringAt(24,LINE(2),(uint8_t*)volumechar,LEFT_MODE);
00345     
00346     sprintf(strtempo,"%s","Tempo ");
00347     lcd.SetTextColor(LCD_COLOR_BLACK);
00348     lcd.DisplayStringAt(24,LINE(1),(uint8_t*)strtempo,RIGHT_MODE);
00349      sprintf(tempostr,"%1.1f",tempo); ////////////////////////////////////////////display tempo on lcd ไม่ถูก
00350     lcd.SetTextColor(LCD_COLOR_BLACK);
00351     lcd.DisplayStringAt(24,LINE(2),(uint8_t*)tempostr,RIGHT_MODE);
00352     
00353     
00354    
00355     
00356        if(page==1) //พวกนี้คือแสดงหน้าว่าอยู่หน้าอะไร
00357         {
00358         sprintf(currentpage,"%s","Current page is Kick       ");
00359         lcd.SetTextColor(LCD_COLOR_BLACK);
00360         lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE);
00361         
00362         }
00363         else if(page==2)
00364         {
00365         sprintf(currentpage,"%s","Current page is Snare      ");
00366         lcd.SetTextColor(LCD_COLOR_BLACK);
00367         lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE);   
00368      
00369         }
00370        else if(page==3)
00371         {
00372         sprintf(currentpage,"%s","Current page is Clap       ");
00373         lcd.SetTextColor(LCD_COLOR_BLACK);
00374         lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE);   
00375         }
00376        else if(page==4)
00377         {
00378         sprintf(currentpage,"%s","Current page is Close HiHat  ");
00379         lcd.SetTextColor(LCD_COLOR_BLACK);
00380         lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE);   
00381         }
00382        else if(page==5)
00383         {
00384         sprintf(currentpage,"%s","Current page is Open HiHat  ");
00385         lcd.SetTextColor(LCD_COLOR_BLACK);
00386         lcd.DisplayStringAt(24,LINE(3),(uint8_t*)currentpage,LEFT_MODE);   
00387         }
00388             
00389            // พวกนี้คือเปลี่ยนปุ่มแต่ละ beat
00390             if(beat[page-1][0]==0)
00391             {
00392              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00393              lcd.FillRect(98,198,24,50);
00394             }
00395             if(beat[page-1][0]==1)
00396             {
00397              lcd.SetTextColor(LCD_COLOR_GREEN);
00398              lcd.FillRect(98,198,24,50);
00399             }
00400             if(beat[page-1][1]==0)            
00401             {
00402              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00403              lcd.FillRect(142,198,24,50);
00404             }
00405             if(beat[page-1][1]==1)            
00406             {
00407              lcd.SetTextColor(LCD_COLOR_GREEN);
00408              lcd.FillRect(142,198,24,50);
00409             }
00410             if(beat[page-1][2]==0)
00411             {
00412              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00413              lcd.FillRect(186,198,24,50);
00414             }
00415             if(beat[page-1][2]==1)
00416             {
00417              lcd.SetTextColor(LCD_COLOR_GREEN);
00418              lcd.FillRect(186,198,24,50);
00419             }
00420             if(beat[page-1][3]==0)
00421             {
00422              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00423              lcd.FillRect(230,198,24,50);
00424             }
00425             if(beat[page-1][3]==1)
00426             {
00427              lcd.SetTextColor(LCD_COLOR_GREEN);
00428              lcd.FillRect(230,198,24,50);
00429             }
00430             if(beat[page-1][4]==0)
00431             {
00432              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00433              lcd.FillRect(274,198,24,50);
00434             }
00435             if(beat[page-1][4]==1)
00436             {
00437              lcd.SetTextColor(LCD_COLOR_GREEN);
00438              lcd.FillRect(274,198,24,50);
00439             }
00440             if(beat[page-1][5]==0)
00441             {
00442              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00443              lcd.FillRect(318,198,24,50);
00444             }
00445             if(beat[page-1][5]==1)
00446             {
00447              lcd.SetTextColor(LCD_COLOR_GREEN);
00448              lcd.FillRect(318,198,24,50);
00449             }
00450             if(beat[page-1][6]==0)
00451             {
00452              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00453              lcd.FillRect(362,198,24,50);
00454             }
00455             if(beat[page-1][6]==1)
00456             {
00457              lcd.SetTextColor(LCD_COLOR_GREEN);
00458              lcd.FillRect(362,198,24,50);
00459             }
00460             if(beat[page-1][7]==0)
00461             {
00462              lcd.SetTextColor(LCD_COLOR_LIGHTRED);
00463              lcd.FillRect(406,198,24,50);    
00464             }
00465             if(beat[page-1][7]==1)
00466             {
00467              lcd.SetTextColor(LCD_COLOR_GREEN);
00468              lcd.FillRect(406,198,24,50);    
00469             }
00470 
00471   }
00472