Pouknouki

Sous Verre Version 1.2

Jan 13th, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.13 KB | None | 0 0
  1. #include "SPI.h"
  2. #include "Adafruit_GFX.h"
  3. #include "Adafruit_ILI9340.h"
  4. #include <EEPROM.h>
  5.  
  6. #if defined(__SAM3X8E__)
  7.     #undef __FlashStringHelper::F(string_literal)
  8.     #define F(string_literal) string_literal
  9. #endif
  10.  
  11. // These are the pins used for the UNO
  12. // for Due/Mega/Leonardo use the hardware SPI pins (which are different)
  13. #define _sclk 3
  14. #define _miso 1
  15. #define _mosi 4
  16. #define _cs 10
  17. #define _rst 5
  18. #define _dc 2
  19.  
  20. // Using software SPI is really not suggested, its incredibly slow
  21. //Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _mosi, _sclk, _rst, _miso);
  22. // Use hardware SPI
  23. Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _rst);
  24.  
  25. int poids = 0;
  26. int sexe = 0;
  27. String tableauMenuPrincipal[3] = { "Demarrer", "Choisir boisson", "Parametres" };
  28. String tableauMenu1[3][3] = { "Retour", "menu 1.1", "menu 1.2", "Retour", "menu 2.1", "menu 2.2", "Retour", "menu 3.1", "menu 3.2" };
  29. String tableauParametres[4] = { "Retour", "Poids", "Sexe", "Couleur" };
  30.  
  31. void setup() {
  32.   Serial.begin(9600);
  33.   pinMode(8, INPUT);  //Lecture temporaire des interrupteurs pour les tests
  34.   pinMode(6, INPUT);    
  35.   tft.begin(); //Initialisation de l'écran
  36.   tft.fillScreen(ILI9340_BLACK); //Vidage de l'écran //REMARQUE : je sais pas à quoi ça sert dans ce cas là :o
  37. }
  38.  
  39. void DessinerMenu(String menus[], int longueur, int selected) { //Dessiner un menu à l'écran
  40.   tft.fillScreen(ILI9340_BLACK); //On efface l'écran
  41.   for(int i = 0; i < longueur; i++) { //Pour chaque élément de menu du tableau passé en paramètre
  42.     if (selected - 1 == i) { //Si l'élément actuel du tableau est sélectionné
  43.       tft.setTextColor(ILI9340_BLUE); //On le met en bleu
  44.     } else {
  45.       tft.setTextColor(ILI9340_WHITE); //Sinon on le met en blanc
  46.     }
  47.     tft.setCursor(0, i * 25); //On passe à la ligne suivante en ajoutant un espacement (une lettre fait 7 de haut, le texte est en taile trois)
  48.     tft.setTextSize(3); //On définit la taille de la police
  49.     tft.println(menus[i]); //On écrit la ligne
  50.   }
  51. }
  52.  
  53. void DessinerSelecteurNombre(String introduction, String unite, int storage, int valeurActuelle, int* variable, boolean drawAll) {
  54.   if (drawAll) {
  55.     tft.fillScreen(ILI9340_BLACK);    
  56.   } else {
  57.     tft.fillRect(0, 90, tft.width(), 35, ILI9340_BLACK);
  58.   }
  59.  
  60.   int centrageIntro = (tft.width() - (introduction.length() + 1) * 3 * 5) / 2;
  61.   tft.setTextSize(3);
  62.   tft.setCursor(centrageIntro, 60);
  63.   tft.println(introduction);
  64.   int centrageNombre;
  65.   if (valeurActuelle < 10) {
  66.     centrageNombre = (tft.width() - 1 * 5 * 5) / 2;
  67.   } else if (valeurActuelle > 10 && valeurActuelle < 100) {
  68.     centrageNombre = (tft.width() - 2 * 5 * 5) / 2;    
  69.   } else if (valeurActuelle > 100 && valeurActuelle < 200) {
  70.     centrageNombre = (tft.width() - 3 * 5 * 5) / 2;    
  71.   } else {
  72.     valeurActuelle = 0;
  73.     centrageNombre = (tft.width() - 5) / 2;
  74.   }
  75.   tft.setTextSize(5);
  76.   tft.setCursor(centrageNombre, 90);
  77.   tft.println(valeurActuelle);
  78.   int centrageUnite = (tft.width() - (unite.length() + 1) * 3 * 5) / 2;
  79.   tft.setTextSize(3);
  80.   tft.setCursor(centrageUnite, 135);
  81.   tft.println(unite);
  82.  
  83.   while (digitalRead(6) == 0 && digitalRead(8) == 0) {
  84.     //On evite de redessiner le menu
  85.   }
  86.   if (digitalRead(6) == 1) {
  87.       *variable = valeurActuelle;
  88.       EEPROM.write(0, valeurActuelle);
  89.       DessinerMenu(tableauParametres, 4, 2);
  90.   } else if (digitalRead(8) == 1) {
  91.       valeurActuelle++;
  92.       DessinerSelecteurNombre("Je pese", "kg", storage, valeurActuelle, variable, false);
  93.   }
  94. }
  95.  
  96.  
  97. void loop(void) {
  98.   int mode = 0;
  99.   int i = 1;
  100.   uint8_t rotation = 3; //On met l'écran dans le sens que l'on veut
  101.   tft.setRotation(rotation); //Suite de la ligne précédente
  102.  
  103.   int tableauLongueurs[4] = { 3, 3, 3, 3 };
  104.   //On stocke les menus dans des tableaux, un tableau pour chaque "niveau de menu, on peut en ajouter autant qu'on veut
  105.  
  106.   int longueurTableau = 3; //On doit stocker les longueurs de chaque menu pour la boucle for, je stockerai les longueurs des tableaux dans un tableau à l'avenur
  107.   int selectionne = 1; //On sélectionne le premier élément
  108.   int ancienneValeurDefilement = digitalRead(8); //On lit la valeur actuelle du bouton de défilement
  109.   DessinerMenu(tableauMenuPrincipal, tableauLongueurs[0], selectionne); //On dessine le menu
  110.   while (1) { //boucle infinie, on n'utilise pas loop car nos premières variables seraient réintialisées
  111.     while (digitalRead(8) == 0 && digitalRead(6) == 0) {
  112.        //Evite de recharger le menu tout le temps
  113.     }  
  114.     if (digitalRead(6) == 1) { //Ca veut dire que l'utilisateur a validé
  115.       if (mode == 0) {
  116.         if (selectionne == 1) {
  117.          
  118.         } else if (selectionne == 2) {
  119.           mode == 2;
  120.           //DessinerSelectionBoisson();
  121.         } else if (selectionne == 3) {
  122.           mode = 1;
  123.           selectionne = 1;
  124.           DessinerMenu(tableauParametres, 4, 1);
  125.         }
  126.       } else if (mode == 1) {
  127.         if(selectionne == 1) {
  128.          DessinerMenu(tableauMenuPrincipal, 3, 3); //On dessine le menu        
  129.         } else if (selectionne == 2) {
  130.           mode == 12;
  131.           DessinerSelecteurNombre("Je pese", "kg", 0, EEPROM.read(0), &poids, true);
  132.         }
  133.       }
  134.       //DessinerMenu(tableauMenu1[selectionne - 1], 3, NewSelectionne); //On dessine notre nouveau menu avec l'indice selectionne dans le tableau de niveau 2 des menus
  135.     } else {
  136.       ancienneValeurDefilement = digitalRead(8); //Dans le cas ou l'utilisateur a tourné la molette
  137.       selectionne++; //On change la sélection
  138.       if (mode == 0) {
  139.         if (selectionne > 3) { //Si on est arrivé à la fin on repasse au début
  140.           selectionne = 1;
  141.         }
  142.         DessinerMenu(tableauMenuPrincipal, 3, selectionne); //Puisqu'on a changé de sélection on actualise le menu      
  143.       } else if(mode == 1) {
  144.         if (selectionne > 4) { //Si on est arrivé à la fin on repasse au début
  145.           selectionne = 1;
  146.         }
  147.         DessinerMenu(tableauParametres, 4, selectionne); //Puisqu'on a changé de sélection on actualise le menu        
  148.       }
  149.     }
  150.     delay(10); //On attend un peu (c'est temporaire)
  151.   }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment