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: TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG
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
Generated on Tue Jul 19 2022 23:39:49 by
1.7.2