11

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG

main.cpp

Committer:
chana_jo
Date:
2019-05-01
Revision:
0:d2b5a1e8fc0c
Child:
1:19138bfe23c9

File content as of revision 0:d2b5a1e8fc0c:

#include "mbed.h"
#include "TS_DISCO_F746NG.h"
#include "LCD_DISCO_F746NG.h"

DigitalOut led(LED1);
LCD_DISCO_F746NG lcd;
TS_DISCO_F746NG ts;
AnalogIn tempoknob(A1);
AnalogIn volumeknob(A0);

Serial pc(USBTX, USBRX);
Ticker re,er,rr,ee; //timer ไว้ attach ตอนplay audio กับไว้รับปุ่ม

int checkplay=1,beat[5][8],page=1;
char currentpage[50],tempochar[50],volumechar[50],strvolume[50],strtempo[50]; //สร้างไว้ให้เขียนอักษรได้เฉยๆ
float volume,tempo;
void test(void); //function for touchscreen
void play(void);// function for play
void screen(void);//function for display
void knob(void);// read knob

int main() 
{  
    lcd.Clear(LCD_COLOR_BLUE);
    ee.attach(&screen, 0.03);
    re.attach(&play, 0.1);//เล่นตามsamplerate
    er.attach(&test, 0.25);//กดช้ากดเร็วแล้วแต่
    rr.attach(&knob,0.5);//readknob ทุก0.5
}

void play() 
{
      if(checkplay==1)//led blink when button play is on
      {
      led=!led;
      }
      else if(checkplay==0)//led off
            {
                led=0;
            }
   
}
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(tempochar,"%1.1f",tempo);  
  sprintf(volumechar,"%1.1f",volume);  
  pc.printf("tempo =  %s \n\r",tempochar);  //print ในuart ถูก
  pc.printf("volume =  %s\n\r",volumechar);  
    
}
 
 
 
 
 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(tempochar,"%s",tempochar); ////////////////////////////////////////////display tempo on lcd ไม่ถูก
    lcd.SetTextColor(LCD_COLOR_BLACK);
    lcd.DisplayStringAt(24,LINE(2),(uint8_t*)tempochar,RIGHT_MODE);
    
    
   
    
       if(page==1) //พวกนี้คือแสดงหน้าว่าอยู่หน้าอะไร
        {
        sprintf(currentpage,"%s","Current page is Drum1");
        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 Drum2");
        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 Drum3");
        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 Drum4");
        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 Drum5");
        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);    
            }

  }