Bluetooth Display - Teil 5 - AZ-Delivery

Welkom bij het vijfde en voorlaatste deel van de Bluetooth-weergaveserie.

In het deel van vandaag heb ik iets speciaals bedacht. Het idee kwam bij me op een rommelmarkt waar ik wat oude dingen wilde verkopen. Ik dacht dat het een goed idee zou zijn om het scherm niet thuis te kunnen gebruiken, maar om het scherm te gebruiken als een "blikvanger" op een rommelmarkt. Tenslotte heeft niet iedereen zoiets en ook in de reguliere handel heb ik geen vergelijkbare weergave gevonden. Maar wat moet ik op het display tonen op een rommelmarkt?

Het beste is een verkoopsticker! Hoe zit het met berichten als: Elke CD kost slechts xx euro, gevolgd door een ander bericht zoals: Elke dvd xx euro. Het geheel ziet er het beste uit als ticker ticker, dus de individuele letters worden langzaam opgebouwd van links naar rechts totdat het hele bericht leesbaar is. Een echte blikvanger voor elke rommelmarkt! Om deze functie te implementeren, breiden we onze code nu uit met de functie "Reclame".


Daarom uploaden we eerst de code die is uitgebreid met de functie "Reclame" naar ons hardwareplatform:

 

 

# opnemen <SPI.h>
# opnemen <Draad.h>
# opnemen <SoftwareSerieel.h>
# opnemen <EEPROM.h>
# opnemen <Vloeibaar Kristal.h>
# opnemen <avr/slapen.h>


#define MaxInputBufferSize 20 // maximaal 255 tekens aanpassen aan vlcdr
#define EEpromSize 990

#define rLcdChr 20
#define LcdRijen 4
#define interval 1000
#define Achtergrondlicht 5 // Poort 5 achtergrondverlichting LED
#define SwitchPin 2 // Poort 12 knop berichtselectie

// EEprom geheugenceladressen voor configuratie
#define EEFadeSeconds  993
#define EEAdvertsecdelay 994
#define EEAdvertMsg 995
#define EEPINA 996
#define EEPINC 997
#define EEPINDD 998


SoftwareSerieel mySerial(7, 6); // RX, TX
Vloeibaar Kristal lcd(8, 13, 12, 11, 10, 9);


// variabelen
byte DisplayBankContent = 0;

// Seriële invoerafhandeling
char TBuffer;
char Cbuffer[MaxInputBufferSize + 1];     // USB-code invoerbuffer
String Sbuffer = "";                      // USB string invoerbuffer
int waarde;                                // USB numerieke invoerbuffer
byte Ccount = 0;                          // Aantal ontvangen tekens
byte Inptype = 0;
Boolean StrInput = fout;
Boolean Nummer Input = fout;
Boolean Data-invoer = fout;
Boolean Enter-invoer = fout;
byte Menu selectie = 0;

// drukknopbediening
Boolean Schakelstatus = waar;
Boolean SchakelstatusBuffer = waar;
byte Geselecteerd Bericht = 0;

// Geef foutopsporingsinformatie via de seriële interface
Boolean DebugMode = fout;
Boolean EchoMode = waar;

// EEPROM
int adres;                 // EEPROM-adreswijzer
byte EEPromBanken = 0;          // Gebruikt voor het berekenen van de EEPROM-banken
// SerMnueControl
byte MnuState = 0;            // Maximale menudiepte 255 icl sub
byte Selectedbank = 0;

// Real-time klok
lang vorige Millis = 0;       // zal de laatste keer opslaan werd gemeten
lang vorige MillisB = 0;       // zal de laatste keer opslaan werd gemeten

// Displaybeheer
Boolean DisplayLock = fout;
Boolean Directprint = fout;
byte DirectprintROW = 0;
byte DirectprintLine = 0;

Boolean Vernieuwen Display = fout;
byte FRMCheck = 0; // Gebruikt voor schrijfbewerkingen naar eeprom, dus bespaar hostcycli
// Batterijbewaking
zweven Spanning;
Boolean PowersaveMode = fout;

// PWM-lichtregeling

byte Huidige helderheid = 0;
byte Doel helderheid = 0;
byte FadeSeconds = 0; // standaard = 3

// Auto display bijv. Voor reclamedoeleinden

Boolean Adverteren = fout;
byte AdvertMsg = 1; // minimaal 1
byte Advertsecdelay = 0; // standaard = 6
byte Advertentieteller = 0;


nietig instellen()
{   EEPromBanken = EEpromSize / ((rLcdChr) * LcdRijen);   lcd.beginnen(rLcdChr, LcdRijen);   lcd.duidelijk();   lcd.setCursor(0, 0);   lcd.afdrukken("Bluetooth");   lcd.setCursor(0, 1);   lcd.afdrukken("Display");   mySerial.beginnen(9600);   pinMode(SwitchPin, INPUT_PULLUP); // Taster Auswahl Tekst aus EEprom   pinMode(Achtergrondlicht, UITGANG); // Displaybeleuchtung / Display AN / AUS   digitalWrite(Achtergrondlicht, LAAG);   // lees Config   FadeSeconds = EEPROM.lezen(EEFadeSeconds);   Advertsecdelay = EEPROM.lezen(EEAdvertsecdelay);   AdvertMsg = EEPROM.lezen(EEAdvertMsg);   Huidige helderheid = 0;   Doelhelderheid = 0;   lcd.setCursor(0, 4);   als (DisplayLock) {     lcd.afdrukken("Systeem gesperrt");   }   // Verdere setuproutines / initialiseren   lcd.setCursor(0, 0);   Doelhelderheid = 255;   mySerial.blozen();
}



// ###################################################################################################### //

nietig lus()

{   Seriële opdracht Processor();   runrealTimeClock();   Displayprocessor();   Schakelaar Processor();   // Powermgmt ();   // Einde hoofdlus
}

// ###################################################################################################### //


nietig TextHeader(byte rowm)
{   mySerial.println("Tekst voor bank" + Draad( Selectedbank) + "ROW" + Draad (rowm) + ":");
}

nietig Seriële opdracht Processor()
{   int een;   Inptype = 0;   Inptype = SerInputHandler();   // 0 keine Rückgabe   // 1 nummer   // 2 String   // 3 gegevens   als ((Inptype > 0) & (!Directprint))   {     Menu selectie = 0;     als (Adverteren)     {       lcd.Doorzichtig();       Adverteren = fout;       mySerial.afdrukken("Adverteren");       mySerial.println(" UIT.");     }     als ((MnuState < 2) && (Inptype == 2)) {       Sbuffer.toUpperCase();  // Voor eenvoudig invoeren van opdrachten     }     als ((Sbuffer == "DEBUG") && (MnuState == 0) && (Inptype == 2))   {       Menu selectie = 1;     }     als ((Sbuffer == "ECHO") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 2;     }     als ((Sbuffer == "S") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 3;     }     // ALLE EEprom-inhoud wissen     als ((Sbuffer == "E") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 4;     }     als ((Sbuffer == "JA") && (MnuState == 1) && (Inptype == 2))      {       Menu selectie = 5;     }     als ((Sbuffer != "JA") && (MnuState == 1) && (Inptype == 2))     {       Menu selectie = 6;     }     // Bewerk geselecteerde inhoud     als ((Sbuffer == "W") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 7;     }     als ((MnuState == 2) && (waarde  < EEPromBanken) && (Inptype == 1)) {       Menu selectie = 8;     }     als (MnuState == 3)                                               {       Menu selectie = 9;     }     als (MnuState == 4)                                               {       Menu selectie = 10;     }     // Toon geselecteerde inhoud     als ((Sbuffer == "P") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 11;     }     als ((MnuState == 5) && (Inptype == 1))                           {       Menu selectie = 12;     }     als ((Sbuffer == "R") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 13;     }     als ((MnuState == 6) && (Inptype == 1))                           {       Menu selectie = 14;     }     als ((Sbuffer == "D") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 15;     }     als ((Sbuffer == "Z") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 16;     }     als ((Sbuffer == "B") && (MnuState == 0) && (Inptype == 2))       {       Menu selectie = 17;     }     als ((MnuState == 7) && (Inptype == 1))                           {       Menu selectie = 18;     }     als ((Sbuffer == "VERVAGEN") && (MnuState == 0) && (Inptype == 2))     {       Menu selectie = 19;     }     als (MnuState == 9)                                               {       Menu selectie = 20;     }     als (MnuState == 10)                                              {       Menu selectie = 21;     }     als ((Sbuffer == "ADVERTENTIE") && (MnuState == 0) && (Inptype == 2))  {       Menu selectie = 23;     }     als (MnuState == 11)                                              {       Menu selectie = 24;     }     als (MnuState == 12)                                              {       Menu selectie = 25;     }     als ((Sbuffer == "ADSEC") && (MnuState == 0) && (Inptype == 2))   {       Menu selectie = 26;     }     als (MnuState == 13)                                              {       Menu selectie = 27;     }     als ((Sbuffer == "ADMSG") && (MnuState == 0) && (Inptype == 2))   {       Menu selectie = 28;     }     als (MnuState == 14)                                              {       Menu selectie = 29;     }     schakelaar (Menu selectie)     {       geval 1:         {           mySerial.afdrukken("Debug");           DebugMode = !DebugMode;           als (DebugMode) {             mySerial.println(" AAN.");             EchoMode = fout;           } anders           {             mySerial.println(" UIT.");             EchoMode = waar;           }           mySerial.println("");           mySerial.blozen();           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       geval 2:         {           mySerial.afdrukken("Echo");           EchoMode = !EchoMode;           als (EchoMode) {             mySerial.println(" AAN.");             DebugMode = fout;           } anders           {             mySerial.println(" UIT.");           }           mySerial.println("");           mySerial.blozen();           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       geval 3:         {           mySerial.println("Lees EEEPROM-inhoud:" );           mySerial.blozen();           voor (int een = 0; een < EEPromBanken; een++)           {             mySerial.println("EEPROM-geheugenbank:" + Draad(een) );             mySerial.blozen();             voor (int b = 1; b <= LcdRijen; b++)             {               mySerial.afdrukken("Row" + Draad(b) + ": ");               mySerial.blozen();               voor (int c = 0; c < rLcdChr; c++)               {                 adres = 0;                 adres = (een * (rLcdChr) * LcdRijen) + ((rLcdChr) * b) + c;                 waarde = EEPROM.lezen(adres);                 mySerial.afdrukken(char(waarde));                 mySerial.blozen();               }               mySerial.println(" ");               mySerial.blozen();             }           }           Sbuffer = "";           mySerial.println("Geen EEPROM-banken meer beschikbaar.");           mySerial.blozen();           breken;         }       geval 4:         {           waarde = 0;           mySerial.afdrukken("EEPROM wissen");           mySerial.println("JA NEE:");           mySerial.blozen();           MnuState = 1;           Sbuffer = "";           breken;         }       geval 5:         {           waarde = 0;           mySerial.afdrukken("EEPROM wissen");           mySerial.println("Stand-by.");           mySerial.blozen();           voor (int een = 0; een < EEPromBanken; een++)           {             // Geheugenbank a             mySerial.println("Bank wissen:" + Draad(een));             voor (int b = 1; b <= LcdRijen; b++)             {               voor (int c = 0; c < rLcdChr; c++)               {                 adres = 0;                 adres = (een * (rLcdChr) * LcdRijen) + ((rLcdChr ) * b) + c;                 FRMCheck = EEPROM.lezen(adres);                 als (FRMCheck > 0)                 {                   EEPROM.schrijven(adres, 00); // Formatierung                   mySerial.afdrukken(".");                   waarde++;                   vertraging(30);                   mySerial.blozen();                 }               }             }             mySerial.println("");             mySerial.blozen();           }           mySerial.println("");           mySerial.println("Afgewerkt. " + Draad(waarde) + "Bytes gewist");           mySerial.println("");           mySerial.blozen();           Sbuffer = "";           MnuState = 0;           breken;         }       geval 6:         {           waarde = 0;           Sbuffer = "";           MnuState = 0;           mySerial.println("OP afbreken.");           mySerial.blozen();           breken;         }       geval 7:         {           mySerial.println("EEPPROM Banknummer (0-" + Draad(EEPromBanken - 1) + "):");           mySerial.blozen();           MnuState = 2;           waarde = 0;           Sbuffer = "";           breken;         }       geval 8:         {           Selectedbank = waarde;           TextHeader(1);           MnuState = 3;           Sbuffer = "";           waarde = 0;           breken;         }       geval 9:         {           WriteEEPROM(Selectedbank, 1);           TextHeader(2);           waarde = 0;           MnuState = 4;           Sbuffer = "";           breken;         }       geval 10:         {           WriteEEPROM(Selectedbank, 2);           waarde = 0;           MnuState = 0;           Sbuffer = "";           TextHeader(3);           mySerial.blozen();           waarde = 0;           MnuState = 9;           Sbuffer = "";           breken;         }       geval 11:         {           waarde = 0;           mySerial.println("EEPPROM Banknummer (0-" + Draad(EEPromBanken - 1) + "):");           MnuState = 5;           Sbuffer = "";           mySerial.blozen();           breken;         }       geval 12:         {           Geselecteerd Bericht = waarde;           DisplayBank(waarde);           breken;         }       geval 13:         {           waarde = 0;           mySerial.println("EEPPROM Banknummer (0-" + Draad(EEPromBanken - 1) + "):");           MnuState = 6;           Sbuffer = "";           mySerial.blozen();           breken;         }       geval 14:         {           een = waarde;           als ( een < EEPromBanken)           {             mySerial.println("Geheugenbank:" + Draad(een) );             mySerial.blozen();             voor (int b = 1; b <= LcdRijen; b++)             {               mySerial.afdrukken("Row" + Draad(b) + ": ");               mySerial.blozen();               voor (int c = 0; c < rLcdChr; c++)               {                 adres = 0;                 adres = (een * (rLcdChr) * LcdRijen) + ((rLcdChr) * b) + c;                 waarde = EEPROM.lezen(adres);                 mySerial.afdrukken(char(waarde));                 mySerial.blozen();               }               mySerial.println(" ");               mySerial.blozen();             }           } anders           {             mySerial.println("Waarde buiten bereik.");           }           waarde = 0;           Sbuffer = "";           MnuState = 0;           breken;         }       geval 15:         {           // Directe afdruk afdrukken           Directprint = waar;           mySerial.println ("Directprint AAN.");           als (Directprint)           {             DirectprintROW = 0;             DirectprintLine = 0;             lcd.Doorzichtig();             lcd.cursor();             lcd.knipperen();           }           waarde = 0;           Sbuffer = "";           MnuState = 0;           breken;         }       geval 16:         {           waarde = 0;           Sbuffer = "";           MnuState = 0;           breken;         }       geval 17:         {           mySerial.println("Displayhelderheid: (max 255)");           MnuState = 7;           waarde = 0;           Sbuffer = "";           breken;         }       geval 18:         {           als ((waarde < 256))           {             Doelhelderheid = waarde;             mySerial.println("Helderheid:" + Draad (Doelhelderheid) + "Set");           } anders           {             mySerial.println("Waarde buiten bereik.");           }           MnuState = 0;           waarde = 0;           Sbuffer = "";           breken;         }       geval 19:         {           mySerial.println("Fade Delay: (max 255 Sec)");           MnuState = 12;           waarde = 0;           Sbuffer = "";           breken;         }       geval 20:         {           WriteEEPROM(Selectedbank, 3);           waarde = 0;           MnuState = 0;           Sbuffer = "";           TextHeader(4);           mySerial.blozen();           waarde = 0;           MnuState = 10;           Sbuffer = "";           breken;         }       geval 21:         {           WriteEEPROM(Selectedbank, 4);           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       geval 23:         {           Adverteren  = !Adverteren;           mySerial.afdrukken("Adverteren");           als (Adverteren)           {             mySerial.println(" AAN.");           } anders  {             mySerial.println(" UIT.");           }           mySerial.blozen();           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       geval 25:         {           als ((waarde > 0) & (waarde < 251))           {             FadeSeconds = waarde;             EEPROM.schrijven(EEFadeSeconds, FadeSeconds);             mySerial.println("Waarde " + Draad (waarde) + "ingesteld.");           } anders           {             waarde = 0;             Sbuffer = "";             mySerial.println("Waarde buiten bereik.");           }           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       geval 26:         {           mySerial.println("ADverDelay: (max 255 sec)");           MnuState = 13;           waarde = 0;           Sbuffer = "";           breken;         }       geval 27:         {           als ((waarde > 0) & (waarde < 256))           {             Advertsecdelay = waarde;             EEPROM.schrijven(EEAdvertsecdelay, Advertsecdelay);             mySerial.println("Waarde " + Draad (waarde) + "ingesteld.");           } anders           {             waarde = 0;             Sbuffer = "";             mySerial.println("Waarde buiten bereik.");           }           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       geval 28:         {           mySerial.println("ADMsgs: (max" + Draad (EEPromBanken) + ")");           MnuState = 14;           waarde = 0;           Sbuffer = "";           breken;         }       geval 29:         {           als ((waarde > 0) & (waarde < EEPromBanken + 1))           {             AdvertMsg = waarde;             EEPROM.schrijven(EEAdvertMsg, AdvertMsg);             mySerial.println("Waarde " + Draad (waarde) + "ingesteld.");           } anders           {             waarde = 0;             Sbuffer = "";             mySerial.println("Waarde buiten bereik.");           }           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;         }       standaard:         {           als (DisplayLock)           {             lcd.Doorzichtig();             DisplayLock = fout;           }           mySerial.println("------- Smart Bluetooth Display 1.1 ------");           mySerial.println("S - Lees ALLE EEPROM-banken");           mySerial.println("E - ALLE EEPROM-banken wissen");           mySerial.println("W - Schrijf sel. EEPROM Bank");           mySerial.println("R - Lees selectie. EEPROM Bank");           mySerial.println("P - EEPROM-bank afdrukken op display");           mySerial.println("----------------------------------------");           mySerial.println("D - Direct afdrukken");           mySerial.println("B - Huidige waarde van helderheid weergeven:" + Draad (Huidige helderheid));           mySerial.println("----------------------------------------");           mySerial.println("Overige: ADVERT, ADSEC, ADMSG, ECHO");           mySerial.println("----------------------------------------");           mySerial.println("Typ Cmd en druk op Enter");           mySerial.blozen();           MnuState = 0;           waarde = 0;           Sbuffer = "";         }     }   } // Eingabe erkannt
}



nietig WriteEEPROM(byte FBank, byte Nu)
{   byte Schrijfteller;   Schrijfteller = 0;   mySerial.afdrukken("Opslaan");   voor (int c = 0; c < rLcdChr; c++)   {     adres = 0;     adres = (FBank * (rLcdChr) * LcdRijen) + ((rLcdChr) * Nu) + c;     waarde = EEPROM.lezen(adres);     als (Sbuffer[c] != waarde)     {       EEPROM.schrijven(adres, Sbuffer[c]);       mySerial.afdrukken(".");       Schrijfteller++;     }   }   mySerial.println(" " + Draad (Schrijfteller) + "Bytes geschreven.");

}


nietig ClearCBuffer ()

{   voor (byte een = 0; MaxInputBufferSize - 1; een++)     Cbuffer[een] = 0;
}


byte SerInputHandler()

{   byte resultaat = 0;   int c;   int d;   int een;   int b;   resultaat = 0;   als (CheckforserialEvent())   {     als ((Nummer Input) en niet (Data-invoer) en niet (StrInput))    //Alleen nummers     {       Sbuffer = "";       waarde = 0;       StrInput = fout;       Nummer Input = fout;       Data-invoer = fout;       Enter-invoer = fout;       een = 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) {         een = Cbuffer[0] - 48 ;         een = een * 10;         b = Cbuffer[1] - 48 ;         waarde = een + b;       }       als (Ccount == 3) {         een = Cbuffer[0] - 48 ;         een = een * 100;         b = Cbuffer[1] - 48 ;         b = b * 10;         c = Cbuffer[2] - 48 ;         waarde = een + b + c;       }       als (Ccount == 4) {         een = Cbuffer[0] - 48 ;         een = een * 1000;         b = Cbuffer[1] - 48 ;         b = b * 100;         c = Cbuffer[2] - 48 ;         c = c * 10;         d = Cbuffer[3] - 48 ;         waarde = een + b + c + d;       }       als (Ccount >= 5)       {         Sbuffer = "";         waarde = 0;         Sbuffer = Cbuffer;         ClearCBuffer;         resultaat = 2;       } anders       {         ClearCBuffer;         Ccount = 0;         resultaat = 1;                                                // Nummer retourcode         Nummer Input = fout;         StrInput = fout;         Data-invoer = fout;         Enter-invoer = fout;         Ccount = 0;         terug resultaat;       }     }     als ((StrInput) en niet (Data-invoer))                          // Alleen stringinvoer     {       Sbuffer = "";       Sbuffer = Cbuffer;       waarde = 0;       StrInput = fout;       Nummer Input = fout;       Data-invoer = fout;       Enter-invoer = fout;       Ccount = 0;       ClearCBuffer;       resultaat = 2;                                                 // Nummer retourcode     }     als (Data-invoer) {       Sbuffer = "";       Sbuffer = Cbuffer;       waarde = 0;       StrInput = fout;       Nummer Input = fout;       Data-invoer = fout;       Enter-invoer = fout;       Ccount = 0;       ClearCBuffer;       resultaat = 3;                                               // Nummer retourcode     }     als ((Enter-invoer) en niet (StrInput) en niet (Nummer Input) en niet (Data-invoer))     {       Sbuffer = "";       waarde = 0;       Ccount = 0;       ClearCBuffer;       resultaat = 4;                                               //Aantal Retournummer     }     NumberInput = valse;     StrInput = valse;     DataInput = valse;     EnterInput = valse;     Ccount = 0;     return resultaat;   }   return resultaat;   //Einde CheckforSerialEvent
}



// Eingabebuffer


boolean CheckforserialEvent()
{   terwijl (mySerial.beschikbaar()) {     // voor de nieuwe byte:     TBuffer = mySerial.lezen();     als (TBuffer > 9 && TBuffer < 14)     {       Cbuffer[Ccount] = 0;       TBuffer = 0;       als (EchoMode)       {         mySerial.print(char(13));         mySerial.flush();       }       als (Directprint)       {         mySerial.println("");         DirectprintLine = 0;         DirectprintROW = DirectprintROW + 1;         als ( DirectprintROW > 3)         {           Directprint = valse;           lcd.noCursor();           lcd.noBlink();           Sbuffer = "";           waarde = 0;         } anders         {           lcd -.cursor();           lcd.knipperen();           lcd.setCursor(0, DirectprintROW);         }       }       EnterInput = true;       return true;     } else als (TBuffer > 47 && TBuffer < 58 )     {       als ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer;         Ccount++;         als ((Directprint))         {           lcd -.print(char(TBuffer));           DirectprintLine = DirectprintLine + 1;           als ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } anders {             lcd -.cursor();             lcd-scherm.knipperen();           }         }         als (EchoMode) {           mySerial.print(char(TBuffer));           mySerial.flush();         }       } anders {         mySerial.print("#");       }       //Nummer Invoer gedetecteerd       NumberInput = waar;     }     anders als (TBuffer > 64 && TBuffer < 123 )     {       als ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer;         Ccount++;         als ((Directprint))         {           lcd -.print(char(TBuffer));           DirectprintLine = DirectprintLine + 1;           als ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } anders {             lcd -.cursor();             lcd-scherm.knipperen();           }         }         als (EchoMode) {           mySerial.print(char(TBuffer));           mySerial.flush();         }       } anders {         mySerial.print("#");       }       //Karakter Char Invoer gedetecteerd       StrInput = waar;     }     anders als ( (TBuffer == 127 )  |  (TBuffer == 8 ) )     {       als ( DirectprintLine > 0 )       {         DirectprintLine = DirectprintLine - 1;         lcd.setCursor(DirectprintLine, DirectprintROW);         lcd -.print(" ");         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 ((Directprint))         {           als ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } anders {             lcd -.cursor();             lcd-scherm.knipperen();           }         }         als (EchoMode) {           mySerial.print("-");           mySerial.flush();         }       }     }     anders     {       als ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer;         Ccount++;         als ((Directprint))         {           DirectprintLine = DirectprintLine + 1;           als (TBuffer < 128) {             lcd -.print(char(TBuffer));           } anders  {             lcd -.print(String(TBuffer));           }           als ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } anders {             lcd -.cursor();             lcd-scherm.knipperen();           }         }         als (EchoMode) {           mySerial.print(char(TBuffer));           mySerial.flush();         }       } anders {         mySerial.print("#");       }       //Data-Invoer gedetecteerd       DataInput = true;     }     return false;   }   return false;
}

void Displayprocessor()  // Bei Blauem Display wird auf Scrollfunktion verzichtet, da das nur "schmiert"
{   als (RefreshDisplay)   {     lcd.helder();     RefreshDisplay = false;     voor (int b = 1; b <= LcdRows; b++)     {       lcd -.setCursor(0, b - 1);       als (!Reclame) {         mySerial.print("Rij " + String(b) + ": ");       }       voor (int c = 0; c < rLcdChr; c++)       {         eeaddress = 0;         eeaddress = (DisplayBankContent * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c;         waarde = 0;         waarde = EEPROM.lezen(eeaddress);         als (waarde > 31) // Sonderzeichen nicht anzeigen         {           als (!Reclame) {             mySerial.print(char(waarde));           } anders {             vertraging(100);           }           lcd -.print(char(waarde));         } anders         {           lcd -.print(char(32));         }       }       als (!Reclame) {         mySerial.println();       }     }   }
}

void runrealTimeClock()    //TIJDBASIS
{   // Real-Time Klok en Timerfunctie   // lange previousMillis = 0; // slaat de laatste tijd werd gemeten   // byte SecDivider = 0;   unsigned long currentMillis = millis();   int StepValue = 0;   // PWM-Display Steuerung   StepValue = 4 * FadeSeconds;   als (currentMillis - previousMillis > StepValue)   {     previousMillis = currentMillis;     als (Currentbrightness < Targetbrightness        )     {       Currentbrightness = Currentbrightness + 1;       analogWrite (BackgroundLight, Currentbrightness);     } anders als (Currentbrightness > Targetbrightness)     {       Currentbrightness = Currentbrightness - 1;       analogWrite (BackgroundLight, Currentbrightness);     }   }   als (currentMillis - previousMillisB > 1000)   {     // sekundentakt     previousMillisB = currentMillis;     // Reclame     als (Reclame)     {       als (Advertseccounter >  Advertsecdelay)       {         Advertseccounter = 0;         DisplayBankContent = DisplayBankContent + 1;         als (DisplayBankContent > AdvertMsg - 1) {           DisplayBankContent = 0;         }         RefreshDisplay = waar;       } anders {         Advertseccounter = Advertseccounter + 1;       }     }   }
}

void DisplayBank ( byte cobank)
{   als (cobank  < EEPromBanks )   {     RefreshDisplay = true;   // Initalize Display Output     DisplayBankContent = cobank;     mySerial.println("Bank " + String(cobank) + " wordt weergegeven op het LCD -");     MnuState = 0;     Sbuffer = "";     waarde = 0;     mySerial.flush();   } anders   {     mySerial.println("Bank niet beschikbaar is.");     waarde = 0;     MnuState = 0;     Sbuffer = "";     mySerial.flush();   }
}

void SwitchProcessor()
{   Switchstate = digitalRead(SwitchPin);   als ((!Switchstate) && (SwitchstateBuffer) && (niet DisplayLock))// Abfrage Schalter   {     SwitchstateBuffer = valse;     Reclame = valse;     Directprint = valse;     lcd.noCursor();     lcd.noBlink();     SelectedMsg = SelectedMsg + 1;     als (SelectedMsg >  EEPromBanks - 1 )     {       SelectedMsg = 0;     }     lcd -.duidelijk();     lcd -.setCursor(0, 0);     lcd -.print("Bank: " + String(SelectedMsg) + " geselecteerd");     delay(10);     waarde = 50000;     , terwijl (digitalRead(SwitchPin) == 0)     {       vertraging(1);       als (waarde > 0) {         waarde = waarde - 1;       };       lcd.setCursor(0, 3);       als (waarde > 0) {         lcd -.print("Power off: " + String(waarde / 100) + " sec ");       };     }     DisplayBank(SelectedMsg);   }   als (Switchstate)   {     SwitchstateBuffer = true;     // delay(10);   }
}

 

Ab jetzt ist das Menu um 3 weitere Opties reicher: ADVERTENTIE, ADSEC, und ADMSG. Diese zeigt unser Menu unter "Andere" een:

Uitvoermenu op de smartphone

 

Als Handyapp empfehle ich zur Bedienung sterven App "BlueTerm" sterven es kostenlos aus dem Google Store zu beladen gibt. Um nun sterven Nachrichten nacheinander automatisch anzeigen zu lassen, ist wie folgt vorzugehen:

Als erstes wir setzen mit dem Befehl ADMSG sterven Anzahl een Nachrichten von 0 zählend, sterven nacheinander angezeigt werden sollen. Beispiel: Wir haben in den Bänken 0-2 insges. 3 Nachrichten confirmed, sterven angezeigt werden sollen.

Dann geben wir nach dem Befehl ADMSG die Zahl 4 ein. Als Quittierung bekommen wir sterven Ausgabe: "Waarde 2".

Danach geben wir den Befehl "ADSEC" ein gefolgt von einer Zahl tussen 1 en 255. Dabei steht sterven eingegebene Zahl für die Anzahl een Sekunden, bis sterven angezeigte aktuelle Nachricht durch die nächste konfigurierte Nachricht ersetzt wird. Als Beispiel geben wir hier "5" ein. Als Quittierung bekommen wir auch wieder hier sterven Ausgabe: "Waarde 5 set".

Als letzten Deel geben wir nun den Befehl "ADVERTENTIE" ein. Nach der Quittierung des Befehls durch "Reclame Op" wird nun immer im Wechsel automatisch sterven Nachrichten aus den Bänken 0-2 hintereinander anzeigt. Ausschalten lässt sich die Automatik durch erneute Eingabe des Befehls ADVERTENTIE oder durch einen druck auf den Nachrichtenwahltaster.



Ich wünsche viel Spaß beim Nachbauen und wie immer bis zum nächsten Mal.

 

DisplaysFür arduinoProjekte für fortgeschrittene

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