Toto je má konečná verze maturitního projektu

Dependencies:   mbed mbed-rtos UTouch_vyrobek UniGraphic

display.cpp

Committer:
smejky
Date:
2021-12-11
Revision:
4:c7ca936cdd1f
Parent:
3:dadb214885c1
Child:
5:7c757a7c97c5

File content as of revision 4:c7ca936cdd1f:

#include "mbed.h"
#include "UTouch.h"
#include "ILI9341.h"

UTouch touch(D4,D9,D3,D2,D5);//clk,chip_select,MOSI,miso,irq(pripojeno je ale nevim co to dela)
ILI9341 spi(SPI_8,320000000,PTD2,PTD3,PTD1,PTC12, PTC3, PTC2, "TFT",240,320);// mosi, miso, sclk, chip_select, reset, dc



/*
 v ILI9341.cpp zmeneny framerate ze 70 na 100, toto pomohlo problemu blikání displeje
 velikost fotky pro čudlik 180x70
x0 = od leveho horniho rohu(240max) y=0 od leveho horniho rohu x1 = od pravého spodniho rohu(240max) mel by byt vetsi nez x0 y1 = od pravého spodniho rohu mel by byt vetsi nez y0

*/

void grafika(unsigned short int press = 0){
    int pravy[] = {0,0,200,70,Blue};  
    int levy[] = {0,250,199,320,Blue};
    int cudlik[] = {20,80,38,130,Red};
    int spodni_levy[] = {200,240,240,320,Green};
    int stredni_levy[] = {200,159,240,239,Red};
    int stredni_pravy[] = {200,78,240,158,Purple};
    int spodni_pravy[] = {200,0,240,77,Yellow};  
      
     switch(press)
{
    case 1:
        spi.fillrect(pravy[0],pravy[1],pravy[2],pravy[3],pravy[4]);// pravy
        break;
    case 2:
        spi.fillrect(levy[0],levy[1],levy[2],levy[3],levy[4]);// levy
        break;
    case 3:
        spi.fillrect(spodni_levy[0],spodni_levy[1],spodni_levy[2],spodni_levy[3],spodni_levy[4]);// levy kraj spodni
        break;
    case 4:
        spi.fillrect(stredni_levy[0],stredni_levy[1],stredni_levy[2],stredni_levy[3],stredni_levy[4]);// stred levy spodni
        break;        
    case 5:
        spi.fillrect(stredni_pravy[0],stredni_pravy[1],stredni_pravy[2],stredni_pravy[3],stredni_pravy[4]);//stred pravy spodni
        break;        
    case 6:
        spi.fillrect(spodni_pravy[0],spodni_pravy[1],spodni_pravy[2],spodni_pravy[3],spodni_pravy[4]);                //pravy kraj spodni
        break;           
        
        
    default:
    spi.fillrect(pravy[0],pravy[1],pravy[2],pravy[3],pravy[4]);                //pravy
    spi.fillrect(0,140,180,71,Green);                                         //stred
    spi.fillrect(levy[0],levy[1],levy[2],levy[3],levy[4]);                   //levy
    spi.fillrect(spodni_levy[0],spodni_levy[1],spodni_levy[2],spodni_levy[3],spodni_levy[4]);                     //levy kraj spodni
    spi.fillrect(stredni_levy[0],stredni_levy[1],stredni_levy[2],stredni_levy[3],stredni_levy[4]);                //stred levy spodni
    spi.fillrect(stredni_pravy[0],stredni_pravy[1],stredni_pravy[2],stredni_pravy[3],stredni_pravy[4]);           //stred pravy spodni
    spi.fillrect(spodni_pravy[0],spodni_pravy[1],spodni_pravy[2],spodni_pravy[3],spodni_pravy[4]);                //pravy kraj spodni
}  
}

void malovani(){
    
    while(1==1)
    {
      if (touch.DataAvailable())
      {
        if(touch.Read())
        {
         unsigned short int touch_y = touch.GetX();
         unsigned short int  touch_x = touch.GetY();
         touch_x = touch_x - 10;
         touch_y = touch_y + 10;
         spi.pixel(touch_x,touch_y,Blue);           
        }
     }
    }
}

void Button(){
    int R_is_pressed = 0; //pro pravy čudlik
    int L_is_pressed = 0; //pro levy čudlik
    int Ls_is_pressed = 0; //pro levy spodni čudlik
    int Sl_is_pressed = 0; //pro levy stredni čudlik
    int Sr_is_pressed = 0; //pro pravy stredni čudlik
    int Rs_is_pressed = 0; //pro pravy spodni čudlik
    
    int pravy[] = {0,0,200,70,Black}; //pravý čudlík
    int levy[] = {0,250,199,320,Black}; //levý čudlík
    //int cudlik[] = {20,80,42,130,Orange}; //slider    nepovedeny projekt
    //int stred_cudliku[] = {30,105,Blue};  //střed čudliku
    int spodni_levy[] = {200,240,240,320,Red}; // levy spodni cudlik
    int stredni_levy[] = {200,159,240,239,Green}; //stred levy spodni cudlik
    int stredni_pravy[] = {200,78,240,158,Yellow}; //stred pravy spodni cudlik
    int spodni_pravy[] = {200,0,240,77,Purple}; // pravy spodni cudlik
    
    
    while(1)
    {
      if (touch.DataAvailable())
      {
        if(touch.Read())
        {
         unsigned short int touch_y = touch.GetX();  // 0-320
         unsigned short int  touch_x = touch.GetY(); // 0-240
         touch_x = touch_x - 5;
         touch_y = touch_y + 10;
         //spi.pixel(touch_x,touch_y,Blue);
         int pressure = touch.GetPressure();
         printf("x %d ,y %d\r\n",touch_x,touch_y);
         
            //pravý čudlik
            if ((touch_x > pravy[0]) && (touch_x < pravy[2]) && (touch_y < pravy[3]) && (touch_y > pravy[1]) && (R_is_pressed == 1)){
               grafika(R_is_pressed);
               R_is_pressed = 0;
               wait(0.3);  
               }else if ((touch_x > pravy[0]) && (touch_x < pravy[2]) && (touch_y < pravy[3]) && (touch_y > pravy [1])){
              R_is_pressed = 1;
              spi.fillrect(pravy[0],pravy[1],pravy[2],pravy[3],pravy[4]);
               wait(0.3);   
            } 
            //pravý čudlik
            
            //levý čudlik 
            if ((touch_x > levy[0]) && (touch_x < levy[2]) && (touch_y < levy[3]) && (touch_y > levy[1]) && (L_is_pressed == 2)){
               grafika(L_is_pressed);
               L_is_pressed = 0;
               wait(0.3);  
               }else if ((touch_x > levy[0]) && (touch_x < levy[2]) && (touch_y < levy[3]) && (touch_y > levy[1])){
              L_is_pressed = 2;
              spi.fillrect(levy[0],levy[1],levy[2],levy[3],levy[4]);
               wait(0.3);   
            } 
            //levý čudlik

            //levý spodni čudlik
            if ((touch_x > spodni_levy[0]) && (touch_x < spodni_levy[2]) && (touch_y < spodni_levy[3]) && (touch_y > spodni_levy[1]) && (Ls_is_pressed == 3)){
               grafika(Ls_is_pressed);
               Ls_is_pressed = 0;
               wait(0.3);  
               }else if ((touch_x > spodni_levy[0]) && (touch_x < spodni_levy[2]) && (touch_y < spodni_levy[3]) && (touch_y > spodni_levy[1])){
              Ls_is_pressed = 3;
              spi.fillrect(spodni_levy[0],spodni_levy[1],spodni_levy[2],spodni_levy[3],spodni_levy[4]);
               wait(0.3);   
            } 
            //levý spodni čudlik
            
            
            //stred levy spodni cudlik
            if ((touch_x > stredni_levy[0]) && (touch_x < stredni_levy[2]) && (touch_y < stredni_levy[3]) && (touch_y > stredni_levy[1]) && (Sl_is_pressed == 4)){
               grafika(Sl_is_pressed);
               Sl_is_pressed = 0;
               wait(0.3);  
               }else if ((touch_x > stredni_levy[0]) && (touch_x < stredni_levy[2]) && (touch_y < stredni_levy[3]) && (touch_y > stredni_levy[1])){
              Sl_is_pressed = 4;
              spi.fillrect(stredni_levy[0],stredni_levy[1],stredni_levy[2],stredni_levy[3],stredni_levy[4]);
               wait(0.3);   
            } 
            //stred levy spodni cudlik

                        
            //stred pravy spodni cudlik
            if ((touch_x > stredni_pravy[0]) && (touch_x < stredni_pravy[2]) && (touch_y < stredni_pravy[3]) && (touch_y > stredni_pravy[1]) && (Sr_is_pressed == 5)){
               grafika(Sr_is_pressed);
               Sr_is_pressed = 0;
               wait(0.3);  
               }else if ((touch_x > stredni_pravy[0]) && (touch_x < stredni_pravy[2]) && (touch_y < stredni_pravy[3]) && (touch_y > stredni_pravy[1])){
              Sr_is_pressed = 5;
              spi.fillrect(stredni_pravy[0],stredni_pravy[1],stredni_pravy[2],stredni_pravy[3],stredni_pravy[4]);
               wait(0.3);   
            } 
            //stred pravy spodni cudlik

            //kraj pravy spodni cudlik
            if ((touch_x > spodni_pravy[0]) && (touch_x < spodni_pravy[2]) && (touch_y < spodni_pravy[3]) && (touch_y > spodni_pravy[1]) && (Rs_is_pressed == 6)){
               grafika(Rs_is_pressed);
               Rs_is_pressed = 0;
               wait(0.3);  
               }else if ((touch_x > spodni_pravy[0]) && (touch_x < spodni_pravy[2]) && (touch_y < spodni_pravy[3]) && (touch_y > spodni_pravy[1])){
              Rs_is_pressed = 6;
              spi.fillrect(spodni_pravy[0],spodni_pravy[1],spodni_pravy[2],spodni_pravy[3],spodni_pravy[4]);
               wait(0.3);   
            } 
            //kraj pravy spodni cudlik


            
 
    

                      
        }
      }
    }    
}




main(){
    spi.FastWindow(true);
    touch.InitTouch();
    touch.SetPrecision(PREC_EXTREME);
    spi.background(White);
    spi.cls();
    //spi.circle(240,320,20,Black);
    
    grafika();
    Button();
    
    
}




/*  fail projekty













          //slider  
            if ((touch_x > cudlik[0]) && (touch_x < cudlik[2]) && (touch_y > cudlik[1]) && (touch_y < cudlik[3]) && (pressure > 0)){
            
            
        //if je udelany tady pro nastavení minima a maxima
           if ((touch_x > 25) && (touch_x < 140)){           
            
            unsigned short int y0 = cudlik[1];
            unsigned short int y1 = cudlik[3];      
            unsigned short int x_zadelavani_chyby = cudlik[0];
            unsigned short int x0 = x_zadelavani_chyby - 8;
              
              //printf("%d\r\n",touch_x);                  
              stred_cudliku[0] = touch_x;
              
              cudlik[0] = stred_cudliku[0] - 10;
              cudlik[1] = stred_cudliku[1] - 25;
              cudlik[2] = stred_cudliku[0] + 10;
              cudlik[3] = stred_cudliku[1] + 25;
              
                              
               
          if (touch_x > 34){    
              x0 = x_zadelavani_chyby + 8;
                spi.fillrect(x0,y0,x_zadelavani_chyby,y1,Green);
              
              }else{
spi.fillrect(x0,y0,x_zadelavani_chyby,y1,Black);
                  }
              
         if (touch_x < 34){    
              spi.fillrect(x0,y0,x_zadelavani_chyby,y1,Black);
              
              }else{
                x0 = x_zadelavani_chyby + 8;
                spi.fillrect(x0,y0,x_zadelavani_chyby,y1,Green);
                  }     
              spi.fillrect(cudlik[0],cudlik[1],cudlik[2],cudlik[3],cudlik[4]);
              
              
              
              }
            } 
            
            //slider */