Project HOME Control Part 3 Menu

In het derde deel geven we een menu in het TFT scherm is aangegeven. Met de uit de roterende encoder 35in1 sensor kit kan selecteren we een optie in het menu. Als er meer dan de inhoud van de menu's tonen de lijnen scrollt scherm zijn automatisch naar boven of naar beneden zodat het item is altijd goed gekozen om gezien te worden.

De kabels:

Programma:

 

# include < adafruit_gfx.h>; //Core graphics library
# include < adafruit_st7735.h>; //Hardware-specific bibliotheek
//Integration lettertype van bibliotheken
# include < Fonts/FreeSans9pt7b.h>; //Font voor logo
# include < Fonts/FreeSansBold9pt7b.h>; //Font voor logo

# include < spi.h>
# include < sd.h>

Van de gebruikte //definition pinnen
# define TFT_CS 5//Chip REGELSELECTIE voor TFT display
# define TFT_RST 22De rij voor //reset TFT
# define TFT_DC 21De rij voor //data/command TFT

# define SD_CS 16//Chip REGELSELECTIE voor SD kaart


//tft aanleg
TFT Adafruit_ST7735 adafruit_st7735 = (TFT_CS, TFT_RST TFT_DC,);

* menu Char [] = {"item 1", "Nummer 2", - "plaatsing 3", "binnenkomst 4"
"Boeking 5", "vermelding 6", - "plaatsing 7", "nummer 8", - "plaatsing 9",
"Nummer 10", "nummer 11", "Vermelding 12", - "plaatsing 13", "14 vermelding"};
               
uint8_t menu_lines = 14; //Number van de menu-opties

byte badge Const van = 15;
byte = const peulvruchten 14;
byte pulseDirection const = 4;

Gox portMUX_INITIALIZER_UNLOCKED portmux_type =;
vluchtige menuUp int = 0;
vluchtige menuDown int = 0;
vluchtige menuBtn int = 0;

//global variabelen voor het menu
uint8_t line_len = 127; //Number van de pixel per regel
uint8_t start_menu = 32; //Line begint in het menu dat
uint8_t menu_size = 12; //Number menu van lijnen a 10 pixels
uint16_t fnt_color ST7735_WHITE =; //Written kleur
uint16_t bg_color ST7735_BLACK =; //Menu achtergrond
uint16_t sel_fnt_color ST7735_BLACK =; //Written kleur naar keuze
uint16_t sel_bg_color ST7735_GREEN =; //Background voor de keuze
uint8_t line_selected = 0; Lijn //well-chosen menu
uint8_t top_line = 0; //the menu lijn voor het eerst te zien

//Function voor het schrijven van een geselecteerde regel
menuselline leegte (uint8_t lijn, txt char *) {
Y1 uint8_t = lijn start_menu * 10; //Oberkante van De Lijn
tft.setCursor (4, y1);
tft.setTextColor (sel_bg_color sel_fnt_color,);
tft.print (txt);
}

//Function voor het schrijven van een lijn
menuline leegte (uint8_t lijn, txt char *) {
Y1 uint8_t = lijn start_menu * 10; //Oberkante van De Lijn
tft.setCursor (4, y1);
tft.setTextColor (bg_color fnt_color,);
tft.print (txt);
}

//Function aan de weergave van het menu
showmenu leegte () {
   Eerste //extinguish de achtergrond
tft.fillRect (0, (start_menu), line_len (menu_size * 10), bg_color);
uint8_t mlin top_line =;
Terwijl ((< mlin; menu_lines) & & ((mlin - top_line) < menu_size)) {
if (= mlin line_selected) {
menuSelLine (mlin-top_line, menu [mlin]);
} else {
menuLine (mlin-top_line, menu [mlin]);
       }
mlin;
   }
   
}

Shift //to urinefunctie rond de keuze
selectiondown leegte () {
line_selected;
if (line_selected > = menu_lines) = line_selected menu_lines-1;
Als ((line_selected - top_line) > = menu_size) top_line;
showMenu ();
}


Shift //to urinefunctie rond de keuze naar boven
selectionup leegte () {
if (> line_selected; line_selected - 0);
if (< line_selected; top_line top_line) -;
showMenu ();
}

//Function aan de weergave van een tekst op het scherm in een bepaalde kleur
De weergave van de tekst nietig (char * tekst, kleur uint16_t) {
tft.setTextColor (kleur);
tft.setTextWrap (true); //automatic regelafbreking is geactiveerd

   tft.print(tekst);
}

Functie om tekst op elk punt (x,y) weer te geven op
Weergeven. De kleur kan worden geselecteerd
leegtekst(uint16_t x, uint16_t y, char *tekst, uint16_t kleur)
tft.setCursor(x, y);
displayText(tekst, kleur);
}

Functie voor het weergeven van het logo boven aan het display
ongeldig displayLogo()
   Achtergrond vullen
tft.fillRect(0,0,127.30,ST7735_YELLOW);
   Tekenkaders
tft.drawRect(1.1.125,28,ST7735_BLUE);
   Lettertype voor het woord HOME vet
tft.setFont(&FreeSansBold9pt7b);
    Positioneringscursors
tft.setCursor(7,20);
    Uitvoertekst in zwart
tft.setTextColor(ST7735_BLACK);
tft.print("HOME");
    Lettertype voor het tekstbesturingselement niet vet
tft.setFont(&FreeSans9pt7b);
    Uitvoertekst in rood
tft.setTextColor(ST7735_RED);
tft.print("Control";
    Lettertype opnieuw instellen naar standaard
tft.setFont(NULL);
}

service onderbreken voor switch
huidige kleur wijzigen
ongeldig IRAM_ATTR btnClick()
portENTER_CRITICAL_ISR(&mux);
menuBtn = 1;
portEXIT_CRITICAL_ISR(&mux);
}

onderbreken voor roterende puls
leegte IRAM_ATTR rotaryPulse()
byte dir = digitalRead(pulseDirection);
als ((menuUp == 0) && (menuDown == 0))
portENTER_CRITICAL_ISR(&mux);
als (dir==0)
menuUp = 1;
• anders
menuDown = 1;
       }
portEXIT_CRITICAL_ISR(&mux);
   }
}

   
nietig instellen()
Serial.begin(115200);
   tft initialiseren en zwarte achtergrond
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_BLACK);
   Logo weergeven
displayLogo();
   SD-kaart initialiseren en resultaat bekijken
als (! SD.begin(SD_CS))
displayText(25,40,"No SD-Card",ST7735_YELLOW);
• anders
displayText(34,40,"SD-Card OK",ST7735_GREEN);
   }
vertraging(1000);
showMenu();
   invoerpins definiëren
pinMode(knop, INPUT_PULLUP);
pinMode(puls, INPUT_PULLUP);
pinMode(pulseDirection, INPUT_PULLUP);
   interrupts definiëren
attachInterrupt(digitalPinToInterrupt(pulse),rotaryPulse, FALLING);
attachInterrupt(digitalPinToInterrupt(button), btnClick, FALLING);
}

loop()
als (menuUp)
vertraging(100); Aan het ontwrikken
portENTER_CRITICAL(&mux);
menuUp = 0;
menuDown=0;
portEXIT_CRITICAL(&mux);
selectionUp();
Serial.println("Up");
   }
als (menuDown)
vertraging(100); Aan het ontwrikken
portENTER_CRITICAL(&mux);
menuUp=0;
menuDown = 0;
portEXIT_CRITICAL(&mux);
selectieDown();
Serial.println("Down!");
   }


}

 

Beschrijving van parameters:

  • line_len = 127 Breedte van een weergavelijn in pixels
  • start_menu = 32 Positie van de bovenste rand van de eerste regel van de manü
  • menu_size = 12 Aantal rijen dat wordt gebruikt voor het menu
  • fnt_color = ST7735_WHITE Kleur van het lettertype voor een vermelding
  • bg_color = ST7735_BLACK Kleur van de achtergrond voor een vermelding
  • sel_fnt_color = ST7735_BLACK Kleur van het lettertype voor een geselecteerd item
  • sel_bg_color = ST7735_GREEN Kleur van de achtergrond voor een geselecteerd item
  • line_selected = 0 Nummer van de regel in het menu dat momenteel is geselecteerd
  • top_line = 0 Nummer van de regel in het menu dat boven aan het display wordt weergegeven. Een waarde groter dan 0 zorgt ervoor dat het menu wordt gescrolld

 

Het programma kan ook worden geladen als een bestand van GIT Hub. Central.ino bestand in het ZIP-pakket

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

DisplaysEsp-32Projekte für fortgeschritteneSmart home

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi