Bluetooth-Display - Teil 4 - AZ-Delivery

Welkom bij het vierde deel van de Bluetooth Display-serie.

 

In het deel van vandaag, ons scherm ontvangt een verdere kleine uitbreiding van de hardware in aanvulling op een verplichte extra operator menu-item. Met deze nieuwe hardware-extensie kunnen de berichten die in het interne geheugen zijn opgeslagen via een knop zonder het bedieningsmenu worden opgehaald!

Hiervoor gebruiken we een andere gratis poort van onze microcontroller (compatibel met Uno R3) als input. Om precies te zijn: we gebruiken poort 2 als input. Bij deze ingang is een knop verbonden met de grond, waarvan de toetsdruk wordt geëvalueerd door onze Arduino.

Maar nu naar de daadwerkelijke bouw en uitvoering van de uitbreiding. In de eerste stap breiden we onze hardware uit zoals weergegeven in het volgende schema naar de KY-004-knopmodule. In totaal heeft het Bluetooth-scherm 12 4x20-teken tekstgeheugen bij het gebruik van een standaard Arduino.

Deze worden weergegeven oplopend van 0 tot 11 bij het indrukken van de knop. Als bericht 11 op het display wordt weergegeven en de knop wordt ingedrukt, springt de teller terug naar bericht 0.

Bluetooth Display - Deel 4 - Bedraad diagram

 

Vervolgens uploaden we voor deze extensie de volgende aangepaste code naar onze microcontroller:

 

 

#include <Spi.H>
#include <Draad.H>
#include <SoftwareSerial.H>
#include <Eeprom.H>
#include <LiquidCrystal LiquidCrystal.H>
#include <Avr/Slaap.H>

#define MaxInputBufferSize 20 maximaal 255 tekens aan te passen aan vlcdr
#define EEpromSize EEpromSize 990
#define rLcdChr 20
#define LcdRows 4
#define Interval 1000
#define Achtergrondlicht 5 Poort 5 Backlight LED
#define SwitchPin 2 Knoppen voor het selecteren van berichten van poort 12
#define DelayTOPWROFF 500

EEprom-geheugencelladdresses voor configuratie
#define EEfadeSeconden  993
#define EEPINA EEPINA 996
#define EEPINC 997
#define EEPINDD 998


SoftwareSerial mySerial(7, 6); RX, TX
LiquidCrystal LiquidCrystal Lcd(8, 13, 12, 11, 10, 9);

Variabelen
Byte Inhoud van DisplayBank = 0;

Seriële invoerverwerking
Char TBuffer TBuffer;
Char Cbuffer[MaxInputBufferSize + 1];     USB-codeinvoerbuffer
Tekenreeks Sbuffer = "";                      USB-tekenreeksinvoerbuffer
Int Waarde;                                USB Nummeric-ingangsbuffer
Byte Ccount = 0;                          Aantal ontvangen Chars
Byte Inptype = 0;
Booleaanse StrInput StrInput = Valse;
Booleaanse NumberInput = Valse;
Booleaanse Gegevensinvoer = Valse;
Booleaanse EnterInput = Valse;
Byte MenueSelectie = 0;

Knopbediening voor drukknoppen
Booleaanse Switchstate = Waar;
Booleaanse SwitchstateBuffer = Waar;
Byte SelectedMsg = 0;

Foutopsporingsinformatie geven via de seriële interface
Booleaanse EchoMode = Waar;

Eeprom
Int eeaddress;                 EEPROM-adresaanwijzer
Byte Eeprombanks Eeprombanks = 0;          Gebruikt voor de berekening van de EEPROM Banken
SerMnueControl SerMnueControl
Byte MnuState MnuState = 0;            Maximale menudiepte 255 icl Sub
Byte Selectedbank = 0;

Real-time klok
Lange previousMillis = 0;       zal opslaan laatste keer werd gemeten
Lange previousMillisB = 0;       zal opslaan laatste keer werd gemeten

Weergavebeheer
Booleaanse DisplayLock = Valse;
Booleaanse Directafdruk = Valse;
Byte DirectprintROW = 0;
Byte DirectprintLine = 0;

Booleaanse RefreshDisplay = Valse;
Byte FRMCheck = 0; Gebruikte fpr Writing Operations om eeprom zo hosts cycli op te slaan
Batterijbewaking
Float Spanning;
Booleaanse PowersaveMode = Valse;

PWM Lichtbediening

Byte Huidige helderheid = 0;
Byte Doelhelderheid = 0;
Byte FadeSeconds = 0; Standaard = 3


Void Setup()
{   Eeprombanks Eeprombanks = EEpromSize EEpromSize / ((rLcdChr) * LcdRows);   Lcd.Beginnen(rLcdChr, LcdRows);   Lcd.Duidelijk();   Lcd.setCursor(0, 0);   Lcd.Afdrukken("Bluetooth");   Lcd.setCursor(0, 1);   Lcd.Afdrukken("Weergeven");   mySerial.Beginnen(9600);   pinMode(SwitchPin, INPUT_PULLUP); Knopselectietekst van EEprom   pinMode(Achtergrondlicht, Output); Display Verlichting / Display AAN /UIT   digitalWrite(Achtergrondlicht, Lage);   lees Config   FadeSeconds = Eeprom.Lezen(EEfadeSeconden);   Huidige helderheid = 0;   Doelhelderheid = 0;   Lcd.setCursor(0, 4);   Als (DisplayLock) {     Lcd.Afdrukken(" Systeem gesperrt");   }   Verdere setup routines / initalizing   Lcd.setCursor(0, 0);   Doelhelderheid = 255;   mySerial.Flush();
}

// ###################################################################################################### //
Void Lus()
{   SerialcommandProcessor();   runrealTimeClock();   Displayprocessor();   SwitchProcessor();   Hoofdlus beëindigen
}
// ###################################################################################################### //

Void TextHeader(Byte rowm rowm)
{   mySerial.println("Tekst voor Bank " + Tekenreeks( Selectedbank) + " RIJ " + Tekenreeks (rowm rowm) + ":");
}

Void SerialcommandProcessor()
{   Int A;   Inptype = 0;   Inptype = SerInputHandler();   0 keine Rückgabe   1 Nummer   2 Tekenreeks   3 Gegevens   Als ((Inptype > 0) & (!Directafdruk))   {     MenueSelectie = 0;     Als ((MnuState MnuState < 2) && (Inptype == 2)) {       Sbuffer.toUpperCase();  Voor eenvoudig invoeren opdrachten     }     Als ((Sbuffer == "ECHO") && (MnuState MnuState == 0) && (Inptype == 2))     {       MenueSelectie = 2;     }     Als ((Sbuffer == "S") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 3;     }     Alle EEprom-inhoud wissen     Als ((Sbuffer == "E") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 4;     }     Als ((Sbuffer == "JA") && (MnuState MnuState == 1) && (Inptype == 2))      {       MenueSelectie = 5;     }     Als ((Sbuffer != "JA") && (MnuState MnuState == 1) && (Inptype == 2))     {       MenueSelectie = 6;     }     Geselecteerde inhoud bewerken     Als ((Sbuffer == "W") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 7;     }     Als ((MnuState MnuState == 2) && (Waarde  < Eeprombanks Eeprombanks) && (Inptype == 1)) {       MenueSelectie = 8;     }     Als (MnuState MnuState == 3)                                               {       MenueSelectie = 9;     }     Als (MnuState MnuState == 4)                                               {       MenueSelectie = 10;     }     Geselecteerde inhoud weergeven     Als ((Sbuffer == "P") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 11;     }     Als ((MnuState MnuState == 5) && (Inptype == 1))                           {       MenueSelectie = 12;     }     Als ((Sbuffer == "R") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 13;     }     Als ((MnuState MnuState == 6) && (Inptype == 1))                           {       MenueSelectie = 14;     }     Als ((Sbuffer == "D") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 15;     }     Als ((Sbuffer == "Z") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 16;     }     Als ((Sbuffer == "B") && (MnuState MnuState == 0) && (Inptype == 2))       {       MenueSelectie = 17;     }     Als ((MnuState MnuState == 7) && (Inptype == 1))                           {       MenueSelectie = 18;     }     Als ((Sbuffer == "FADE") && (MnuState MnuState == 0) && (Inptype == 2))     {       MenueSelectie = 19;     }     Als (MnuState MnuState == 9)                                               {       MenueSelectie = 20;     }     Als (MnuState MnuState == 10)                                              {       MenueSelectie = 21;     }     Als (MnuState MnuState == 12)                                              {       MenueSelectie = 25;     }     Schakelen (MenueSelectie)     {       Geval 2:         {           mySerial.Afdrukken("Echo");           EchoMode = !EchoMode;           Als (EchoMode) {             mySerial.println(" AAN.");           } Anders           {             mySerial.println("UIT.");           }           mySerial.println("");           mySerial.Flush();           Waarde = 0;           MnuState MnuState = 0;           Sbuffer = "";           Breken;         }       Geval 3:         {           mySerial.println("Lees EEEPROM Content:" );           mySerial.Flush();           Voor (Int A = 0; A < Eeprombanks Eeprombanks; A++)           {             mySerial.println("EEPROM Memory Bank: " + Tekenreeks(A) );             mySerial.Flush();             Voor (Int B = 1; B <= LcdRows; B++)             {               mySerial.Afdrukken("Rij " + Tekenreeks(B) + ": ");               mySerial.Flush();               Voor (Int C = 0; C < rLcdChr; C++)               {                 eeaddress = 0;                 eeaddress = (A * (rLcdChr) * LcdRows) + ((rLcdChr) * B) + C;                 Waarde = Eeprom.Lezen(eeaddress);                 mySerial.Afdrukken(Char(Waarde));                 mySerial.Flush();               }               mySerial.println(" ");               mySerial.Flush();             }           }           Sbuffer = "";           mySerial.println("Geen EEPROM Banks meer beschikbaar.");           mySerial.Flush();           Breken;         }       Geval 4:         {           Waarde = 0;           mySerial.Afdrukken("EEPROM wissen");           mySerial.println("JA/NEE:");           mySerial.Flush();           MnuState MnuState = 1;           Sbuffer = "";           Breken;         }       Geval 5:         {           Waarde = 0;           mySerial.Afdrukken("EEPROM wissen");           mySerial.println("Stand-by.");           mySerial.Flush();           Voor (Int A = 0; A < Eeprombanks Eeprombanks; A++)           {             Memory Bank a             mySerial.println("Duidelijke Bank: " + Tekenreeks(A));             Voor (Int B = 1; B <= LcdRows; B++)             {               Voor (Int C = 0; C < rLcdChr; C++)               {                 eeaddress = 0;                 eeaddress = (A * (rLcdChr) * LcdRows) + ((rLcdChr ) * B) + C;                 FRMCheck = Eeprom.Lezen(eeaddress);                 Als (FRMCheck > 0)                 {                   Eeprom.Schrijven(eeaddress, 00); Formatierung                   mySerial.Afdrukken(".");                   Waarde++;                   Vertraging(30);                   mySerial.Flush();                 }               }             }             mySerial.println("");             mySerial.Flush();           }           mySerial.println("");           mySerial.println('Klaar'. + Tekenreeks(Waarde) + " Bytes gewist");           mySerial.println("");           mySerial.Flush();           Sbuffer = "";           MnuState MnuState = 0;           Breken;         }       Geval 6:         {           Waarde = 0;           Sbuffer = "";           MnuState MnuState = 0;           mySerial.println("OP afbreken.");           mySerial.Flush();           Breken;         }       Geval 7:         {           mySerial.println("EEPPROM Bank Nummer (0-" + Tekenreeks(Eeprombanks Eeprombanks - 1) + "):");           mySerial.Flush();           MnuState MnuState = 2;           Waarde = 0;           Sbuffer = "";           Breken;         }       Geval 8:         {           Selectedbank = Waarde;           TextHeader(1);           MnuState MnuState = 3;           Sbuffer = "";           Waarde = 0;           Breken;         }       Geval 9:         {           WriteEEPROM WriteEEPROM(Selectedbank, 1);           TextHeader(2);           Waarde = 0;           MnuState MnuState = 4;           Sbuffer = "";           Breken;         }       Geval 10:         {           WriteEEPROM WriteEEPROM(Selectedbank, 2);           Waarde = 0;           MnuState MnuState = 0;           Sbuffer = "";           TextHeader(3);           mySerial.Flush();           Waarde = 0;           MnuState MnuState = 9;           Sbuffer = "";           Breken;         }       Geval 11:         {           Waarde = 0;           mySerial.println("EEPPROM Bank Nummer (0-" + Tekenreeks(Eeprombanks Eeprombanks - 1) + "):");           MnuState MnuState = 5;           Sbuffer = "";           mySerial.Flush();           Breken;         }       Geval 12:         {           SelectedMsg = Waarde;           DisplayBank(Waarde);           Breken;         }       Geval 13:         {           Waarde = 0;           mySerial.println("EEPPROM Bank Nummer (0-" + Tekenreeks(Eeprombanks Eeprombanks - 1) + "):");           MnuState MnuState = 6;           Sbuffer = "";           mySerial.Flush();           Breken;         }       Geval 14:         {           A = Waarde;           Als ( A < Eeprombanks Eeprombanks)           {             mySerial.println("Geheugenbank: " + Tekenreeks(A) );             mySerial.Flush();             Voor (Int B = 1; B <= LcdRows; B++)             {               mySerial.Afdrukken("Rij " + Tekenreeks(B) + ": ");               mySerial.Flush();               Voor (Int C = 0; C < rLcdChr; C++)               {                 eeaddress = 0;                 eeaddress = (A * (rLcdChr) * LcdRows) + ((rLcdChr) * B) + C;                 Waarde = Eeprom.Lezen(eeaddress);                 mySerial.Afdrukken(Char(Waarde));                 mySerial.Flush();               }               mySerial.println(" ");               mySerial.Flush();             }           } Anders           {             mySerial.println("Waarde buiten bereik.");           }           Waarde = 0;           Sbuffer = "";           MnuState MnuState = 0;           Breken;         }       Geval 15:         {           Direct pAfdrukken naar weergave           Directafdruk = Waar;           mySerial.println ("Directprint ON.");           Als (Directafdruk)           {             DirectprintROW = 0;             DirectprintLine = 0;             Lcd.Duidelijk();             Lcd.Cursor();             Lcd.Knipperen();           }           Waarde = 0;           Sbuffer = "";           MnuState MnuState = 0;           Breken;         }       Geval 16:         {           Waarde = 0;           Sbuffer = "";           MnuState MnuState = 0;           Breken;         }       Geval 17:         {           mySerial.println("Helderheid van het scherm: (max 255)");           MnuState MnuState = 7;           Waarde = 0;           Sbuffer = "";           Breken;         }       Geval 18:         {           Als ((Waarde < 256))           {             Doelhelderheid = Waarde;             mySerial.println("Helderheid: " + Tekenreeks (Doelhelderheid) + " Set");           } Anders           {             mySerial.println("Waarde buiten bereik.");           }           MnuState MnuState = 0;           Waarde = 0;           Sbuffer = "";           Breken;         }       Geval 19:         {           mySerial.println("Fade Delay: (max 255 Sec)");           MnuState MnuState = 12;           Waarde = 0;           Sbuffer = "";           Breken;         }       Geval 20:         {           WriteEEPROM WriteEEPROM(Selectedbank, 3);           Waarde = 0;           MnuState MnuState = 0;           Sbuffer = "";           TextHeader(4);           mySerial.Flush();           Waarde = 0;           MnuState MnuState = 10;           Sbuffer = "";           Breken;         }       Geval 21:         {           WriteEEPROM WriteEEPROM(Selectedbank, 4);           Waarde = 0;           MnuState MnuState = 0;           Sbuffer = "";           Breken;         }       Geval 25:         {           Als ((Waarde > 0) & (Waarde < 251))           {             FadeSeconds = Waarde;             Eeprom.Schrijven(EEfadeSeconden, FadeSeconds);             mySerial.println("Waarde" + Tekenreeks (Waarde) + " set.");           } Anders           {             Waarde = 0;             Sbuffer = "";             mySerial.println("Waarde buiten bereik.");           }           Waarde = 0;           MnuState MnuState = 0;           Sbuffer = "";           Breken;         }       Standaard:         {           Als (DisplayLock)           {             Lcd.Duidelijk();             DisplayLock = Valse;           }           mySerial.println("-------Smart Bluetooth Display 1.1------");           mySerial.println("S - Lees alle EEPROM Banken");           mySerial.println("E - Wis alle EEPROM Banken");           mySerial.println("W - Schrijf sel. EEPROM Bank");           mySerial.println("R - Lees sel. EEPROM Bank");           mySerial.println("P - Print EEPROM Bank on Display");           mySerial.println("----------------------------------------");           mySerial.println("D - Direct Print");           mySerial.println("B - Weergave Brighness Huidige waarde: " + Tekenreeks (Huidige helderheid));           mySerial.println("Andere: ECHO");           mySerial.println("----------------------------------------");           mySerial.println("Typ Cmd en druk op Enter");           mySerial.Flush();           MnuState MnuState = 0;           Waarde = 0;           Sbuffer = "";         }     }   } Eingabe erkannt
}

Void WriteEEPROM WriteEEPROM(Byte FBank, Byte FRow FRow FRow)
{   Byte Schrijfteller;   Schrijfteller = 0;   mySerial.Afdrukken("Opslaan");   Voor (Int C = 0; C < rLcdChr; C++)   {     eeaddress = 0;     eeaddress = (FBank * (rLcdChr) * LcdRows) + ((rLcdChr) * FRow FRow FRow) + C;     Waarde = Eeprom.Lezen(eeaddress);     Als (Sbuffer[C] != Waarde)     {       Eeprom.Schrijven(eeaddress, Sbuffer[C]);       mySerial.Afdrukken(".");       Schrijfteller++;     }   }   mySerial.println(" " + Tekenreeks (Schrijfteller) + Bytes geschreven.);
}

Void ClearCBuffer ClearCBuffer ()
{   Voor (Byte A = 0; MaxInputBufferSize - 1; A++)     Cbuffer[A] = 0;
}

Byte SerInputHandler()
{   Byte Resultaat = 0;   Int C;   Int D;   Int A;   Int B;   Resultaat = 0;   Als (CheckforserialEvent())   {     Als ((NumberInput) En Niet (Gegevensinvoer) En Niet (StrInput StrInput))    Alleen getallen     {       Sbuffer = "";       Waarde = 0;       StrInput StrInput = Valse;       NumberInput = Valse;       Gegevensinvoer = Valse;       EnterInput = Valse;       A = 0;       B = 0;       C = 0;       D = 0;       Sbuffer = Cbuffer; Zahl wird AUCH ! in SBUFFER übernommen, valt benötigt.       Als (Ccount == 1) {         Waarde  = Cbuffer[0] - 48 ;       }       Als (Ccount == 2) {         A = Cbuffer[0] - 48 ;         A = A * 10;         B = Cbuffer[1] - 48 ;         Waarde = A + B;       }       Als (Ccount == 3) {         A = Cbuffer[0] - 48 ;         A = A * 100;         B = Cbuffer[1] - 48 ;         B = B * 10;         C = Cbuffer[2] - 48 ;         Waarde = A + B + C;       }       Als (Ccount == 4) {         A = Cbuffer[0] - 48 ;         A = A * 1000;         B = Cbuffer[1] - 48 ;         B = B * 100;         C = Cbuffer[2] - 48 ;         C = C * 10;         D = Cbuffer[3] - 48 ;         Waarde = A + B + C + D;       }       Als (Ccount >= 5)       {         Sbuffer = "";         Waarde = 0;         Sbuffer = Cbuffer;         ClearCBuffer ClearCBuffer;         Resultaat = 2;       } Anders       {         ClearCBuffer ClearCBuffer;         Ccount = 0;         Resultaat = 1;                                                Retourcode nummer         NumberInput = Valse;         StrInput StrInput = Valse;         Gegevensinvoer = Valse;         EnterInput = Valse;         Ccount = 0;         Terug Resultaat;       }     }     Als ((StrInput StrInput) En Niet (Gegevensinvoer))                          Alleen tekenreeksinvoer     {       Sbuffer = "";       Sbuffer = Cbuffer;       Waarde = 0;       StrInput StrInput = Valse;       NumberInput = Valse;       Gegevensinvoer = Valse;       EnterInput = Valse;       Ccount = 0;       ClearCBuffer ClearCBuffer;       Resultaat = 2;                                                 Retourcode nummer     }     Als (Gegevensinvoer) {       Sbuffer = "";       Sbuffer = Cbuffer;       Waarde = 0;       StrInput StrInput = Valse;       NumberInput = Valse;       Gegevensinvoer = Valse;       EnterInput = Valse;       Ccount = 0;       ClearCBuffer ClearCBuffer;       Resultaat = 3;                                               Retourcode nummer     }     Als ((EnterInput) En Niet (StrInput StrInput) En Niet (NumberInput) En Niet (Gegevensinvoer))     {       Sbuffer = "";       Waarde = 0;       Ccount = 0;       ClearCBuffer ClearCBuffer;       Resultaat = 4;                                               Retourcode nummer     }     NumberInput = Valse;     StrInput StrInput = Valse;     Gegevensinvoer = Valse;     EnterInput = Valse;     Ccount = 0;     Terug Resultaat;   }   Terug Resultaat;   CheckforSerialEvent beëindigen
}

Eingabebuffer

Booleaanse CheckforserialEvent()
{   Terwijl (mySerial.Beschikbaar()) {     krijgen de nieuwe byte:     TBuffer TBuffer = mySerial.Lezen();     Als (TBuffer TBuffer > 9 && TBuffer TBuffer < 14)     {       Cbuffer[Ccount] = 0;       TBuffer TBuffer = 0;       Als (EchoMode)       {         mySerial.Afdrukken(Char(13));         mySerial.Flush();       }       Als (Directafdruk)       {         mySerial.println("");         DirectprintLine = 0;         DirectprintROW = DirectprintROW + 1;         Als ( DirectprintROW > 3)         {           Directafdruk = Valse;           Lcd.noCursor();           Lcd.noBlink();           Sbuffer = "";           Waarde = 0;         } Anders         {           Lcd.Cursor();           Lcd.Knipperen();           Lcd.setCursor(0, DirectprintROW);         }       }       EnterInput = Waar;       Terug Waar;     } Anders Als (TBuffer TBuffer > 47 && TBuffer TBuffer < 58 )     {       Als ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer TBuffer;         Ccount++;         Als ((Directafdruk))         {           Lcd.Afdrukken(Char(TBuffer TBuffer));           DirectprintLine = DirectprintLine + 1;           Als ( Ccount > MaxInputBufferSize - 1)           {             Lcd.noCursor();             Lcd.noBlink();           } Anders {             Lcd.Cursor();             Lcd.Knipperen();           }         }         Als (EchoMode) {           mySerial.Afdrukken(Char(TBuffer TBuffer));           mySerial.Flush();         }       } Anders {         mySerial.Afdrukken("#");       }       Aantalinvoer gedetecteerd       NumberInput = Waar;     }     Anders Als (TBuffer TBuffer > 64 && TBuffer TBuffer < 123 )     {       Als ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer TBuffer;         Ccount++;         Als ((Directafdruk))         {           Lcd.Afdrukken(Char(TBuffer TBuffer));           DirectprintLine = DirectprintLine + 1;           Als ( Ccount > MaxInputBufferSize - 1)           {             Lcd.noCursor();             Lcd.noBlink();           } Anders {             Lcd.Cursor();             Lcd.Knipperen();           }         }         Als (EchoMode) {           mySerial.Afdrukken(Char(TBuffer TBuffer));           mySerial.Flush();         }       } Anders {         mySerial.Afdrukken("#");       }       als (DebugMode) { mySerial.println("Foutopsporing: Char over Serial ontvangen ");       mySerial.flush(); }       Character Char Input gedetecteerd       StrInput StrInput = Waar;     }     Anders Als ( (TBuffer TBuffer == 127 )  |  (TBuffer TBuffer == 8 ) )     {       Als ( DirectprintLine > 0 )       {         DirectprintLine = DirectprintLine - 1;         Lcd.setCursor(DirectprintLine, DirectprintROW);         Lcd.Afdrukken(" ");         Lcd.setCursor(DirectprintLine, DirectprintROW);       }       Als (( DirectprintLine == 0 ) & ( DirectprintROW > 0 ))       {         DirectprintROW = DirectprintROW - 1;         DirectprintLine = rLcdChr - 1;         Lcd.setCursor(DirectprintLine, DirectprintROW);       }       Als ( Ccount > 0)       {         Ccount--;         Cbuffer[Ccount] = 0;         Als ((Directafdruk))         {           Als ( Ccount > MaxInputBufferSize - 1)           {             Lcd.noCursor();             Lcd.noBlink();           } Anders {             Lcd.Cursor();             Lcd.Knipperen();           }         }         Als (EchoMode) {           mySerial.Afdrukken("-");           mySerial.Flush();         }       }     }     Anders     {       Als ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer TBuffer;         Ccount++;         Als ((Directafdruk))         {           DirectprintLine = DirectprintLine + 1;           Als (TBuffer TBuffer < 128) {             Lcd.Afdrukken(Char(TBuffer TBuffer));           } Anders  {             Lcd.Afdrukken(Tekenreeks(TBuffer TBuffer));           }           Als ( Ccount > MaxInputBufferSize - 1)           {             Lcd.noCursor();             Lcd.noBlink();           } Anders {             Lcd.Cursor();             Lcd.Knipperen();           }         }         Als (EchoMode) {           mySerial.Afdrukken(Char(TBuffer TBuffer));           mySerial.Flush();         }       } Anders {         mySerial.Afdrukken("#");       }       Gegevensinvoer gedetecteerd       Gegevensinvoer = Waar;     }     Terug Valse;   }   Terug Valse;
}

Void Weergaveprocessor()  Bij blauw display wordt scrollen weggelaten, omdat dit alleen maar "smeert"
{   Als (RefreshDisplay)   {     Lcd.Duidelijk();     RefreshDisplay = Valse;     Voor (Int B = 1; B <= LcdRows; B++)     {       Lcd.setCursor(0, B - 1);       mySerial.Afdrukken("Rij" + Tekenreeks(B) + ": ");       Voor (Int C = 0; C < rLcdChr; C++)       {         eeaddress = 0;         eeaddress = (Inhoud van DisplayBank * (rLcdChr) * LcdRows) + ((rLcdChr) * B) + C;         Waarde = 0;         Waarde = Eeprom.Lezen(eeaddress);         Als (Waarde > 31) Geen speciale personages tonen         {           mySerial.Afdrukken(Char(Waarde));           Lcd.Afdrukken(Char(Waarde));         } Anders         {           Lcd.Afdrukken(Char(32));         }       }       mySerial.println();     }   }
}

Void runrealTimeClock()    TIMEBASE
{   Real-time klok en countdown   lang vorigeMillis = 0;       zal opslaan laatste keer werd gemeten   byte SecDivider = 0;   Unsigned Lange currentMillis = millis();   Int StepValue = 0;   PWM-weergavebeheer   StepValue = 4 * FadeSeconds;   Als (currentMillis - previousMillis > StepValue)   {     previousMillis = currentMillis;     Als (Huidige helderheid < Doelhelderheid        )     {       Huidige helderheid = Huidige helderheid + 1;       analogSchrijven (Achtergrondlicht, Huidige helderheid);     } Anders Als (Huidige helderheid > Doelhelderheid)     {       Huidige helderheid = Huidige helderheid - 1;       analogSchrijven (Achtergrondlicht, Huidige helderheid);     }   }   Als (currentMillis - previousMillisB > 1000)   {     secondenlijn     previousMillisB = currentMillis;   }
}

Void DisplayBank ( Byte cobank)
{   Als (cobank  < Eeprombanks Eeprombanks )   {     RefreshDisplay = Waar;   Weergave-uitvoer initalize     Inhoud van DisplayBank = cobank;     mySerial.println("Bank" + Tekenreeks(cobank) + " wordt weergegeven op LCD");     MnuState MnuState = 0;     Sbuffer = "";     Waarde = 0;     mySerial.Flush();   } Anders   {     mySerial.println("Bank niet beschikbaar.");     Waarde = 0;     MnuState MnuState = 0;     Sbuffer = "";     mySerial.Flush();   }
}

Void SwitchProcessor()
{   Switchstate = digitaalLezen(SwitchPin);   Als ((!Switchstate) && (SwitchstateBuffer) && (Niet DisplayLock))Query-switch   {     SwitchstateBuffer = Valse;     Directafdruk = Valse;     Lcd.noCursor();     Lcd.noBlink();     SelectedMsg = SelectedMsg + 1;     Als (SelectedMsg >  Eeprombanks Eeprombanks - 1 )     {       SelectedMsg = 0;     }     Lcd.Duidelijk();     Lcd.setCursor(0, 0);     Lcd.Afdrukken("Bank: " + Tekenreeks(SelectedMsg) + "Geselecteerd");     Lcd.setCursor(0, 2);     Vertraging(10);     Waarde = DelayTOPWROFF;     Terwijl (digitaalLezen(SwitchPin) == 0)     {       Vertraging(1);       Als (Waarde > 0) {         Waarde = Waarde - 1;       };       Lcd.setCursor(0, 3);     }     DisplayBank(SelectedMsg);   }   Als (Switchstate)   {     SwitchstateBuffer = Waar;     vertraging(10);   }
}

 

Naast de hardware-extensie hebben we nu een kleine helperfunctie in het menu meer: De opdracht is "echo". Hiermee schakelen we de personages Echo functie van de Serial Interface aan en uit. Om de impact hiervan te illustreren, schakelt de volgende schermafbeelding eerst de functie Echo uit met de opdracht Echo. Dit wordt erkend met "Echo OFF". Met dezelfde opdracht wordt de functie Echo opnieuw geactiveerd. (Schakelfunctie). Dit wordt analoog bevestigd met "Echo ON". Vanaf dit punt wordt elk invoerteken erkend.

Menu Deel 4 - Weergave

 

Ik wens u veel plezier wederopbouw en, zoals altijd, tot de volgende keer.

DisplaysFür arduinoProjekte für fortgeschritteneSensoren

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery