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

Dependencies:   mbed mbed-rtos UTouch_vyrobek UniGraphic

Revision:
11:4ca8388080c6
Parent:
10:0176705be216
Child:
12:9bc02f9e16e3
--- a/display.cpp	Sun Jan 16 12:06:03 2022 +0000
+++ b/display.cpp	Tue Feb 01 13:37:40 2022 +0000
@@ -1,24 +1,36 @@
 #include "display.h"
-#include "rtos.h"
+
 
-UTouch touch(D4,D9,D3,D2,D5);//clk,chip_select,MOSI,miso,irq
-ILI9341 spi(SPI_8,320000000,PTD2,PTD3,PTD1,PTC12, PTC3, PTC2, "TFT",240,320);// mosi, miso, sclk, chip_select, reset, dc
+UTouch touch(D5,D4,D3,D2,D1);//clk,chip_select,MOSI,miso,irq
+ILI9341 spi(SPI_8,320000000,PTD2,PTD3,PTD1,PTE24, PTE25, PTC4, "TFT",240,320);// mosi, miso, sclk, chip_select, reset, dc
 DigitalOut my_green(LED2);
 DigitalOut my_red(LED4);
 DigitalOut my_blue(LED3);
 DigitalOut led2(LED2);
 Thread thread;
+Thread thread_h;
 PwmOut br(D10);
 
+
+
+PwmOut r(PTC10);
+PwmOut g(PTC3);
+PwmOut b(PTC2);
+
+float led_jas = 80;
 float lcd_jas = 0.50f;
-int jas[] = {Green,Red};
+int jas[] = {Cyan,White};
 int jas_s = 2;
 int jazyk_s = 0;
 int cas_hodiny = 0;
 int cas_minuty = 0;
+int cas_hodiny_on = 0;
+int cas_minuty_on = 0;
+int cas_hodiny_off = 0;
+int cas_minuty_off = 0;
 int cas_nastavit = 1037059200;
-int time_on = 1037074920;
-int time_off = 1037075100;
+int time_on = 1037059200;
+int time_off = 1037059200;
 int lang = 0;
 char minutka[32];
 char hodinka[32];
@@ -51,17 +63,27 @@
               }
     
     }
-
+    
+void send_color(float color_r = 255,float color_g = 255, float color_b = 255, float brightness = 0){
+    
+    brightness = 100 - brightness;
+    
+    color_r = color_r * 0.00387855; //příklad 255*0,0039 se rovná 0.9945 což znamená že je to 1 barevný bod; 0.9945 vezmeme a vynásobíme 0,0039 což nám vznikne tady toto, funguje to nevim jak to funguje
+    color_g = color_g * 0.00387855; // example 255*0,0039 equals to 0.9945 which means that this is one color point out of 255; we take the 0.9945 and multiply it by 0,0039 which results to this, it works I dunno how
+    color_b = color_b * 0.00387855;
+    
+    color_r = color_r - ((color_r*0.01)*brightness); //jas vypocitame tak ze si vezmeme kolik je jedno procento vybraných barevných bodů a to vynásobíme cislem jak moc chceme omezit tento jas
+    color_g = color_g - ((color_g*0.01)*brightness); //we calculate the brightness by taking the choosen color points and getting how much is 1% then we just make it how much do we want to lower the brightness
+    color_b = color_b - ((color_b*0.01)*brightness);
+    write_color(color_r,color_g,color_b);
+    }
 
-void led2_thread()
-{
-    while (true) {
-        led2 = !led2;
-        Thread::wait(1000);
-    }
+void write_color(float red,float green, float blue){
+    r.write(red);
+    g.write(green);
+    b.write(blue);
 }
 
-
 /*
  v ILI9341.cpp zmeneny framerate ze 70 na 100, toto pomohlo problemu blikání displeje
  velikost fotky pro čudlik 180x70
@@ -69,14 +91,11 @@
 
 4x doprava jas pro cudliky v menu
 
-
+predelat na konci jmena cudliku
 */
 
 
-void grafika(unsigned short int press = 0){  
-    int spodni_pravy[] = {239,200,320,240,Black};
-      
-      
+void grafika(unsigned short int press = 0){   
      switch(press)
 {
     case 1:
@@ -105,20 +124,17 @@
         spi.Bitmap(274,140,46,26,(unsigned char*)gImage_spodek);           
         break;
     case 3:
-        spi.Bitmap(0,200,80,40,(unsigned char*)gImage_spodni_levy);
+        spi.fillrect(0,200,106,240,Black);
+    spi.Bitmap(13,200,80,40,(unsigned char*)gImage_spodni_levy);
         break;
     case 4:
-        spi.Bitmap(80,200,80,40,(unsigned char*)gImage_stredni_levy);        
+        spi.fillrect(107,200,213,240,Black);
+    spi.Bitmap(120,200,80,40,(unsigned char*)gImage_stredni_levy);//prostredni       
         break;        
     case 5:
-        spi.Bitmap(160,200,80,40,(unsigned char*)gImage_stredni_pravy);
-        break;        
-    case 6:
-        spi.fillrect(spodni_pravy[0],spodni_pravy[1],spodni_pravy[2],spodni_pravy[3],spodni_pravy[4]);                //pravy kraj spodni
-        break;           
-    case 8:
-        spi.Bitmap(0,200,80,40,(unsigned char*)gImage_spodni_levy);    
-        break;
+        spi.fillrect(214,200,320,240,Black);
+    spi.Bitmap(227,200,80,40,(unsigned char*)gImage_stredni_pravy);//pravy spodni
+        break;                  
         
     default:
    spi.Bitmap(46,0,228,200,(unsigned char*)gImage_pozadi);
@@ -138,12 +154,15 @@
         spi.Bitmap(0,114,46,26,(unsigned char*)gImage_spodek);
         spi.Bitmap(0,140,46,26,(unsigned char*)gImage_spodek);
           
-
-    //spi.Bitmap(160,200,80,40,(unsigned char*)gImage_stredni_levy);                                        
-    spi.Bitmap(0,200,80,40,(unsigned char*)gImage_spodni_levy);
-    spi.Bitmap(80,200,80,40,(unsigned char*)gImage_stredni_levy);
-    spi.Bitmap(160,200,80,40,(unsigned char*)gImage_stredni_pravy);           //stred pravy spodni
-    spi.fillrect(spodni_pravy[0],spodni_pravy[1],spodni_pravy[2],spodni_pravy[3],spodni_pravy[4]);                //pravy kraj spodni
+    spi.fillrect(0,200,106,240,Black);
+    spi.Bitmap(13,200,80,40,(unsigned char*)gImage_spodni_levy);
+    
+    spi.fillrect(107,200,213,240,Black);
+    spi.Bitmap(120,200,80,40,(unsigned char*)gImage_stredni_levy);//prostredni
+    
+    spi.fillrect(214,200,320,240,Black);
+    spi.Bitmap(227,200,80,40,(unsigned char*)gImage_stredni_pravy);//pravy spodni
+    
 }  
 }
 
@@ -183,10 +202,9 @@
     int levy[] = {34,274,165,320}; //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}; // levy spodni cudlik
-    int stredni_levy[] = {200,160,240,239}; //stred levy spodni cudlik
-    int stredni_pravy[] = {200,80,240,158}; //stred pravy spodni cudlik
-    int spodni_pravy[] = {200,0,240,77}; // pravy spodni cudlik
+    int spodni_levy[] = {200,214,240,320}; // pravy spodni cudlik
+    int stredni_levy[] = {200,107,240,213}; //stred spodni cudlik
+    int stredni_pravy[] = {200,0,240,106}; //stred levy spodni cudlik
     
     int cudlik_1[] = {10,213,58,260};
     int cudlik_2[] = {10,137,58,184};
@@ -232,7 +250,6 @@
             hold();
               grafika(1);
               Menu(m);
-               wait(0.2); 
             }
                    
             //pravý čudlik
@@ -256,22 +273,23 @@
             
             hold();
               grafika(2);
-              wait(0.2);
+
               Menu(m);
             }  
             //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])){
-            spi.Bitmap(0,200,80,40,(unsigned char*)gImage_spodni_levy_s);
+            spi.fillrect(0,200,106,240,Select);
+            spi.Bitmap(13,200,80,40,(unsigned char*)gImage_spodni_levy_s);
               
             hold();
                 
               grafika(9);
-              grafika(8);
+              grafika(3);
               grafika(7);
               nastaveni();
-               wait(0.2);
+
             }  
             //levý spodni čudlik
             
@@ -279,42 +297,29 @@
             //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])){
 
-            
-            spi.Bitmap(80,200,80,40,(unsigned char*)gImage_stredni_levy_s);
+            spi.fillrect(107,200,213,240,Select);
+            spi.Bitmap(120,200,80,40,(unsigned char*)gImage_stredni_levy_s);
 
             
-            thread.start(led2_thread);
+            on_off();
             
             hold();
               grafika(4);
-               wait(0.2);
+
             }
             //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])){
-            spi.Bitmap(160,200,80,40,(unsigned char*)gImage_stredni_pravy_s);
-            
-            thread.terminate();    
-            hold();
+            spi.fillrect(214,200,320,240,Select);
+            spi.Bitmap(227,200,80,40,(unsigned char*)gImage_stredni_pravy_s);
+             hold();
               grafika(5);
-               wait(0.2);
+            color_picker();
+        
             }  
             //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])){
-            
-            hold();
-            
-            spi.locate(255,210);
-            spi.printf("%s",buffer);
-            
-             // grafika(6);
-               wait(0.2);
-            } 
-            //kraj pravy spodni cudlik
           
 //MENU CUDLIKY**********************************************************************************************************************************************************************************
             //prvni
@@ -411,28 +416,20 @@
     }
 
 void Static(){
-    int red1[] = {213,76,260,124};
-    int green1[] = {137,76,184,124};
-    int blue1[] = {60,76,107,124};
-   
+
+    int green1[] = {109,40,212,143};
+    int green[] = {40,109,143,212};
     
-    int red[] = {76,213,124,260};
-    int green[] = {76,137,124,184};
-    int blue[] = {76,60,124,107};
-
-
+    int stredni_pravy[] = {200,0,240,106}; //stred levy spodni cudlik
     int pravy[] = {34,0,165,46}; //pravý čudlík
     int levy[] = {34,274,165,320}; //levý čudlík
     
     spi.Bitmap(46,0,228,200,(unsigned char*)gImage_pozadi);
-    spi.fillrect(red1[0],red1[1],red1[2],red1[3],Red); 
-    spi.fillrect(green1[0],green1[1],green1[2],green1[3],Green);
-    spi.fillrect(blue1[0],blue1[1],blue1[2],blue1[3],Blue); 
+
+    spi.fillrect(green1[0],green1[1],green1[2],green1[3],White);
+
+    int color_pick = White;
     
-    
-    int r = 1;
-    int g = 1;
-    int b = 1;
     while(1)
     {
       if (touch.DataAvailable())
@@ -452,13 +449,51 @@
             spi.Bitmap(274,140,46,26,(unsigned char*)gImage_spodek_s);
             //GRAFIKA**************************************************
             hold();
-            my_red = r;
-            my_green = g;
-            my_blue = b;
+            thread.terminate();
+            switch (color_pick){
+    case Red:
+     send_color(255,0,0,led_jas);
+      break;
+    case Orange:
+      send_color(255,128,0,led_jas);
+      break;
+    case Yellow:
+     send_color(255,255,0,led_jas);
+      break;
+    case GreenYellow:
+      send_color(127,255,0,led_jas);
+      break;
+    case Green:
+     send_color(0,255,0,led_jas);
+      break;
+    case White:
+      send_color(255,255,255,led_jas);
+      break;
+    case Cyan:
+     send_color(0,255,255,led_jas);
+      break;
+    case DarkCyan:
+     send_color(0,127,255,led_jas);
+      break;
+    case Blue:
+     send_color(0,0,255,led_jas);
+      break;
+    case Purple:
+    send_color(127,0,255,led_jas);
+      break;
+    case Magenta:
+     send_color(255,0,255,led_jas);
+      break;
+    case Pink:
+     send_color(255,0,127,led_jas);
+      break;
+    default:
+    send_color(255,255,255,led_jas);
+}
+     
               grafika(1);
               grafika(2);
               Menu();
-            wait(0.2); 
             }       
             //pravý čudlik
             
@@ -474,38 +509,153 @@
             hold();
               grafika(2);
               grafika(1);
-              wait(0.2);
               Menu();
             }  
             //levý čudlik
           
-if((touch_x > red[0]) && (touch_x < red[2]) && (touch_y < red[3]) && (touch_y > red[1])){
-            hold();   
-            r = !r;
-            printf("%d",r); 
-            wait(0.2);     
-}
-
+          //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])){
+            spi.fillrect(214,200,320,240,Select);
+            spi.Bitmap(227,200,80,40,(unsigned char*)gImage_stredni_pravy_s);
+             hold();
+              grafika(5);
+            color_picker();
+        
+            }  
+            //stred pravy spodni cudlik
+          
 if((touch_x > green[0]) && (touch_x < green[2]) && (touch_y < green[3]) && (touch_y > green[1])){  
             hold(); 
-            g = !g;
-            printf("%d",g); 
-            wait(0.2);     
+            color_pick = color_picker(); 
+            spi.Bitmap(46,0,228,200,(unsigned char*)gImage_pozadi);
+            spi.fillrect(green1[0],green1[1],green1[2],green1[3],color_pick);  
+ 
 }
-
-if((touch_x > blue[0]) && (touch_x < blue[2]) && (touch_y < blue[3]) && (touch_y > blue[1])){
-            hold();   
-            b = !b;
-            printf("%d",b); 
-            wait(0.2);     
-}
-
          }
     } 
   }
 
 }
 
+int color_picker(){
+    
+    int pole1[] = {69,29,116,76};
+    int pole2[] = {117,29,163,76};
+    int pole3[] = {164,29,210,76};
+    int pole4[] = {211,29,257,76};
+    int pole5[] = {69,77,116,123};
+    int pole6[] = {117,77,163,123};
+    int pole7[] = {164,77,210,123};
+    int pole8[] = {211,77,257,123};
+    int pole9[] = {69,124,116,170};
+    int pole10[] = {117,124,163,170};
+    int pole11[] = {164,124,210,170};
+    int pole12[] = {211,124,257,170};
+    
+    
+    int pole4t[] = {29,69,76,116};
+    int pole3t[] = {29,117,76,163};
+    int pole2t[] = {29,164,76,210};
+    int pole1t[] = {29,211,76,257};
+    int pole8t[] = {77,69,123,116};
+    int pole7t[] = {77,117,123,163};
+    int pole6t[] = {77,164,123,210};
+    int pole5t[] = {77,211,123,257};
+    int pole12t[] = {124,69,170,116};
+    int pole11t[] = {124,117,170,163};
+    int pole10t[] = {124,164,170,210};
+    int pole9t[] = {124,211,170,257};
+    
+    spi.Bitmap(46,0,228,200,(unsigned char*)gImage_pozadi);
+    spi.fillrect(pole1[0],pole1[1],pole1[2],pole1[3],Red); 
+    spi.fillrect(pole2[0],pole2[1],pole2[2],pole2[3],Orange);
+    spi.fillrect(pole3[0],pole3[1],pole3[2],pole3[3],Yellow); 
+    spi.fillrect(pole4[0],pole4[1],pole4[2],pole4[3],GreenYellow);
+    spi.fillrect(pole5[0],pole5[1],pole5[2],pole5[3],Green); 
+    spi.fillrect(pole6[0],pole6[1],pole6[2],pole6[3],White);
+    spi.fillrect(pole7[0],pole7[1],pole7[2],pole7[3],Cyan); 
+    spi.fillrect(pole8[0],pole8[1],pole8[2],pole8[3],DarkCyan);
+    spi.fillrect(pole9[0],pole9[1],pole9[2],pole9[3],Blue); 
+    spi.fillrect(pole10[0],pole10[1],pole10[2],pole10[3],Purple);
+    spi.fillrect(pole11[0],pole11[1],pole11[2],pole11[3],Magenta); 
+    spi.fillrect(pole12[0],pole12[1],pole12[2],pole12[3],Pink); 
+    
+
+    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
+     
+if((touch_x > pole1t[0]) && (touch_x < pole1t[2]) && (touch_y < pole1t[3]) && (touch_y > pole1t[1])){
+            hold();
+            return Red;   
+}
+
+if((touch_x > pole2t[0]) && (touch_x < pole2t[2]) && (touch_y < pole2t[3]) && (touch_y > pole2t[1])){  
+            hold(); 
+            return Orange;   
+}
+
+if((touch_x > pole3t[0]) && (touch_x < pole3t[2]) && (touch_y < pole3t[3]) && (touch_y > pole3t[1])){
+            hold();   
+            return Yellow;      
+}
+
+if((touch_x > pole4t[0]) && (touch_x < pole4t[2]) && (touch_y < pole4t[3]) && (touch_y > pole4t[1])){
+            hold();
+           return GreenYellow;    
+}
+
+if((touch_x > pole5t[0]) && (touch_x < pole5t[2]) && (touch_y < pole5t[3]) && (touch_y > pole5t[1])){
+            hold();
+            return Green;      
+}
+
+if((touch_x > pole6t[0]) && (touch_x < pole6t[2]) && (touch_y < pole6t[3]) && (touch_y > pole6t[1])){
+            hold();
+            return White;    
+}
+
+if((touch_x > pole7t[0]) && (touch_x < pole7t[2]) && (touch_y < pole7t[3]) && (touch_y > pole7t[1])){
+            hold();
+            return Cyan;   
+}
+
+if((touch_x > pole8t[0]) && (touch_x < pole8t[2]) && (touch_y < pole8t[3]) && (touch_y > pole8t[1])){
+            hold();
+            return DarkCyan;    
+}
+
+if((touch_x > pole9t[0]) && (touch_x < pole9t[2]) && (touch_y < pole9t[3]) && (touch_y > pole9t[1])){
+            hold();
+            return Blue;    
+}
+
+if((touch_x > pole10t[0]) && (touch_x < pole10t[2]) && (touch_y < pole10t[3]) && (touch_y > pole10t[1])){
+            hold();
+            return Purple;    
+}
+
+if((touch_x > pole11t[0]) && (touch_x < pole11t[2]) && (touch_y < pole11t[3]) && (touch_y > pole11t[1])){
+            hold();
+            return Magenta;    
+}
+
+if((touch_x > pole12t[0]) && (touch_x < pole12t[2]) && (touch_y < pole12t[3]) && (touch_y > pole12t[1])){
+            hold();
+            return Pink;    
+}
+         }
+    } 
+  }
+
+}
+
+
 void nastaveni(){   
     int pravy[] = {34,0,165,46}; //pravý čudlík
     int levy[] = {34,274,165,320}; //levý čudlík
@@ -789,7 +939,424 @@
 }
 }
 
+void on_off(){
+    int pravy[] = {34,0,165,46}; //pravý čudlík
+    int levy[] = {34,274,165,320}; //levý čudlík
+    
+    int up1[] = {172,28,258,57};  
+    int down1[] = {172,142,258,171};  
+    
+    int up2[] = {62,28,148,57};  
+    int down2[] = {62,142,148,171};    
+    
+    bool a = true;  
+    
+    cas_hodiny_on = 0; 
+    cas_minuty_on = 0; 
+    cas_hodiny_off = 0; 
+    cas_minuty_off = 0; 
+    
+    int h1_on = cas_hodiny_on / 10;
+    int h2_on = cas_hodiny_on % 10;
 
+    int h1_off = cas_hodiny_off / 10;
+    int h2_off = cas_hodiny_off % 10;
+
+    char cisla[10][3] = {
+                         "0",
+                         "1",
+                         "2",
+                         "3",
+                         "4",
+                         "5",
+                         "6",
+                         "7",
+                         "8",
+                         "9"
+                     };
+
+    int m1_on = cas_minuty_on / 10;
+    int m2_on = cas_minuty_on % 10;
+    
+    int m1_off = cas_minuty_off / 10;
+    int m2_off = cas_minuty_off % 10;
+    
+    int blue1[] = {71,65,249,134};
+    int bar2[] = {159,200,320,240};
+    int bar1[] = {0,200,160,240};
+    
+    int b1[] = {200,159,240,320}; 
+    int b2[] = {200,0,240,160};
+    spi.Bitmap(46,0,228,200,(unsigned char*)gImage_pozadi);
+    spi.Bitmap(62,28,86,29,(unsigned char*)gImage_nahoru);
+    spi.Bitmap(62,142,86,29,(unsigned char*)gImage_dolu);
+        
+    spi.Bitmap(172,28,86,29,(unsigned char*)gImage_nahoru);
+    spi.Bitmap(172,142,86,29,(unsigned char*)gImage_dolu); 
+    
+    
+    spi.fillrect(bar1[0],bar1[1],bar1[2],bar1[3],Select);
+    spi.fillrect(bar2[0],bar2[1],bar2[2],bar2[3],Black);
+    spi.fillrect(blue1[0],blue1[1],blue1[2],blue1[3],MojeSeda);
+    
+    spi.set_font((unsigned char*) Arial21x21);
+    spi.background(Select);
+    spi.locate(55,210);
+    spi.printf(" ON");
+    spi.background(Black);
+    spi.locate(215,210);
+    spi.printf(" OFF");
+    
+    spi.set_font((unsigned char*) Arial48x47);
+    spi.background(MojeSeda);
+    spi.locate(80,80);
+    spi.printf(cisla[h1_on]);
+    spi.locate(110,80);
+    spi.printf(cisla[h2_on]);
+    spi.locate(155,80);
+    spi.printf(":");
+    spi.locate(189,80);
+    spi.printf(cisla[m1_on]);
+    spi.locate(219,80);
+    spi.printf(cisla[m2_on]);
+    
+    grafika(9);
+    grafika(7);
+    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
+         
+          //pravý čudlik
+            if ((touch_x > pravy[0]) && (touch_x < pravy[2]) && (touch_y < pravy[3]) && (touch_y > pravy[1])){
+            
+            //GRAFIKA**************************************************
+            spi.Bitmap(274,34,46,38,(unsigned char*)gImage_vrch_s);
+            spi.Bitmap(274,72,46,42,(unsigned char*)gImage_potvrdit_s);
+            spi.Bitmap(274,114,46,26,(unsigned char*)gImage_spodek_s);
+            spi.Bitmap(274,140,46,26,(unsigned char*)gImage_spodek_s);
+            //GRAFIKA**************************************************
+            hold();
+             
+             time_on = 1037059200 + (cas_hodiny_on * 3600) +  (cas_minuty_on * 60);
+             time_off = 1037059200 + (cas_hodiny_off * 3600) +  (cas_minuty_off * 60);
+              
+              grafika();
+              Button();
+            wait(0.2); 
+            }       
+            //pravý čudlik
+            
+            //levý čudlik 
+            if ((touch_x > levy[0]) && (touch_x < levy[2]) && (touch_y < levy[3]) && (touch_y > levy[1])){
+            //GRAFIKA**************************************************
+        spi.Bitmap(0,34,46,38,(unsigned char*)gImage_vrch_s);
+        spi.Bitmap(0,72,46,42,(unsigned char*)gImage_zrusit_s);// levy
+        spi.Bitmap(0,114,46,26,(unsigned char*)gImage_spodek_s);
+        spi.Bitmap(0,140,46,26,(unsigned char*)gImage_spodek_s);
+            //GRAFIKA**************************************************
+            
+            hold();
+              grafika();
+              Button();
+            wait(0.2);
+            }  
+            //levý čudlik
+            
+            //ON 
+            if ((touch_x > b1[0]) && (touch_x < b1[2]) && (touch_y < b1[3]) && (touch_y > b1[1])){
+           
+            spi.fillrect(bar1[0],bar1[1],bar1[2],bar1[3],Select);
+            spi.set_font((unsigned char*) Arial21x21);
+            spi.background(Select);
+            spi.locate(55,210);
+            spi.printf(" ON");  
+            
+              spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(80,80);
+              spi.printf(cisla[h1_on]);
+              spi.locate(110,80);
+              spi.printf(cisla[h2_on]);
+              spi.locate(189,80);
+              spi.printf(cisla[m1_on]);
+              spi.locate(219,80);
+              spi.printf(cisla[m2_on]);
+            
+            spi.fillrect(bar2[0],bar2[1],bar2[2],bar2[3],Black);
+            spi.set_font((unsigned char*) Arial21x21);
+            spi.background(Black);
+            spi.locate(215,210);
+            spi.printf(" OFF");
+            
+            a = true;
+            hold();
+            wait(0.2);
+            }  
+            //ON
+            
+            //OFF 
+            if ((touch_x > b2[0]) && (touch_x < b2[2]) && (touch_y < b2[3]) && (touch_y > b2[1])){
+            spi.fillrect(bar1[0],bar1[1],bar1[2],bar1[3],Black);
+            spi.set_font((unsigned char*) Arial21x21);
+            spi.background(Black);
+            spi.locate(55,210);
+            spi.printf(" ON");  
+            
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(80,80);
+              spi.printf(cisla[h1_off]);
+              spi.locate(110,80);
+              spi.printf(cisla[h2_off]);
+              spi.locate(189,80);
+              spi.printf(cisla[m1_off]);
+              spi.locate(219,80);
+              spi.printf(cisla[m2_off]);
+            
+            
+            spi.fillrect(bar2[0],bar2[1],bar2[2],bar2[3],Select);
+            spi.set_font((unsigned char*) Arial21x21);
+            spi.background(Select);
+            spi.locate(215,210);
+            spi.printf(" OFF");
+            a = false;
+            hold();
+            wait(0.2);
+            }  
+            //OFF
+            
+if(a == true){////////////////////////////////////ON
+if((touch_x > up1[1]) && (touch_x < up1[3]) && (touch_y < up1[2]) && (touch_y > up1[0])){
+            spi.Bitmap(62,28,86,29,(unsigned char*)gImage_nahoru_s);
+     while ((touch.DataAvailable()) && (h2_on < 10)){
+            h2_on++;
+            cas_hodiny_on++;
+            if(cas_hodiny_on == 24){
+            cas_hodiny_on = 0;
+            }
+            if(h2_on == 10){
+            h2_on = 0;
+            h1_on++;
+            }
+            if((h1_on == 2)&&(h2_on == 4)){
+            h2_on = 0;
+            h1_on = 0;
+            }
+             spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(80,80);
+              spi.printf(cisla[h1_on]);
+              spi.locate(110,80);
+              spi.printf(cisla[h2_on]); 
+
+              
+              wait(0.1); 
+    }
+            spi.Bitmap(62,28,86,29,(unsigned char*)gImage_nahoru);     
+}
+if((touch_x > down1[1]) && (touch_x < down1[3]) && (touch_y < down1[2]) && (touch_y > down1[0])){
+            spi.Bitmap(62,142,86,29,(unsigned char*)gImage_dolu_s); 
+    while ((touch.DataAvailable()) && (h2_on < 10)){
+            h2_on--;
+            if((h2_on < 0)&&(h1_on == 0)){
+            h2_on = 3;
+            h1_on = 2;
+            }
+            if(h2_on < 0){
+            h2_on = 9;
+            h1_on--;
+            }
+            cas_hodiny_on--;
+            if(cas_hodiny_on < 0){
+            cas_hodiny_on = 23;
+            }
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(80,80);
+              spi.printf(cisla[h1_on]);
+              spi.locate(110,80);
+              spi.printf(cisla[h2_on]);
+            wait(0.1);
+    }
+            spi.Bitmap(62,142,86,29,(unsigned char*)gImage_dolu); 
+} 
+if((touch_x > up2[1]) && (touch_x < up2[3]) && (touch_y < up2[2]) && (touch_y > up2[0])){
+            spi.Bitmap(172,28,86,29,(unsigned char*)gImage_nahoru_s);
+    while ((touch.DataAvailable()) && (m2_on < 10)){
+            m2_on++;
+            cas_minuty_on++;
+            if(cas_minuty_on == 60){
+            cas_minuty_on = 0;
+            }
+            if((m1_on == 5)&&(m2_on == 10)){
+            m2_on = 0;
+            m1_on = 0;
+            }
+            if(m2_on == 10){
+            m2_on = 0;
+            m1_on++;
+            }
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(189,80);
+              spi.printf(cisla[m1_on]);
+              spi.locate(219,80);
+              spi.printf(cisla[m2_on]);
+            wait(0.1);
+    }
+            
+            spi.Bitmap(172,28,86,29,(unsigned char*)gImage_nahoru);    
+}
+if((touch_x > down2[1]) && (touch_x < down2[3]) && (touch_y < down2[2]) && (touch_y > down2[0])){
+            spi.Bitmap(172,142,86,29,(unsigned char*)gImage_dolu_s); 
+    while ((touch.DataAvailable()) && (m2_on < 10)){
+            m2_on--;
+            if((m2_on < 0)&&(m1_on == 0)){
+            m2_on = 9;
+            m1_on = 5;
+            }
+            if(m2_on < 0){
+            m2_on = 9;
+            m1_on--;
+            }
+            cas_minuty_on--;
+            if(cas_minuty_on < 0){
+            cas_minuty_on = 59;
+            }
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(189,80);
+              spi.printf(cisla[m1_on]);
+              spi.locate(219,80);
+              spi.printf(cisla[m2_on]);
+            wait(0.1);
+    }
+            
+            spi.Bitmap(172,142,86,29,(unsigned char*)gImage_dolu);   
+} 
+            
+}
+else{////////////////////////////////////OFF
+if((touch_x > up1[1]) && (touch_x < up1[3]) && (touch_y < up1[2]) && (touch_y > up1[0])){
+            spi.Bitmap(62,28,86,29,(unsigned char*)gImage_nahoru_s);
+     while ((touch.DataAvailable()) && (h2_off < 10)){
+            h2_off++;
+            cas_hodiny_off++;
+            if(cas_hodiny_off == 24){
+            cas_hodiny_off = 0;
+            }
+            if(h2_off == 10){
+            h2_off = 0;
+            h1_off++;
+            }
+            if((h1_off == 2)&&(h2_off == 4)){
+            h2_off = 0;
+            h1_off = 0;
+            }
+             spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(80,80);
+              spi.printf(cisla[h1_off]);
+              spi.locate(110,80);
+              spi.printf(cisla[h2_off]); 
+
+              
+              wait(0.1); 
+    }
+            spi.Bitmap(62,28,86,29,(unsigned char*)gImage_nahoru);     
+}
+if((touch_x > down1[1]) && (touch_x < down1[3]) && (touch_y < down1[2]) && (touch_y > down1[0])){
+            spi.Bitmap(62,142,86,29,(unsigned char*)gImage_dolu_s); 
+    while ((touch.DataAvailable()) && (h2_off < 10)){
+            h2_off--;
+            if((h2_off < 0)&&(h1_off == 0)){
+            h2_off = 3;
+            h1_off = 2;
+            }
+            if(h2_off < 0){
+            h2_off = 9;
+            h1_off--;
+            }
+            cas_hodiny_off--;
+            if(cas_hodiny_off < 0){
+            cas_hodiny_off = 23;
+            }
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(80,80);
+              spi.printf(cisla[h1_off]);
+              spi.locate(110,80);
+              spi.printf(cisla[h2_off]);
+            wait(0.1);
+    }
+            spi.Bitmap(62,142,86,29,(unsigned char*)gImage_dolu); 
+} 
+if((touch_x > up2[1]) && (touch_x < up2[3]) && (touch_y < up2[2]) && (touch_y > up2[0])){
+            spi.Bitmap(172,28,86,29,(unsigned char*)gImage_nahoru_s);
+    while ((touch.DataAvailable()) && (m2_off < 10)){
+            m2_off++;
+            cas_minuty_off++;
+            if(cas_minuty_off == 60){
+            cas_minuty_off = 0;
+            }
+            if((m1_off == 5)&&(m2_off == 10)){
+            m2_off = 0;
+            m1_off = 0;
+            }
+            if(m2_off == 10){
+            m2_off = 0;
+            m1_off++;
+            }
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(189,80);
+              spi.printf(cisla[m1_off]);
+              spi.locate(219,80);
+              spi.printf(cisla[m2_off]);
+            wait(0.1);
+    }
+            
+            spi.Bitmap(172,28,86,29,(unsigned char*)gImage_nahoru);    
+}
+if((touch_x > down2[1]) && (touch_x < down2[3]) && (touch_y < down2[2]) && (touch_y > down2[0])){
+            spi.Bitmap(172,142,86,29,(unsigned char*)gImage_dolu_s); 
+    while ((touch.DataAvailable()) && (m2_off < 10)){
+            m2_off--;
+            if((m2_off < 0)&&(m1_off == 0)){
+            m2_off = 9;
+            m1_off = 5;
+            }
+            if(m2_off < 0){
+            m2_off = 9;
+            m1_off--;
+            }
+            cas_minuty_off--;
+            if(cas_minuty_off < 0){
+            cas_minuty_off = 59;
+            }
+            spi.set_font((unsigned char*) Arial48x47);
+              spi.background(MojeSeda);
+              spi.locate(189,80);
+              spi.printf(cisla[m1_off]);
+              spi.locate(219,80);
+              spi.printf(cisla[m2_off]);
+            wait(0.1);
+    }
+            
+            spi.Bitmap(172,142,86,29,(unsigned char*)gImage_dolu);   
+}    
+    
+}
+
+
+    }
+}
+}
+}
 
 void nastavit_hodiny(){
     int pravy[] = {34,0,165,46}; //pravý čudlík
@@ -869,9 +1436,9 @@
             spi.Bitmap(274,140,46,26,(unsigned char*)gImage_spodek_s);
             //GRAFIKA**************************************************
             hold();
-             thread.terminate();
+             thread_h.terminate();
              cas_nastavit = 1037059200 + (cas_hodiny * 3600) +  (cas_minuty * 60);
-             thread.start(hodiny);
+             thread_h.start(hodiny);
               grafika(9);
               nastaveni();
             wait(0.2); 
@@ -1028,6 +1595,9 @@
     }
 
 main(){
+r.period_us(1000);
+g.period_us(1000);
+b.period_us(1000);
 
 my_red = 1;
 my_green = 1;
@@ -1039,16 +1609,13 @@
     spi.background(Black);
     spi.foreground(White);
     spi.cls();
-
+    send_color(255,20,147,100);
 
     grafika();
     
     br.period_us(1000);
     br.write(lcd_jas);
 
-    
- /*   nastavit_hodiny();
-    thread.start(hodiny);*/
     Button();