Advertisement
deaphroat

weeduina01

Oct 18th, 2015
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 18.37 KB | None | 0 0
  1. //************************************************     ************************************************
  2. //************************************************     ************************************************
  3. //************************************** declaration ******************************************
  4. //************************************************     ************************************************
  5. //************************************************     ************************************************
  6.  
  7. #include "DHT.h"
  8. #include <UTFT.h>
  9. #include <UTouch.h>
  10. #include <UTFT_Buttons.h>
  11. #include <avr/pgmspace.h>
  12. #include <Wire.h>
  13. #include <RTClib.h>
  14. #include <EEPROM.h>
  15. #include <SPI.h>
  16. #include <SD.h>
  17. #include <TFT.h>
  18. #include <PinChangeInt.h>
  19.  
  20.  
  21. unsigned int selecteurPage = 0; //variable de sélection de menu pour l'interface tactile
  22. boolean  comptAff = false; // compteur d'affichage permet de ne pas rafraichir en permanence
  23.  
  24.  
  25. RTC_DS1307 RTC ;
  26.  
  27. #define DHTPIN 19     // what pin we're connected to
  28. #define DHTTYPE DHT22   // DHT 22  (AM2302)
  29.  
  30. DHT dht(DHTPIN, DHTTYPE);
  31.  
  32. UTFT myGLCD(SSD1289, 38, 39, 40, 41);
  33. UTouch  myTouch( 6, 5, 4, 3, 2);
  34.  
  35. UTFT_Buttons  myButtons(&myGLCD, &myTouch);
  36.  
  37. extern uint8_t SmallFont[];
  38. extern uint8_t BigFont[];
  39. extern uint8_t SevenSegNumFont[];
  40.  
  41. #define SET A8
  42. #define GAUCHE A9
  43. #define BAS A10
  44. #define DROITE A11
  45. #define HAUT A12
  46.  
  47. int ComptButtonYmax = 4 ;
  48. int ComptButtonX = 0;
  49. int ComptButtonY = 0;
  50.  
  51. boolean setbutton = false;
  52. int comptButton = 0 ;
  53.  
  54.  
  55.  
  56. int PinRelaisLight = 8;
  57. int PinRelaisFan = 9;
  58. int PinRelais_1 = 10;
  59.  
  60. #if defined(__AVR__)
  61. #define imagedatatype  unsigned int
  62. #elif defined(__PIC32MX__)
  63. #define imagedatatype  unsigned short
  64. #elif defined(__arm__)
  65. #define imagedatatype  unsigned short
  66. #endif
  67.  
  68. extern imagedatatype LogoLum[];
  69. extern imagedatatype LogoValider[];
  70. extern imagedatatype LogoVentil[];
  71. extern unsigned int Logo[0x3840];
  72. extern unsigned int LogoLum[0x640];
  73. extern unsigned int LogoRetour[0x640];
  74. extern unsigned int LogoValider[0x640];
  75. extern unsigned int LogoVentil[0x640];
  76.  
  77. //************************************************     ************************************************
  78. //************************************************     ************************************************
  79. //************************************* Fonctions principales *****************************************
  80. //************************************************     ************************************************
  81. //************************************************     ************************************************
  82.  
  83.  
  84. void setup()
  85. {
  86.   Serial.println("setup");
  87.  
  88.   Serial.begin(9600);
  89.  
  90.   initialisationPin() ;
  91.  
  92.   initialisationBus() ;
  93.  
  94.   initialisationScreen() ;
  95.  
  96.   initialisationRelais () ;
  97.  
  98.  
  99. }
  100.  
  101.  
  102. void loop()
  103. {
  104.   //Serial.println("loop");
  105.  
  106.   switch (selecteurPage)
  107.   {
  108.     case 0:
  109.       MenuPrincipal() ;
  110.       break;
  111.     case 1:
  112.       MenuLight() ;
  113.       break;
  114.     case 2:
  115.       MenuFan() ;
  116.       break;
  117.     case 3:
  118.       MenuIntraExtra() ;
  119.       break;
  120.     case 4:
  121.       MenuSetting() ;
  122.       break;
  123.     default :
  124.       MenuPrincipal();
  125.       break;
  126.   }
  127. }
  128.  
  129.  
  130. //************************************************     ************************************************
  131. //************************************************     ************************************************
  132. //***************************************** initialisation ********************************************
  133. //************************************************     ************************************************
  134. //************************************************     ************************************************
  135.  
  136. void initialisationBus()
  137. {
  138.   Serial.println("initialisationBus");
  139.  
  140.   Wire.begin(19);
  141.   RTC.begin();
  142.   dht.begin();
  143.   delay(20);
  144. }
  145.  
  146. void initialisationScreen()
  147. {
  148.   Serial.println("initialisationScreen");
  149.  
  150.   //myTouch.setPrecision(PREC_LOW);
  151.   myTouch.InitTouch();
  152.  
  153.   myGLCD.InitLCD();
  154.   delay(20);
  155.   myGLCD.clrScr();
  156.   delay(20);
  157.   myGLCD.fillScr(0, 102, 51);
  158.   //myGLCD.drawBitmap (100, 50, 120, 120, Logo, 1);
  159.   delay(20);
  160.   myGLCD.setFont(SmallFont);
  161.   myGLCD.setBackColor(0, 102, 51);
  162.   myGLCD.setColor(10, 50, 30);
  163.   myGLCD.print("- INITIALISATION -", CENTER, 195);
  164.   myGLCD.print("TACTILE", CENTER, 205);
  165.   myGLCD.print("I2C", CENTER, 215);
  166.  
  167. }
  168.  
  169. void initialisationPin()
  170. {
  171.   Serial.println("initialisationPin");
  172.  
  173.   pinMode(HAUT, INPUT_PULLUP);
  174.   pinMode(BAS, INPUT_PULLUP);
  175.   pinMode(GAUCHE, INPUT_PULLUP);
  176.   pinMode(DROITE, INPUT_PULLUP);
  177.   pinMode(SET, INPUT_PULLUP);
  178.  
  179.   attachPinChangeInterrupt(HAUT, haut, FALLING);
  180.   attachPinChangeInterrupt(BAS, bas, FALLING);
  181.   attachPinChangeInterrupt(GAUCHE, gauche, FALLING);
  182.   attachPinChangeInterrupt(DROITE, droite, FALLING);
  183.   attachPinChangeInterrupt(SET, set, FALLING);
  184.  
  185.   pinMode( PinRelaisLight, OUTPUT);
  186.   pinMode( PinRelaisFan, OUTPUT);
  187.   pinMode( PinRelais_1, OUTPUT);
  188. }
  189.  
  190. void initialisationRelais()
  191. {
  192.   Serial.println("initialisationRelais");
  193.   /*
  194.     if(EEPROMLecture(8) == 1)
  195.       {
  196.         digitalWrite(RelaisLight, HIGH);
  197.       }
  198.     else
  199.     {
  200.       digitalWrite(RelaisLight, LOW);
  201.     }
  202.  
  203.     if(EEPROMLecture(9) == 1)
  204.     {
  205.       digitalWrite(RelaisFan, HIGH);
  206.     }
  207.     else
  208.     {
  209.       digitalWrite(RelaisFan, LOW);
  210.     }
  211.  
  212.     if(EEPROMLecture(10) == 1)
  213.     {
  214.       digitalWrite(Relais_1, HIGH);
  215.     }
  216.     else
  217.     {
  218.       digitalWrite(Relais_1, LOW);
  219.     }
  220.     */
  221.   delay(20);
  222. }
  223.  
  224. //************************************************     ************************************************
  225. //************************************************     ************************************************
  226. //**************************************** Fonctions pages ********************************************
  227. //************************************************     ************************************************
  228. //************************************************     ************************************************
  229.  
  230. void MenuPrincipal()
  231. {
  232.   //Serial.println("MenuPrincipal");
  233.  
  234.  
  235.  
  236.   switch (comptAff)
  237.   {
  238.     case 0:
  239.       // Ici on trace, affiche, ce que l'on veut:
  240.       /// Exemple les zone de nos touches
  241.  
  242.  
  243.       myGLCD.clrScr();
  244.       myButtons.deleteAllButtons();
  245.       myGLCD.fillScr(0, 102, 51);
  246.       myButtons.setTextFont(SmallFont);
  247.       myButtons.setButtonColors(VGA_BLACK, VGA_GRAY, VGA_BLACK, VGA_BLACK, VGA_GREEN);
  248.  
  249.       int iconLum, iconRelais_1, iconRelais_2 , iconRelais_3 , iconSetting , pressed_button  ;
  250.      
  251.      
  252. Serial.println( "bouton"  ) ;
  253.       Serial.println(String( ComptButtonY )) ;
  254.      
  255.       iconLum = myButtons.addButton( 2 ,  197 , 40 , 40 , LogoLum ) ;
  256.       iconRelais_1 = myButtons.addButton( 44 , 197 , 40 , 40 , LogoVentil ) ;
  257.       iconRelais_2 = myButtons.addButton( 86 , 197 , 40 , 40 , LogoVentil ) ;
  258.       //iconRelais_3 = myButtons.addButton( 86 , 197 , 40 , 40 , LogoIntraExtra ) ;
  259.       iconSetting = myButtons.addButton( 128 , 197 , 40 , 40 , LogoVentil ) ;
  260.  
  261.       myButtons.drawButtons();
  262.       myGLCD.setFont(SmallFont);
  263.  
  264.  
  265.       comptAff = true; // on passe la variable d'affichage a vrai pour qu'au prochain cycle cette partie du code ne soit pas réécrite
  266.       break;
  267.  
  268.      
  269.  
  270.     case 1:
  271.       // Ici on affichera no variable :
  272.       // Exemple l'heure
  273.  
  274.      
  275.  
  276.  
  277.       // On test s'il y a appuis sur la zone situer au pixel 100,100 //de longueur 50pixel et de hauteur 30pixel
  278.       if (TestTouche( 2, 197, 40, 40) or checkButton() )
  279.       {
  280.         selecteurPage = 1; // on sélectionne la nouvelle page a aficher
  281.         comptAff = false; // on oublie pas de réinitialiser notre variable d'affichage
  282.         return;
  283.       }
  284.  
  285.       // on test s'il y a appuis sur la zone situer au pixel 200,200 //de longueur 50pixel et de hauteur 30pixel
  286.       if (TestTouche( 44, 197, 40, 40) == true )
  287.       {
  288.         selecteurPage = 2; // on sélectionne la nouvelle page a afficher
  289.         comptAff = false;
  290.         return;
  291.       }
  292.  
  293.       // On test s'il y a appuis sur la zone situer au pixel 100,100 //de longueur 50pixel et de hauteur 30pixel
  294.       if (TestTouche( 86, 197, 40, 40) == true )
  295.       {
  296.         selecteurPage = 3; // on sélectionne la nouvelle page a aficher
  297.         comptAff = false; // on oublie pas de réinitialiser notre variable d'affichage
  298.         return;
  299.       }
  300.  
  301.       // on test s'il y a appuis sur la zone situer au pixel 200,200 //de longueur 50pixel et de hauteur 30pixel
  302.       if (TestTouche( 128, 197, 40, 40) == true )
  303.       {
  304.         selecteurPage = 4; // on sélectionne la nouvelle page a afficher
  305.         comptAff = false;
  306.         return;
  307.       }
  308.  
  309.       break;
  310.   }
  311.   return;
  312.  
  313.   /*
  314.  
  315.   Ymax = 4;
  316.   X=0;
  317.   Y=0;
  318.  
  319.   myGLCD.clrScr();
  320.   myButtons.deleteAllButtons();
  321.   myGLCD.fillScr(0, 102, 51);
  322.   myButtons.setTextFont(SmallFont);
  323.   myButtons.setButtonColors(VGA_BLACK, VGA_GRAY, VGA_BLACK, VGA_BLACK, VGA_GREEN);
  324.  
  325.   int iconLum, iconRelais_1, iconRelais_2 , iconRelais_3 , iconSetting , pressed_button ;
  326.  
  327.   iconLum = myButtons.addButton( 2 ,  197 , 40 , 40 , LogoLum ) ;
  328.   iconRelais_1 = myButtons.addButton( 44 , 197 , 40 , 40 , LogoVentil ) ;
  329.   iconRelais_2 = myButtons.addButton( 86 , 197 , 40 , 40 , LogoVentil ) ;
  330.   //iconRelais_3 = myButtons.addButton( 86 , 197 , 40 , 40 , LogoIntraExtra ) ;
  331.   iconSetting = myButtons.addButton( 128 , 197 , 40 , 40 , LogoVentil ) ;
  332.  
  333.   myButtons.drawButtons();
  334.   myGLCD.setFont(SmallFont);
  335.  
  336.   while(1)
  337.    {
  338.     //Continue() ;
  339.  
  340.     //Serial.println("Continue");
  341.  
  342.  
  343.  
  344.    }
  345.  
  346.  
  347.  
  348.    */
  349.  
  350. }
  351.  
  352. bool checkButton(   )
  353. {
  354.   Serial.println("checkButton");
  355. Serial.println(String(ComptButtonY));
  356.  
  357.  
  358.   if ( ComptButtonY == 0 )
  359.   {
  360.      Serial.println("inBoucle0");
  361.      //myGLCD.clrScr();
  362.      //TracerCadre(52,  193, 40, 40, 0 ,102, 51);
  363.      myGLCD.setFont(SmallFont);
  364.      myGLCD.setColor(0,0,0);
  365.      myGLCD.print("Lumiere", 4, 4);
  366.      TracerCadre(4 ,195, 40, 40, 255, 0, 0);
  367.      
  368.      if( setbutton == true )
  369.      {
  370.       setbutton = false;
  371.       return true ;
  372.      }
  373.        
  374.   }
  375.   else if ( ComptButtonY == 1 )
  376.   {
  377.     Serial.println("inBoucle1");
  378.     //myGLCD.clrScr();
  379.      TracerCadre(4,  193, 40, 40, 0 ,102, 51);
  380.      delay(200);
  381.      myGLCD.setFont(SmallFont);
  382.      myGLCD.setColor(0,0,0);
  383.      myGLCD.print("fanbox", 4, 4);
  384.      TracerCadre(52 ,193, 40, 40, 255, 0, 0);
  385.      if(setbutton == true)
  386.      {
  387.       setbutton = false;
  388.       return true ;
  389.       }
  390.   }
  391.   else if ( ComptButtonY == 2 )
  392.   {
  393.     Serial.println("inBoucle2");
  394.     //myGLCD.clrScr();
  395.      TracerCadre(52,  193, 40, 40, 0 ,102, 51);
  396.      delay(200);
  397.      myGLCD.setFont(SmallFont);
  398.      myGLCD.setColor(0,0,0);
  399.      myGLCD.print("relai3", 4, 4);
  400.      TracerCadre(90 ,193, 40, 40, 255, 0, 0);
  401.      if(setbutton == true)
  402.      {
  403.       setbutton = false;
  404.       return true ;
  405.       }
  406.   }
  407.   else if ( ComptButtonY == 3 )
  408.   {
  409.     Serial.println("inBoucle3");
  410.     //myGLCD.clrScr();
  411.      TracerCadre(90,  193, 40, 40, 0 ,102, 51);
  412.      delay(200);
  413.      myGLCD.setFont(SmallFont);
  414.      myGLCD.setColor(0,0,0);
  415.      myGLCD.print("relai4", 4, 4);
  416.      TracerCadre(130 ,193, 40, 40, 255, 0, 0);
  417.      if(setbutton == true)
  418.      {
  419.       setbutton = false;
  420.       return true ;
  421.       }
  422.   }
  423.  
  424.   return false ;
  425. }
  426.  
  427. void MenuLight()
  428. {
  429.   Serial.println("MenuLight");
  430.  
  431.   myGLCD.clrScr();
  432.   myButtons.deleteAllButtons();
  433.   myGLCD.fillScr(0, 255, 0);
  434. }
  435.  
  436. void MenuFan()
  437. {
  438.   Serial.println("MenuFan");
  439.   myGLCD.clrScr();
  440.   myButtons.deleteAllButtons();
  441.   myGLCD.fillScr(255, 0, 0);
  442. }
  443.  
  444. void MenuIntraExtra()
  445. {
  446.   Serial.println("MenuIntraExtra");
  447.   myGLCD.clrScr();
  448.   myButtons.deleteAllButtons();
  449.   myGLCD.fillScr(0, 0, 255);
  450. }
  451.  
  452. void MenuSetting()
  453. {
  454.   Serial.println("MenuSetting");
  455.   myGLCD.clrScr();
  456.   myButtons.deleteAllButtons();
  457.   myGLCD.fillScr(255, 255, 0);
  458. }
  459.  
  460. void Continue()                                    //focntion qui tourne toujours en arriere plan
  461. {
  462.   DateTime now = RTC.now();
  463.   if (int(now.second()) == 30)
  464.   {
  465.  
  466.  
  467.     if (int(now.minute()) == 1 || int(now.minute()) == 15 || int(now.minute()) == 30 || int(now.minute()) == 45)
  468.       //if((int(now.minute()) % 2) ==0)
  469.     {
  470.       //MemoireGraph();
  471.       delay(960);
  472.     }
  473.  
  474.   }
  475.   myGLCD.setColor(0, 0, 0);
  476.   myGLCD.setFont(BigFont);
  477.   if ( now.hour() < 10)
  478.   {
  479.     myGLCD.print("0", 192, 2);
  480.     myGLCD.print(String(now.hour()), 208, 2);
  481.     myGLCD.print(":", 224, 2);
  482.   }
  483.   else
  484.   {
  485.     myGLCD.print(String(now.hour()), 192, 2);
  486.     myGLCD.print(":", 224, 2);
  487.   }
  488.  
  489.   if (now.minute() < 10)
  490.   {
  491.     myGLCD.print("0", 240, 2);
  492.     myGLCD.print(String(now.minute()), 256, 2);
  493.     myGLCD.print(":", 272, 2);
  494.   }
  495.   else
  496.   {
  497.     myGLCD.print(String(now.minute()), 240, 2);
  498.     myGLCD.print(":", 272, 2);
  499.   }
  500.  
  501.   if (now.second() < 10)
  502.   {
  503.     myGLCD.print("0", 288, 2);
  504.     myGLCD.print(String(now.second()), 304, 2);
  505.  
  506.   }
  507.   else
  508.   {
  509.     myGLCD.print(String(now.second()), 288, 2);
  510.  
  511.   }
  512.  
  513.   delay(20);
  514.   /*
  515.   int HeureOn = int(EEPROMLecture(0));
  516.   int HeureOff = int(EEPROMLecture(1));
  517.   int MinuteOn = int(EEPROMLecture(2));
  518.   int MinuteOff = int(EEPROMLecture(3));
  519.   int VentilTempOn = int(EEPROMLecture(4));
  520.   int VentilTempOff = int(EEPROMLecture(5));
  521.   int VentilHumOn = int(EEPROMLecture(6));
  522.   int VentilHumOff = int(EEPROMLecture(7));
  523.  
  524.  
  525.   if( int(now.hour()) == HeureOn  && int(now.minute()) == MinuteOn)
  526.    {
  527.     digitalWrite(RelaiLampe, HIGH);
  528.     EEPROMEcriture(1, 8);
  529.     }
  530.   if (int(now.hour()) == HeureOff  && int(now.minute()) == MinuteOff)
  531.    {
  532.     digitalWrite(RelaiLampe, LOW);
  533.     EEPROMEcriture(0, 8);
  534.    }
  535.  
  536.    if(dht.readHumidity() < VentilHumOn)
  537.    {
  538.      digitalWrite(RelaiVapo, HIGH);
  539.      EEPROMEcriture(1, 10);
  540.    }
  541.    else
  542.    {
  543.      digitalWrite(RelaiVapo, LOW);
  544.      EEPROMEcriture(0, 10);
  545.    }
  546.   */
  547. }
  548.  
  549. //************************************************     ************************************************
  550. //************************************************     ************************************************
  551. //************************************** Fonctions graphique ******************************************
  552. //************************************************     ************************************************
  553. //************************************************     ************************************************
  554.  
  555. void TracerCadre(int xpos, int ypos, int xlong, int ylong, int R, int G, int B)
  556. {
  557.   myGLCD.setColor(R, G, B);
  558.   myGLCD.drawRect(xpos - 1, ypos - 1, xpos + xlong + 1, ypos + ylong + 1);
  559.   myGLCD.drawRect(xpos - 2, ypos - 2, xpos + xlong + 2, ypos + ylong + 2);
  560.   myGLCD.drawRect(xpos - 3, ypos - 3, xpos + xlong + 3, ypos + ylong + 3);
  561.   myGLCD.drawRect(xpos - 4, ypos - 4, xpos + xlong + 4, ypos + ylong + 4);
  562. }
  563.  
  564. void TracerTriHaut(int xpos, int ypos, int R, int G, int B)
  565. {
  566.   for (int y = 0 ; y < 17; y++)
  567.   {
  568.     for (int x = 0 ; x < 15 ; x++)
  569.     {
  570.       myGLCD.setColor(R, G, B);
  571.       myGLCD.drawLine(xpos + y - 1, ypos - y, xpos + 32 - y, ypos - y);
  572.     }
  573.   }
  574. }
  575.  
  576. void TracerTriBas(int xpos, int ypos, int R, int G, int B)
  577. {
  578.   for (int y = 0 ; y < 17; y++)
  579.   {
  580.     for (int x = 0 ; x < 15 ; x++)
  581.     {
  582.       myGLCD.setColor(R, G, B);
  583.       myGLCD.drawLine(xpos + y - 1, ypos + y, xpos + 32 - y, ypos + y);
  584.     }
  585.   }
  586. }
  587.  
  588.  
  589. //************************************************     ************************************************
  590. //************************************************     ************************************************
  591. //************************************** Fonctions tactile ******************************************
  592. //************************************************     ************************************************
  593. //************************************************     ************************************************
  594.  
  595. boolean TestTouche( int zoneX, int zoneY, int Longueur, int hauteur)
  596. {
  597. Serial.println( "TestTouche" );
  598.   delay(500);
  599.  
  600.  
  601.  
  602.   int X, Y, testX, testY; // varriable
  603.  
  604.   if ( myTouch.dataAvailable() )// dataAvailable() est une fonction de la lib Utouch.h
  605.   {
  606.     myTouch.read();// read() est une fonction de la lib Utouch.h
  607.  
  608.     X = myTouch.getX();
  609.     Y = myTouch.getY(); // getX et getY() sont des fonction de la lib Utouch.h
  610.  
  611.     Serial.println( String( X ) );
  612.  
  613.  
  614.     //---- vérifie si appui sur la touche "+" ---------
  615.  
  616.     testX = abs(X - (zoneX + Longueur / 2)); // calcul valeur absolue de l'écart de X touchpad à la  Zone X centre touche
  617.     testY = abs(Y - (zoneY + hauteur / 2)); // calcul valeur absolue de l'écart de Y touchpad à la  Zone Y centre touche
  618.  
  619.    
  620.  
  621.  
  622.     if (testX < Longueur / 2 && testY < hauteur / 2)
  623.     {
  624.       return true;
  625.     }
  626.     else
  627.     {
  628.       return false;
  629.     }
  630.   }
  631.   return false;
  632. }
  633.  
  634.  
  635. //************************************************     ************************************************
  636. //************************************************     ************************************************
  637. //************************************** Fonctions joystique ******************************************
  638. //************************************************     ************************************************
  639. //************************************************     ************************************************
  640.  
  641.  
  642.  
  643. //************************************** HAUT ****************************************************
  644.  
  645. void haut()
  646. {
  647.   Serial.println("haut");
  648.   delay(200);
  649.   ComptButtonX++;
  650.   //Serial.print("Haut");
  651.  
  652. }
  653.  
  654.  
  655. //************************************** BAS ****************************************************
  656.  
  657. void bas()
  658. {
  659.   Serial.println("bas");
  660.   delay(200);
  661.   ComptButtonX--;
  662.  
  663. }
  664.  
  665. //************************************** GAUCHE ****************************************************
  666.  
  667. void gauche()
  668. {
  669.   Serial.println("gauche");
  670.   Serial.println(String(ComptButtonY));
  671.   delay(200);
  672.   if ( ComptButtonY > 0)
  673.   {
  674.     ComptButtonY--;
  675.   }
  676. }
  677.  
  678. //************************************** DROITE ****************************************************
  679.  
  680. void droite()
  681. {
  682.   Serial.println("droite");
  683.   Serial.println(String(ComptButtonY));
  684.   if ( ComptButtonY < ComptButtonYmax )
  685.   {
  686.     delay(200);
  687.     ComptButtonY++;
  688.   }
  689. }
  690.  
  691. //************************************** SET ****************************************************
  692.  
  693. void set()
  694. {
  695.   Serial.println("set");
  696.   if (setbutton == false)
  697.   {
  698.     setbutton = true ;
  699.     Serial.println("true");
  700.   }
  701. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement