Projekt HOME Control Teil 3 Menü - AZ-Delivery

Nella terza parte creiamo un menu visualizzato sul display TFT.Con l'Encoder Rotary dal kit di sensore 35in1 possiamo selezionare una voce nel menu.Se ci sono più voci di menu che righe di visualizzazione, la visualizzazione scorre automaticamente o giù in modo che la voce selezionata sia sempre visibile.

Wiring:

Programma:

 

"35; includono <adafruit'u gfx.h> // Core graphic library
"35; include <adafruuu st7735.h> // libreria specifica hardware
//Integrazione delle biblioteche di carattere
'35; includono <Fonts/FreeSans9pt7b.h> //Font per Logo
'35; includono <Fonts/FreeSansBold9pt7b.h> //Font per Logo

'35; includono <spe.h>
'35; includono <sd.h>

//Definizione del perno utilizzato
"35; definire TFT CS 5// Chip select line for TFT display
"35; definire RST TFT 22// Reimposta linea per TFT
"35; definire TFT DC 21// Data/riga di comando per TFT

«definire SD CS 16»// Chip select line for SD card


//tft entry
Adafruit ST7735 tft = Adafruit ST7735(TFT CS, TFT DC, TFT RST);

char *menu[]="entry 1", "entry 2", "entry 3", "entry 4",
"voce 5", "voce 6", "voce 7", "voce 8", "voce 9",
"voce 10", "voce 11", "voce 12", "voce 13", "voce 14"};
               
uint8 u t menu delle linee = 14; //Numero di voci di menu

il pulsante const byte = 15;
const byte pulse = 14;
const byte pulseDirection = 4;

portMUX TIPO mux = portMUX INIZIALIZZAR UNLOCKED;
volatile int menu = 0;
volatile int menu
volatile int menu = 0;

//variabili globali per il menu
Non puoi usare la linea = 127; //Numero di pixel per linea
uint8 t start menu = 32; //Linea dove inizia il menu
uint8 t dimensione del menu = 12; //Numero di righe a 10 pixel
BIANCO, BIANCO, BIANCO, BIANCO, BIANCO, BIANCO, BIANCO //Font
OUT16u t bg u colore = ST7735 BLACK; //Menu
Il colore del BLACK ST7735 //Colore dei caratteri per la selezione
Il colore del GREEN ST7735 //Sfondo per la selezione
uint8 t linea selezionata = 0; //Linea di menu selezionata
uint8 t top line = 0; //prima linea di menu visualizzata

//funzione per la scrittura di una line a selezionata
voide menuSelLine(uint8 u t line, char *txt){
uint8 to y1 = linea * 10 + start menu; //Top of the line
tft.setCursor(4,y1);
tft.setTextColor(sel fnt u color, sel u bg)
tft.print(txt);
}

//funzione per la scrittura di una line a
voide menuLine(uint8 u t line, char *txt){
uint8 to y1 = linea * 10 + start menu; //Top of the line
tft.setCursor(4,y1);
tft.setTextColor(fnt color,bg color);
tft.print(txt);
}

//funzione per visualizzare il menu
voide showMenu()
   //primo eliminare lo sfondo
tft.fillmRect(0,(menu iniziale),lino di linea,(dimensione del menu *10),colore bg);
uint8 t mill = top line;
mentre ((mlin < menu u linee) && ((mlin &top < menu u size){
se (mln = linea/ u selezionata)
menuSelLine(mlin-top line,menu[mlin]);
{c:$00FF}
menuLine(mlin-top line,menu[mlin]);
       }
mlin+;
   }
   
}

//Funzione per spostare la selezione in basso
voide selectionDown()
linea selezionata+;
se (linea/ u selezionata >= menu/ linee) linea/ u selezionata = menu/ linee-1;
se ((linea selezionata -top >= dimensioni del menu) top line+;
showMenu();
}


//Funzione per spostare la selezione su
voide selectionUp()
se (linea/ u selezionata > 0) linea/ u selezionata-;
se (linea selezionata < linea superiore)
showMenu();
}

//Funzione per visualizzare un testo sul display in un certo colore
vuoto displayText(char *text, uint16 u t color)
tft.setTextColor(colore);
tft.setTextWrap(true); //interruzione automatica della linea è attivata

tft.print(testo);
}

//Funzione per visualizzare un testo ad un punto y (x,y)
//il display.Il colore può essere selezionato
null displayText(uint16 to x, uint16 to y, char *text *uint16 to t color)
tft.setCursor(x, y);
displayText(testo, colore);
}

//funzione per la visualizzazione del logo in cima al display
Post subject:
   Sfondo del riempimento
tft.fillmRect(0,0127,30,ST7735-u YLOW);
   //Disegna cornice
tft.draft(1,1125,28,ST7735u BLUE);
   //Font per la parola HOME grassetto
tft.setFont(&FreeSansBold9pt7b);
    //Position cursore
tft.setCursore(7,20);
    //Stampa testo in nero
tft.setTextColor(ST7735 BLACK);
tft.print("HOME");
    //Font per il controllo della parola non grasso
tft.setFont(&FreeSans9pt7b);
    //Stampa testo in rosso
tft.setTextColor(ST7735)
tft.print("Control");
    //Reimposta carattere a default
tft.setFont(NULL);
}

Servizio di interrupt per switch
//cambia colore corrente
voide IRAM ATTR btClick()
ISR CRITICO(&mux);
menuBtn = 1;
portEXIT CRITICAL ISR(&mux);
}

//interruzione per polso rotante
vuoto IRAM ATTR rotaryPulse()
byte dir = digital Read(pulseDirection);
se ((menuUp = 0) & (menuDown == 0)[
ISR CRITICO(&mux);
se (dir=0)
Menu Up = 1;
{c:$00FF}
Menu Down = 1;
       }
portEXIT CRITICAL ISR(&mux);
   }
}

   
voide setup()
Serial.start(115200);
   //tft inizializzazione e sfondo nero
tft.initr(INITR BLACKB);
tft.fillsScreen(ST7735 BLACK);
   //Mostra logo
displayLogo();
   //Inizializzare la scheda SD e mostrare il risultato
Se (!SD.start(SD CS){SD)
displayText(25,40,"No SD-Card",ST7735 YLAW);
{c:$00FF}
displayText(34,40,"SD-Card OK",ST7735 GREEN);
   }
ritardo(1000);
showMenu();
   //definire i perni di input
PinMode(pulsante, INPUT)
PinMode(polso, INPUT)
pinMode (pulseDirection, INPUT)
   //definire interruzioni
Interrupt(digital PinToInterrupt(pulses), rotaryPulse, FALLING);
Interrupt(digital PinToInterrupt(bottone),btClick, FALLING);
}

voide loop()
se (menu su)
ritardo(100); //Per scaricare
portENTER-u CRITICO(&mux);
Menu Up = 0;
menuDown=0;
portEXIT CRITICAL(&mux);
selectionUp();
Serial.println("Up");
   }
se (menu)
ritardo(100); //Per scaricare
portENTER-u CRITICO(&mux);
menuUp=0;
Menu Down = 0;
portEXIT CRITICAL(&mux);
selectionDown();
Serial.println("Down!")Cosa?
   }


}

 

Descrizione dei parametri:

  • linea = 127 Larghezza di una line a di visualizzazione in pixel
  • avvia menu = 32 Posizione del bordo superiore della prima fila della manovra
  • dimensione del menu = 12 Numero di righe usate per il menu
  • fnt color = ST7735 WHITE Colore del carattere per una voce
  • bg colore = ST7735 BLACK Colore di sfondo per una voce
  • colore = ST7735 BLACK Colore del carattere per una voce selezionata
  • colore = ST7735 GREEN Colore di sfondo per una voce selezionata
  • linea selezionata = 0 Numero di riga nel menu che è appena stato selezionato
  • linea superiore = 0 Numero della riga nel menu che appare in cima alla visualizzazione.Un valore maggiore 0 fa scorrere il menu

 

Il programma può anche essere caricato come file da GIT-Hub.File centrale.ino in pacchetto ZIP

https://github.com/GerLech/HomeControl/archive/master.zip

DisplaysEsp-32Projekte für fortgeschritteneSmart home

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione