#1 Програмування Arduino » Arduino Mega2560 + LCD TFT TOUCH (ITDB32WS) - Многостраничное меню. » 2015-02-22 20:39:37

MishA555
відповідей: 0

Уважаемые форумчане. В програмировании я новичек. Вот прикупил Arduino Mega2560 + LCD TFT TOUCH. Все работает нормально. Теперь столкнулся с проблемой построения многостраничного меню. Есть главный экран с 8 кнопками. При нажатии должен происходить переход на следующее меню. Это все работает (запрограммирована только одна кнопка). Проблема в том, что при включении следующего меню не отключаються работающие координаты Touch предыдущего (главного) экрана. По примерам используються т.н. ID экранов. Но они почемуто не работают.

   Може

#include <UTFT.h>
#include <UTouch.h>
UTFT    myGLCD(NIC35WS,38,39,40,41);
UTouch  myTouch( 6, 5, 4, 3, 2);
extern uint8_t BigFont[];
extern uint8_t SmallFont[];
int x, y;  
byte menuID; 

void clearScreen(){ /
            myGLCD.setColor(0, 0, 0);          
            myGLCD.fillRect(0, 12, 399, 239);
            myGLCD.setColor(0, 0, 0);
    }

void dispScreen0(){      
  myGLCD.setFont(BigFont);   
// кнопка GRUPA 1
  myGLCD.setColor(58, 95, 205);           
  myGLCD.fillRoundRect(10, 35, 195, 70);  
  myGLCD.setColor(255, 255, 255);         
  myGLCD.setBackColor(58, 95, 205);       
  myGLCD.print("GRUPA 1", 52, 45);      
// кнопка GRUPA 2
  myGLCD.setColor(240, 0, 108);           
  myGLCD.fillRoundRect(10, 80, 195, 115); 
  myGLCD.setColor(255, 255, 255);         
  myGLCD.setBackColor(240, 0, 108);       
  myGLCD.print("GRUPA 2", 52, 90);        
// кнопка GRUPA 3
  myGLCD.setColor(90, 200, 0);             
  myGLCD.fillRoundRect(10, 125, 195, 160); 
  myGLCD.setColor(255, 255, 255);         
  myGLCD.setBackColor(90, 200, 0);        
  myGLCD.print("GRUPA 3", 52, 135);       
// кнопка GRUPA 4
  myGLCD.setColor(0, 0, 255);             
  myGLCD.fillRoundRect(10, 170, 195, 205); 
  myGLCD.setColor(255, 255, 255);          
  myGLCD.setBackColor(0, 0, 255);         
  myGLCD.print("GRUPA 4", 52, 180);     
// кнопка TIMER
  myGLCD.setColor(48, 89, 255);            
  myGLCD.fillRoundRect(205, 35, 390, 70);  
  myGLCD.setColor(255, 255, 255);         
  myGLCD.setBackColor(48, 89, 255);      
  myGLCD.print("TIMER", 230, 45);         
// кнопка XXXXXXXXXX
  myGLCD.setColor(248, 0, 37);            
  myGLCD.fillRoundRect(205, 80, 390, 115); 
  myGLCD.setColor(255, 255, 255);         
  myGLCD.setBackColor(248, 0, 37);         
  myGLCD.print("XXXXX", 230, 90);        
// кнопка XXXXXXXXX
  myGLCD.setColor(0, 224, 11);              
  myGLCD.fillRoundRect(205, 125, 390, 160); 
  myGLCD.setColor(255, 255, 255);        
  myGLCD.setBackColor(0, 224, 11);        
  myGLCD.print("XXXXX", 230, 135);         
// кнопка XXXXXXX
  myGLCD.setColor(0, 0, 255);              
  myGLCD.fillRoundRect(205, 170, 390, 205); 
  myGLCD.setColor(255, 255, 255);           
  myGLCD.setBackColor(0, 0, 255);       
  myGLCD.print("XXXXX", 230, 180);          
  delay(100);
 
  myGLCD.setColor(255, 255, 255);           
  myGLCD.drawRoundRect(10, 35, 195, 70);
  myGLCD.drawRoundRect(12, 37, 193, 68);
  myGLCD.drawRoundRect(10, 80, 195, 115);
  myGLCD.drawRoundRect(12, 82, 193, 113);
  myGLCD.drawRoundRect(10, 125, 195, 160);
  myGLCD.drawRoundRect(12, 127, 193, 158);
  myGLCD.drawRoundRect(10, 170, 195, 205);
  myGLCD.drawRoundRect(12, 172, 193, 203);
  myGLCD.drawRoundRect(205, 35, 390, 70);
  myGLCD.drawRoundRect(207, 37, 388, 68);
  myGLCD.drawRoundRect(205, 80, 390, 115);
  myGLCD.drawRoundRect(207, 82, 388, 113);
  myGLCD.drawRoundRect(205, 125, 390, 160);
  myGLCD.drawRoundRect(207, 127, 388, 158);
  myGLCD.drawRoundRect(205, 170, 390, 205);
  myGLCD.drawRoundRect(207, 172, 388, 203);
}

void dispScreen1(){     
       clearScreen();
       myGLCD.setColor(0, 0, 255);             
       myGLCD.fillRoundRect(15, 37, 65, 60);    
       myGLCD.fillRoundRect(79, 37, 129, 60);   
       myGLCD.fillRoundRect(143, 37, 193, 60);  
       myGLCD.fillRoundRect(207, 37, 257, 60);  
       myGLCD.fillRoundRect(271, 37, 321, 60);  
       myGLCD.fillRoundRect(335, 37, 385, 60);  

       myGLCD.setColor(255, 255, 255);
       myGLCD.drawRoundRect(15, 37, 65, 60);    
       myGLCD.drawRoundRect(79, 37, 129, 60);   
       myGLCD.drawRoundRect(143, 37, 193, 60);   
       myGLCD.drawRoundRect(207, 37, 257, 60);   
       myGLCD.drawRoundRect(271, 37, 321, 60);  
       myGLCD.drawRoundRect(335, 37, 385, 60);  

// кнопки ON
       myGLCD.setColor(70, 200, 0);            
       myGLCD.fillRoundRect(15, 66, 65, 94);     
       myGLCD.fillRoundRect(79, 66, 129, 94);    
       myGLCD.fillRoundRect(143, 66, 193, 94);  
       myGLCD.fillRoundRect(207, 66, 257, 94);  
       myGLCD.fillRoundRect(271, 66, 321, 94);  
       myGLCD.fillRoundRect(335, 66, 385, 94);  

       myGLCD.setColor(255, 255, 255);         
       myGLCD.drawRoundRect(15, 66, 65, 94);   
       myGLCD.drawRoundRect(79, 66, 129, 94);  
       myGLCD.drawRoundRect(143, 66, 193, 94);   
       myGLCD.drawRoundRect(207, 66, 257, 94);  
       myGLCD.drawRoundRect(271, 66, 321, 94);  
       myGLCD.drawRoundRect(335, 66, 385, 94);  

// размер рамки времени on
       myGLCD.setColor(255, 255, 255);          
       myGLCD.drawRoundRect(15, 96, 65, 128);    
       myGLCD.drawRoundRect(79, 96, 129, 128);   
       myGLCD.drawRoundRect(143, 96, 193, 128);   
       myGLCD.drawRoundRect(207, 96, 257, 128);  
       myGLCD.drawRoundRect(271, 96, 321, 128);   
       myGLCD.drawRoundRect(335, 96, 385, 128);   

// кнопки OFF
       myGLCD.setColor(255, 255, 255);             
    // myGLCD.setBackColor(255, 0, 0);             
       myGLCD.drawRoundRect(15, 137, 65, 165);     
       myGLCD.drawRoundRect(79, 137, 129, 165);    
       myGLCD.drawRoundRect(143, 137, 193, 165); 
       myGLCD.drawRoundRect(207, 137, 257, 165);   
       myGLCD.drawRoundRect(271, 137, 321, 165);  
       myGLCD.drawRoundRect(335, 137, 385, 165);  

       myGLCD.setColor(255, 0, 0);
       myGLCD.fillRoundRect(15, 138, 65, 164);      
       myGLCD.fillRoundRect(79, 138, 129, 164);   
       myGLCD.fillRoundRect(143, 138, 193, 164);   
       myGLCD.fillRoundRect(207, 138, 257, 164);  
       myGLCD.fillRoundRect(271, 138, 321, 164);  
       myGLCD.fillRoundRect(335, 138, 385, 164);   

       myGLCD.setColor(255, 255, 255);            
       myGLCD.drawRoundRect(15, 167, 65, 199);     
       myGLCD.drawRoundRect(79, 167, 129, 199);  
       myGLCD.drawRoundRect(143, 167, 193, 199);   
       myGLCD.drawRoundRect(207, 167, 257, 199);  
       myGLCD.drawRoundRect(271, 167, 321, 199);   
       myGLCD.drawRoundRect(335, 167, 385, 199);   

// рамка вокруг кнопки таймера
       myGLCD.setColor(130, 130, 130);             
       myGLCD.drawRoundRect(15, 35, 65, 201);      
       myGLCD.drawRoundRect(79, 35, 129, 201);    
       myGLCD.drawRoundRect(143, 35, 193, 201);  
       myGLCD.drawRoundRect(207, 35, 257, 201);  
       myGLCD.drawRoundRect(271, 35, 321, 201);   
       myGLCD.drawRoundRect(335, 35, 385, 201);   


      myGLCD.setColor(255, 255, 255); 
  //  myGLCD.setFont(BigFont);
      myGLCD.setFont(SmallFont);     
      myGLCD.setColor(255, 255, 255); 
      myGLCD.setBackColor(0, 0, 255); 
      myGLCD.print("Tim.1",20,45);
      myGLCD.print("Tim.2",84,45);
      myGLCD.print("Tim.3",148,45);
      myGLCD.print("Tim.4",212,45);
      myGLCD.print("Tim.5",276,45);
      myGLCD.print("Tim.6",340,45);
        myGLCD.setFont(BigFont);    
        myGLCD.setBackColor(70, 200, 0); 
      myGLCD.print("ON",22,73);
      myGLCD.print("ON",86,73);
      myGLCD.print("ON",150,73);
      myGLCD.print("ON",214,73);
      myGLCD.print("ON",278,73);
      myGLCD.print("ON",342,73);

        myGLCD.setBackColor(255, 0, 0);
      myGLCD.print("OFF",17,143);
      myGLCD.print("OFF",81,143);
      myGLCD.print("OFF",145,143);
      myGLCD.print("OFF",209,143);
      myGLCD.print("OFF",273,143);
      myGLCD.print("OFF",337,143);
      }

void waitForIt(int x1, int y1, int x2, int y2){ 
       myGLCD.setColor(255, 0, 0);
       myGLCD.drawRoundRect (x1, y1, x2, y2);
       while (myTouch.dataAvailable())
       myTouch.read();
       myGLCD.setColor(255, 255, 255);
       myGLCD.drawRoundRect (x1, y1, x2, y2);
     }

void setup(){
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
  myGLCD.setFont(BigFont);
  myGLCD.setBackColor(0, 0, 255);
  dispScreen0();

}

void loop(){  

    while (true)
  {
    if (myTouch.dataAvailable()){myTouch.read();x=myTouch.getX();y=myTouch.getY();
     //======================================
      if ((y>=35) && (y<=70)) {
         if ((x>=10) && (x<=195)){waitForIt(10, 35, 195, 70);clearScreen();dispScreen1();} // переход 
         if ((x>205) && (x<=390)){waitForIt(205, 35, 390, 70);}
      }
     //======================================
      if ((y>=80) && (y<=115)){
         if ((x>=10) && (x<=195)){waitForIt(10, 80, 195, 115);break;}
         if ((x>205) && (x<=390)){waitForIt(205, 80, 390, 115);break;}
      }
     //======================================
      if ((y>=125) && (y<=160)){
         if ((x>=10) && (x<=195)){waitForIt(10, 125, 195, 160);break;}
         if ((x>205) && (x<=390)){waitForIt(205, 125, 390, 160);break;}
      }
     //======================================
       if ((y>=170) && (y<=205)){
         if ((x>=10) && (x<=195)){waitForIt(10, 170, 195, 205);break;}
         if ((x>205) && (x<=390)){waitForIt(205, 170, 390, 205);break;}
       }
     }
   }

   //========================================

}

т кто-то подскажет, в чем моя ошибка. Еще раз повторяю - я новичек.

Підвал форуму