Montre T-Watch 2020 v1 (2024)

  1. /*

  2. pour montre TTGO T-Watch v1

  3. par Silicium628

  4. à voir aussi -> https://projetsdiy.fr/ttgo-t-watch-debuter-librairie-esp32-tft_espi/

  5. */

  6. #define version1 "2.0"

  7. #include "config.h"

  8. #include "Free_Fonts.h"

  9. #include <EEPROM.h>

  10. #define EEPROM_SIZE 100

  11. #include "data_perso2.c"

  12. #include "Listeuse.h"

  13. bool irq = false;

  14. char buf[128];

  15. bool rtcIrq = false;

  16. TTGOClass *ttgo;

  17. TFT_eSPI * tft;

  18. AXP20X_Class *power;

  19. BOUTON bouton1;

  20. BOUTON bouton2;

  21. BOUTON bouton3;

  22. BOUTON bouton4;

  23. BOUTON bouton5;

  24. BOUTON bouton6;

  25. BOUTON bouton7;

  26. BOUTON bouton8;

  27. BOUTON bouton9;

  28. BOUTON bouton10;

  29. BOUTON bouton11;

  30. BOUTON bouton12;

  31. BOUTON bouton13;

  32. BOUTON bouton14;

  33. BOUTON bouton15;

  34. /***************************************************************************************

  35. ** Section 6: Colour enumeration

  36. ***************************************************************************************/

  37. // Default color definitions

  38. /**

  39. #define TFT_BLACK 0x0000 // 0, 0, 0

  40. #define TFT_NAVY 0x000F // 0, 0, 128

  41. #define TFT_DARKGREEN 0x03E0 // 0, 128, 0

  42. #define TFT_DARKCYAN 0x03EF // 0, 128, 128

  43. #define TFT_MAROON 0x7800 // 128, 0, 0

  44. #define TFT_PURPLE 0x780F // 128, 0, 128

  45. #define TFT_OLIVE 0x7BE0 // 128, 128, 0

  46. #define TFT_LIGHTGREY 0xD69A // 211, 211, 211

  47. #define TFT_DARKGREY 0x7BEF // 128, 128, 128

  48. #define TFT_BLUE 0x001F // 0, 0, 255

  49. #define TFT_GREEN 0x07E0 // 0, 255, 0

  50. #define TFT_CYAN 0x07FF // 0, 255, 255

  51. #define TFT_RED 0xF800 // 255, 0, 0

  52. #define TFT_MAGENTA 0xF81F // 255, 0, 255

  53. #define TFT_YELLOW 0xFFE0 // 255, 255, 0

  54. #define TFT_WHITE 0xFFFF // 255, 255, 255

  55. #define TFT_ORANGE 0xFDA0 // 255, 180, 0

  56. #define TFT_GREENYELLOW 0xB7E0 // 180, 255, 0

  57. #define TFT_PINK 0xFE19 // 255, 192, 203 //Lighter pink, was 0xFC9F

  58. #define TFT_BROWN 0x9A60 // 150, 75, 0

  59. #define TFT_GOLD 0xFEA0 // 255, 215, 0

  60. #define TFT_SILVER 0xC618 // 192, 192, 192

  61. #define TFT_SKYBLUE 0x867D // 135, 206, 235

  62. #define TFT_VIOLET 0x915C // 180, 46, 226

  63. **/

  64. bool KeyPressed = false;

  65. bool lenergy = false;

  66. static bool irq_axp202 = false;

  67. static bool return_to_deepsleep = true;

  68. #define TIME_TO_SLEEP 30

  69. uint8_t secondes;

  70. uint8_t heures;

  71. uint8_t minutes;

  72. uint8_t etats[nb_elements]; // nb_elements est défini dans le fichier data_perso2.c

  73. uint8_t lst_num_affi[11]; // liste des numéros des strings actuellement affichés

  74. uint16_t num_ligne_pointee;

  75. uint8_t top_lst=0;

  76. uint8_t lst_a_afficher=1; // =0 ou 1 (2 listes)

  77. uint8_t choix_ok =0;

  78. uint8_t mode=0;

  79. uint8_t reg_heure=0;

  80. int16_t x_1, y_1;

  81. int16_t x_2, y_2;

  82. uint16_t memo_y_2=0;

  83. void init_boutons()

  84. {

  85. // sur la partie listeuse

  86. if(lst_a_afficher == 0)

  87. {

  88. bouton1.init(199,0, 40,40, "fleche_droite", TFT_BROWN);

  89. }

  90. else

  91. {

  92. bouton1.init(199,0, 40,40, "fleche_gauche", TFT_CYAN);

  93. }

  94. bouton1.dessine(0);

  95. String s2;

  96. if(lst_a_afficher == 0) {s2="x";} else {s2="!";}

  97. bouton2.init(199,65, 40,40, s2, TFT_GREEN);

  98. bouton2.dessine(0);

  99. bouton3.init(199,140, 40,20, "fleche_haut", TFT_WHITE);

  100. bouton3.dessine(0);

  101. bouton4.init(199,200, 40,20, "fleche_bas", TFT_WHITE);

  102. bouton4.dessine(0);

  103. // sur la page de choix

  104. bouton5.init(120,0, 40,40, "W", TFT_RED);

  105. bouton6.init(180,0, 40,40, "R", TFT_GREEN);

  106. bouton7.init(5,80, 100,40, "Montre", TFT_WHITE);

  107. bouton8.init(5,130, 100,40, "Liste", TFT_WHITE);

  108. bouton9.init(150,190, 40,40, "+", TFT_WHITE); // bouton "inc minutes"

  109. bouton10.init(80,190, 40,40, "-", TFT_WHITE); // bouton "dec minutes"

  110. bouton11.init(120,80, 110,40, "Reg h,m", TFT_WHITE); // bouton accès règlage minutes

  111. bouton12.init(120,130, 110,40, "Batt", TFT_WHITE);

  112. bouton13.init(130,200, 100,40, "retour", TFT_WHITE);

  113. bouton14.init(150,40, 40,40, "+", TFT_WHITE); // bouton "inc heures"

  114. bouton15.init(80,40, 40,40, "-", TFT_WHITE); // bouton "dec heures"

  115. }

  116. uint16_t nb_elmt_liste_en_cours()

  117. {

  118. uint16_t nb1=0;

  119. for(int n=0; n<nb_elements; n++)

  120. {

  121. if (etats[n] == lst_a_afficher) {nb1++;}

  122. }

  123. return(nb1);

  124. }

  125. void affiche_data()

  126. {

  127. if (mode==0)

  128. {

  129. String s1;

  130. tft->setFreeFont(FF18);

  131. tft->fillScreen(TFT_BLACK);

  132. if(lst_a_afficher==0) {tft->setTextColor(TFT_CYAN, TFT_BLACK);} else {tft->setTextColor(TFT_BROWN, TFT_BLACK);}

  133. for(uint16_t i=0; i<11; i++) {lst_num_affi[i]=255;} // RAZ liste

  134. int16_t dy=22;

  135. // n'affiche que les lignes de la liste choisie (parmi 2 listes)

  136. uint16_t y=0;

  137. uint8_t i=top_lst;

  138. uint8_t n=0;

  139. while((i<nb_elements) && (n<11))

  140. {

  141. if (etats[i] == lst_a_afficher)

  142. {

  143. uint16_t num1;

  144. num1 =top_lst + n;

  145. //num1 ++; // pour afficher à partir de 1 au lieu de 0...

  146. s1 =(String)num1;

  147. tft->setFreeFont(FF1);

  148. tft->setTextColor(TFT_SILVER, TFT_BLACK);

  149. tft->drawString(s1, 0, y+2, GFXFF); // affiche les numéros à gauche du texte

  150. String el1 = elements[i];

  151. tft->setFreeFont(FF18);

  152. if(lst_a_afficher==0) {tft->setTextColor(TFT_CYAN, TFT_BLACK);} else {tft->setTextColor(TFT_BROWN, TFT_BLACK);}

  153. tft->drawString(el1, 34, y, GFXFF);

  154. y+=dy;

  155. lst_num_affi[n]=i;

  156. n++;

  157. }

  158. i++;

  159. }

  160. tft->setFreeFont(FF1);

  161. init_boutons();

  162. uint16_t nb_el1;

  163. nb_el1= nb_elmt_liste_en_cours();

  164. s1 =(String)nb_el1;

  165. tft->setTextColor(TFT_WHITE, TFT_BLUE);

  166. tft->setTextFont(2); // très petits caractères

  167. tft->drawString(s1, 220, 225, GFXFF); // affiche le nombre en bas à droite

  168. }

  169. }

  170. void affiche_batterie()

  171. {

  172. tft->fillScreen(TFT_BLACK);

  173. uint8_t fin_bcl=0;

  174. while (fin_bcl == 0)

  175. {

  176. //tft->fillScreen(TFT_BLACK);

  177. tft->fillRect(0, 0, 230, 150, TFT_BLACK);

  178. tft->setTextColor(TFT_CYAN, TFT_BLACK);

  179. tft->setFreeFont(FF1);

  180. bouton13.dessine(0);

  181. tft->setTextColor(TFT_CYAN, TFT_BLACK);

  182. tft->setFreeFont(FF1);

  183. tft->setCursor(0, 10);

  184. tft->print("VBUS ETAT: ");

  185. if (power->isVBUSPlug())

  186. {

  187. tft->setTextColor(TFT_GREEN, TFT_BLACK);

  188. tft->println("CONNECT");

  189. tft->setTextColor(TFT_YELLOW, TFT_BLACK);

  190. tft->print("VBUS V : ");

  191. tft->print(power->getVbusVoltage());

  192. tft->println(" mV");

  193. tft->setTextColor(TFT_BLUE, TFT_BLACK);

  194. tft->print("VBUS I: ");

  195. tft->print(power->getVbusCurrent());

  196. tft->println(" mA");

  197. }

  198. else

  199. {

  200. tft->setTextColor(TFT_RED, TFT_BLACK);

  201. tft->println("DISCONNECT");

  202. tft->setTextColor(TFT_GREEN, TFT_BLACK);

  203. }

  204. tft->println();

  205. tft->setTextColor(TFT_CYAN, TFT_BLACK);

  206. tft->print("BATT Li-Ion : ");

  207. // You can use isBatteryConnect() to check whether the battery is connected properly

  208. if (power->isBatteryConnect())

  209. {

  210. tft->setTextColor(TFT_GREEN, TFT_BLACK);

  211. tft->println("CONNECT");

  212. tft->setTextColor(TFT_YELLOW, TFT_BLACK);

  213. float V=power->getBattVoltage();

  214. V /=1000;

  215. tft->print(V);

  216. tft->println(" V");

  217. // To display the charging status, you must first discharge the battery,

  218. // and it is impossible to read the full charge when it is fully charged

  219. if (power->isChargeing())

  220. {

  221. tft->setTextColor(TFT_BLUE, TFT_BLACK);

  222. tft->print("Charge : ");

  223. tft->print(power->getBattChargeCurrent());

  224. tft->println(" mA");

  225. }

  226. else

  227. {

  228. // Show current consumption

  229. tft->setTextColor(TFT_WHITE, TFT_BLACK);

  230. tft->print("Decharge : ");

  231. tft->print(power->getBattDischargeCurrent());

  232. tft->println(" mA");

  233. tft->print(power->getBattPercentage());

  234. tft->println(" %");

  235. }

  236. }

  237. else

  238. {

  239. tft->setTextColor(TFT_RED, TFT_BLACK);

  240. tft->println("DISCONNECT");

  241. tft->setTextColor(TFT_GREEN, TFT_BLACK);

  242. }

  243. for(int n=0; n<10; n++) // pour obtenir un temps de réaction très bref en gardant une tempo de 1s

  244. {

  245. if (ttgo->getTouch(x_1, y_1))

  246. {

  247. fin_bcl=1;

  248. affi_choix();

  249. mode=1;

  250. }

  251. delay(100);

  252. }

  253. }

  254. }

  255. void affi_choix()

  256. {

  257. tft->fillScreen(TFT_BLACK);

  258. tft->setTextColor(TFT_CYAN, TFT_BLACK);

  259. tft->setFreeFont(FF18);

  260. tft->drawString("Eeprom :", 10, 5, GFXFF);

  261. tft->drawLine(0, 45, 239, 45, TFT_WHITE);

  262. //tft->drawString("Fonction :", 10, 55, GFXFF);

  263. bouton5.dessine(0);

  264. bouton6.dessine(0);

  265. bouton7.dessine(0);

  266. bouton8.dessine(0);

  267. bouton11.dessine(0);

  268. bouton12.dessine(0);

  269. }

  270. void setup()

  271. {

  272. //Serial.begin(115200);

  273. //Serial.println("setup()");

  274. EEPROM.begin(EEPROM_SIZE); // en mémoire flash

  275. ttgo = TTGOClass::getWatch();

  276. ttgo->begin();

  277. power = ttgo->power;

  278. ttgo->openBL(); // allume le rétroéclairage

  279. ttgo->bl->adjust(150); //Lower the brightness

  280. tft = ttgo->tft;

  281. tft->fillScreen(TFT_BLACK);

  282. ttgo->rtc->disableAlarm();

  283. // ttgo->rtc->setDateTime(2021, 03, 12, 17, 21, 30); // commenter cette ligne sauf pour remettre à l'heure

  284. for(int n =0; n<nb_elements; n++)

  285. {

  286. etats[n]= 1;

  287. }

  288. uint16_t dy=22;

  289. uint16_t decal=0;

  290. //for(int decal =0; decal<nb_elements; decal++)

  291. {

  292. uint16_t y=0;

  293. tft->fillScreen(TFT_BLACK);

  294. affiche_data();

  295. delay(100);

  296. }

  297. init_boutons();

  298. uint8_t v1 = EEPROM.read(0);

  299. String s1;

  300. s1 =(String)v1;

  301. tft->setFreeFont(FF1);

  302. tft->setTextColor(TFT_SILVER, TFT_BLACK);

  303. tft->drawString(s1, 150, 70, GFXFF);

  304. pinMode(AXP202_INT, INPUT_PULLUP);

  305. attachInterrupt(AXP202_INT, []

  306. {

  307. irq = true;

  308. }, FALLING);

  309. //!Clear IRQ unprocessed first

  310. power->enableIRQ(AXP202_PEK_SHORTPRESS_IRQ | AXP202_VBUS_REMOVED_IRQ | AXP202_VBUS_CONNECT_IRQ | AXP202_CHARGING_IRQ, true);

  311. // ADC monitoring must be enabled to use the AXP202 monitoring function

  312. power->adc1Enable(AXP202_VBUS_VOL_ADC1 | AXP202_VBUS_CUR_ADC1 | AXP202_BATT_CUR_ADC1 | AXP202_BATT_VOL_ADC1, true);

  313. power->clearIRQ();

  314. read_eeprom();

  315. mode=0;

  316. lst_a_afficher=0;

  317. //affi_choix();

  318. //affiche_data();

  319. affiche_heure();

  320. }

  321. void trace_curseur_triangulaire(uint16_t x, uint16_t y, uint32_t couleur)

  322. {

  323. tft->fillTriangle (x, y-12, x, y+6, x+10, y-2, couleur);

  324. }

  325. void affi_string(String s, uint16_t x, uint16_t y)

  326. {

  327. tft->setFreeFont(FF1);

  328. tft->setTextColor(TFT_WHITE, TFT_BLACK);

  329. tft->drawString(" ", x, y, GFXFF);

  330. tft->drawString(s, x, y, GFXFF);

  331. }

  332. void affi_int(uint16_t k, uint16_t x, uint16_t y)

  333. {

  334. String s1 =(String)k;

  335. tft->setFreeFont(FF1);

  336. tft->setTextColor(TFT_WHITE, TFT_BLACK);

  337. tft->drawString(" ", x, y, GFXFF);

  338. tft->drawString(s1, x, y, GFXFF);

  339. }

  340. void affi_message(String m1)

  341. {

  342. tft->setTextColor(TFT_WHITE, TFT_BLUE);

  343. tft->setFreeFont(FF18);

  344. ttgo->tft->drawString(m1, 25, 100);

  345. delay(1000);

  346. affiche_data();

  347. }

  348. void record_etat()

  349. {

  350. if (nb_elements > 100) {return;}

  351. int adresse =0;

  352. uint8_t nbe = nb_elements;

  353. for(int n=0; n<nb_elements; n++)

  354. {

  355. EEPROM.write(adresse, etats[n]);

  356. EEPROM.commit();

  357. delay(5);

  358. adresse ++;

  359. }

  360. }

  361. void read_eeprom()

  362. {

  363. int adresse =0;

  364. for(int n=0; n<nb_elements; n++)

  365. {

  366. uint8_t v;

  367. v = EEPROM.read(adresse);

  368. //Serial.print(n); Serial.print(": "); Serial.println(v);

  369. etats[n]=v;

  370. adresse ++;

  371. }

  372. }

  373. void inc_heures()

  374. {

  375. RTC_Date dt1 = ttgo->rtc->getDateTime();

  376. if (dt1.hour<23) {dt1.hour++;}

  377. ttgo->rtc->setDateTime(dt1);

  378. }

  379. void dec_heures()

  380. {

  381. RTC_Date dt1 = ttgo->rtc->getDateTime();

  382. if (dt1.hour>0) {dt1.hour--;}

  383. ttgo->rtc->setDateTime(dt1);

  384. }

  385. void inc_minutes()

  386. {

  387. RTC_Date dt1 = ttgo->rtc->getDateTime();

  388. if (dt1.minute<59) {dt1.minute++;}

  389. else

  390. {

  391. dt1.hour++;

  392. dt1.minute=0;

  393. }

  394. ttgo->rtc->setDateTime(dt1);

  395. }

  396. void dec_minutes()

  397. {

  398. RTC_Date dt1 = ttgo->rtc->getDateTime();

  399. if (dt1.minute>0) {dt1.minute--;}

  400. else

  401. {

  402. dt1.hour--;

  403. dt1.minute=59;

  404. }

  405. ttgo->rtc->setDateTime(dt1);

  406. }

  407. void affiche_heure()

  408. {

  409. uint32_t d2;

  410. String s1, s2;

  411. tft->fillScreen(TFT_BLACK);

  412. if (reg_heure==1)

  413. {

  414. tft->fillScreen(TFT_BLACK);

  415. tft->setTextColor(TFT_CYAN, TFT_BLACK);

  416. tft->setFreeFont(FF18);

  417. tft->drawString("h:", 10, 50, GFXFF);

  418. bouton14.dessine(0);

  419. bouton15.dessine(0);

  420. tft->setTextColor(TFT_CYAN, TFT_BLACK);

  421. tft->setFreeFont(FF18);

  422. tft->drawString("mn :", 10, 200, GFXFF);

  423. bouton9.dessine(0);

  424. bouton10.dessine(0);

  425. bouton14.dessine(0);

  426. bouton15.dessine(0);

  427. }

  428. //ttgo->tft->setTextColor(TFT_YELLOW, TFT_BLACK);

  429. uint8_t stop=0;

  430. while(stop==0)

  431. {

  432. ttgo->tft->setTextColor(TFT_YELLOW, TFT_BLACK);

  433. RTC_Date dt1 = ttgo->rtc->getDateTime();

  434. heures = dt1.hour;

  435. s1="";

  436. if (heures<10) {s1 +="0";}

  437. s1+= String(heures);

  438. s1+=":";

  439. minutes = dt1.minute;

  440. if (minutes<10) {s1 +="0";}

  441. s1 += String (minutes);

  442. s1+=" ";

  443. tft->setFreeFont(FM24);

  444. ttgo->tft->drawString(s1, 40, 100);

  445. secondes = dt1.second;

  446. s2 = String (secondes);

  447. s2+=" ";

  448. tft->setFreeFont(FM12);

  449. ttgo->tft->setTextColor(TFT_BLUE, TFT_BLACK);

  450. ttgo->tft->drawString(s2, 40, 150);

  451. if (irq)

  452. {

  453. ttgo->power->readIRQ();

  454. if (ttgo->power->isPEKShortPressIRQ())

  455. {

  456. ttgo->power->clearIRQ();

  457. stop=1;

  458. }

  459. //irq = false;

  460. }

  461. if (reg_heure==1)

  462. {

  463. if (ttgo->getTouch(x_1, y_1))

  464. {

  465. if (detect_btn(&bouton9)) { inc_minutes(); }

  466. if (detect_btn(&bouton10)) { dec_minutes(); }

  467. if (detect_btn(&bouton14)) { inc_heures(); }

  468. if (detect_btn(&bouton15)) { dec_heures(); }

  469. }

  470. }

  471. if (stop ==0) {delay(500);}

  472. }

  473. reg_heure=0;

  474. mode=1;

  475. affi_choix();

  476. }

  477. int detect_btn(BOUTON *bouton_i)

  478. {

  479. // calcul de la distance^2 du point cliqué / centre du bouton; rappel : sq = fonction "carré de"

  480. // d²=dx²+dy²

  481. // inutile d'en prendre la racine carrée, on peut utiliser la valeur d² directement

  482. uint32_t d2;

  483. uint16_t milieu_x = bouton_i->x0 + bouton_i->dx/2;

  484. d2= sq(x_1 - milieu_x) + sq(y_1 - bouton_i->y0);

  485. if (d2 < 2000)

  486. {

  487. bouton_i->dessine(1);

  488. delay (200);

  489. bouton_i->dessine(0);

  490. return(1);

  491. }

  492. else

  493. {

  494. return(0);

  495. }

  496. }

  497. void loop()

  498. {

  499. uint32_t d2;

  500. if (irq)

  501. {

  502. irq = false;

  503. power->readIRQ();

  504. //if (power->isVbusPlugInIRQ()) {affi_message("Power Plug In"); }

  505. //if (power->isVbusRemoveIRQ()) {affi_message("Power Remove"); }

  506. if (power->isPEKShortPressIRQ())

  507. {

  508. affi_choix();

  509. mode=1;

  510. }

  511. power->clearIRQ();

  512. }

  513. if (ttgo->getTouch(x_1, y_1))

  514. {

  515. if(mode==0) // mode "normal"

  516. {

  517. if (x_1<160) // gestion du curseur à gauche

  518. {

  519. num_ligne_pointee = y_1/22;

  520. /** affi_int(num_ligne_pointee, 120, 0); // pour test -> [0..10] **/

  521. x_2=20;

  522. y_2=22*(y_1/22)+12;

  523. uint8_t num_el = lst_num_affi[num_ligne_pointee];

  524. if(((y_2 != memo_y_2) && (num_el != 255))|| (num_ligne_pointee==0) ) // la valeur 255 est inscrite au delà de la fin des éléments présents . cf: affiche_data()

  525. {

  526. /**

  527. affi_int(num_el, 120, 20); // pour test

  528. String s1 = elements[num_el];

  529. affi_string(s1 ,120,40); // pour test

  530. **/

  531. trace_curseur_triangulaire(x_2, memo_y_2, TFT_BLACK); //efface le précédent

  532. trace_curseur_triangulaire(x_2, y_2, TFT_YELLOW); //trace le curseur triangulaire jaune

  533. memo_y_2 = y_2;

  534. bouton2.couleur=TFT_GREEN;

  535. bouton2.dessine(0);

  536. choix_ok=1;

  537. }

  538. }

  539. else // gestion des boutons à droite

  540. {

  541. if (detect_btn(&bouton1))

  542. {

  543. lst_a_afficher=1-lst_a_afficher;

  544. top_lst=0;

  545. affiche_data();

  546. }

  547. if (detect_btn(&bouton2))

  548. {

  549. if (choix_ok==1)

  550. {

  551. uint8_t n_el = lst_num_affi[num_ligne_pointee];

  552. etats[n_el]=1-etats[n_el];

  553. affiche_data();

  554. bouton2.couleur=TFT_DARKGREY;

  555. bouton2.dessine(0);

  556. choix_ok=0;

  557. }

  558. }

  559. if (detect_btn(&bouton3))

  560. {

  561. top_lst=0;

  562. affiche_data();

  563. }

  564. if (detect_btn(&bouton4))

  565. {

  566. uint16_t nb_max = nb_elmt_liste_en_cours();

  567. //if (top_lst < (nb_max-11))

  568. top_lst=lst_num_affi[10]; // on part du dernier élément de l'affichage en cours

  569. //{top_lst+=11;} //attention à cette valeur : elle doit correspondre au nb de lignes affichées

  570. affiche_data();

  571. }

  572. }

  573. }

  574. else if(mode==1) // ecran de choix avec 5 boutons

  575. {

  576. if (detect_btn(&bouton5))

  577. {

  578. record_etat();

  579. }

  580. if (detect_btn(&bouton6))

  581. {

  582. read_eeprom();

  583. mode=0;

  584. lst_a_afficher=0;

  585. affiche_data();

  586. }

  587. if (detect_btn(&bouton7))

  588. {

  589. affiche_heure();

  590. x_1=0;

  591. y_1=0;

  592. }

  593. if (detect_btn(&bouton8))

  594. {

  595. x_1=0;

  596. y_1=0;

  597. mode=0;

  598. affiche_data();

  599. }

  600. if (detect_btn(&bouton11))

  601. {

  602. reg_heure=1;

  603. affiche_heure();

  604. }

  605. if (detect_btn(&bouton12))

  606. {

  607. affiche_batterie();

  608. }

  609. }

  610. }

  611. delay(5);

  612. }

  613. /** ***********************************************************************************

  614. CLASS BOUTON // affiche un bouton cliquable

  615. ***************************************************************************************/

  616. // Constructeur

  617. BOUTON::BOUTON()

  618. {

  619. }

  620. void BOUTON::init(uint16_t x_i, uint16_t y_i, uint16_t dx_i, uint16_t dy_i, String s_i, uint32_t couleur_i)

  621. {

  622. x0 = x_i;

  623. y0 = y_i;

  624. dx = dx_i;

  625. dy = dy_i;

  626. s = s_i;

  627. couleur =couleur_i;

  628. }

  629. void BOUTON::dessine(uint8_t fill_i)

  630. {

  631. if(fill_i==1)

  632. {

  633. tft->fillRoundRect(x0, y0, dx, dy, 5, couleur);

  634. }

  635. else

  636. {

  637. tft->fillRoundRect(x0, y0, dx, dy, 5, TFT_BLACK); // "éteint" le bouton

  638. tft->drawRoundRect(x0, y0, dx, dy, 5, couleur); // retrace le pourtour

  639. //

  640. if (s=="fleche_haut") {tft->fillTriangle (x0+12, y0+15, x0+30, y0+15, x0+20, y0+5, couleur);}

  641. else if (s=="fleche_bas") {tft->fillTriangle (x0+12, y0+5, x0+30, y0+5, x0+20, y0+15, couleur);}

  642. else if (s=="fleche_droite") {tft->fillTriangle (x0+15, y0+8, x0+15, y0+26, x0+25, y0+18, couleur);}

  643. else if (s=="fleche_gauche") {tft->fillTriangle (x0+25, y0+8, x0+25, y0+26, x0+15, y0+18, couleur);}

  644. else

  645. {

  646. tft->setFreeFont(FF18);

  647. tft->setTextColor(TFT_WHITE, TFT_BLACK);

  648. tft->drawString(s, x0+11, y0+10);

  649. }

  650. }

  651. }

Montre T-Watch 2020 v1 (2024)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Annamae Dooley

Last Updated:

Views: 5793

Rating: 4.4 / 5 (45 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Annamae Dooley

Birthday: 2001-07-26

Address: 9687 Tambra Meadow, Bradleyhaven, TN 53219

Phone: +9316045904039

Job: Future Coordinator

Hobby: Archery, Couponing, Poi, Kite flying, Knitting, Rappelling, Baseball

Introduction: My name is Annamae Dooley, I am a witty, quaint, lovely, clever, rich, sparkling, powerful person who loves writing and wants to share my knowledge and understanding with you.