Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "SPI.h"
- #include "Adafruit_GFX.h"
- #include "Adafruit_ILI9340.h"
- #if defined(__SAM3X8E__)
- #undef __FlashStringHelper::F(string_literal)
- #define F(string_literal) string_literal
- #endif
- // These are the pins used for the UNO
- // for Due/Mega/Leonardo use the hardware SPI pins (which are different)
- #define _sclk 3
- #define _miso 1
- #define _mosi 4
- #define _cs 10
- #define _rst 5
- #define _dc 2
- // Using software SPI is really not suggested, its incredibly slow
- //Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _mosi, _sclk, _rst, _miso);
- // Use hardware SPI
- Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _rst);
- void setup() {
- Serial.begin(9600);
- pinMode(8, INPUT); //Lecture temporaire des interrupteurs pour les tests
- pinMode(6, INPUT);
- tft.begin(); //Initialisation de l'écran
- tft.fillScreen(ILI9340_BLACK); //Vidage de l'écran
- }
- void DessinerMenu(String menus[], int longueur, int selected) { //Dessiner un menu à l'écran
- tft.fillScreen(ILI9340_BLACK); //On efface l'écran
- for(int i = 0; i < longueur; i++) { //Pour chaque élément de menu du tableau passé en paramètre
- if (selected - 1 == i) { //Si l'élément actuel du tableau est sélectionné
- tft.setTextColor(ILI9340_BLUE); //On le met en bleu
- } else {
- tft.setTextColor(ILI9340_WHITE); //Sinon on le met en blanc
- }
- 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)
- tft.setTextSize(3); //On définit la taille de la police
- tft.println(menus[i]); //On écrit la ligne
- }
- }
- void loop(void) {
- int i = 1;
- uint8_t rotation = 3; //On met l'écran dans le sens que l'on veut
- tft.setRotation(rotation); //Suite de la ligne précédente
- String tableauMenuPrincipal[3] = { "menu 1", "menu 2", "menu 3" };
- 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" };
- //On stocke les menus dans des tableaux, un tableau pour chaque "niveau de menu, on peut en ajouter autant qu'on veut
- 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
- int selectionne = 1; //On sélectionne le premier élément
- int ancienneValeurDefilement = digitalRead(8); //On lit la valeur actuelle du bouton de défilement
- DessinerMenu(tableauMenuPrincipal, longueurTableau, selectionne); //On dessine le menu
- while (1) { //boucle infinie, on n'utilise pas loop car nos premières variables seraient réintialisées
- while (digitalRead(8) == 0 && digitalRead(6) == 0) {
- //Evite de recharger le menu tout le temps
- }
- if (digitalRead(6) == 1) { //Ca veut dire que l'utilisateur a validé
- int NewSelectionne = 1; //On remet la sélection au début
- DessinerMenu(tableauMenu1[selectionne - 1], 3, NewSelectionne); //On dessine notre nouveau menu avec l'indice selectionne dans le tableau de niveau 2 des menus
- } else {
- ancienneValeurDefilement = digitalRead(8); //Dans le cas ou l'utilisateur a tourné la molette
- selectionne++; //On change la sélection
- if (selectionne > longueurTableau) { //Si on est arrivé à la fin on repasse au début
- selectionne = 1;
- }
- DessinerMenu(tableauMenuPrincipal, longueurTableau, selectionne); //Puisqu'on a changé de sélection on actualise le menu
- }
- delay(1000); //On attend un peu (c'est temporaire)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment