Bluetooth Display - Teil 6 - AZ-Delivery

Welkom bij de zesde en laatste deel van onze Bluetooth Display-serie.

In dit deel heb ik gedacht iets leuks als een aanvulling op de vorige functies. In deze paragraaf zullen we ons wijden aan de energie en batterij Management van de unit. Dit als Aanvulling op het laatste deel, hebben we, om ons te laten zien als een Billboard op de rommelmarkt. Op de rommelmarkt, er zijn zelden plug-in, dus moeten we onze Display met een Powerbank. Maar wat als we opraken van energie, of we willen weten of de voedingsspanning 5 volt? Dit kan het beste gebeuren met behulp van één van de analoge ingangen voor het meten van de spanning van de accu direct in volt, de voedingsspanning op het Display.

Daarnaast is een energiebesparende functie zou handig zijn die we kunnen gebruiken met de ingebouwde controles (push-knop). Bovendien, onze Display wordt nu, eindelijk, is er een Debug-functie is uitgerust, die ons helpt om fouten te vinden op een technisch niveau, en een opluchting voor de uitbreidingen van de code met zich meebrengt.

Maar kan onze Vertoning alleen vast te leggen wanneer de spanning van de voeding, is het noodzakelijk om een kleine hardware-extensie. Deze uitbreiding bestaat uit de verbinding van de Analoge Poort 5 op de voedingsspanning VDD. Hierna de draad brug verbinding in de schakeling is te zien van de afbeelding met een rode pijl.

In dit deel nemen we een uitbreiding of aanpassing van de firmware bron-code in en upload de volgende Code op de Arduino:

 

#include <SPI.h>
#include <Draad.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <avr/slaap.h>

#define MaxInputBufferSize 20 // een maximum van 255 tekens aan te passen aan vlcdr
#define EEPROM 990

#define rLcdChr 20
#define LcdRows 4
#define interval 1000
#define achtergrond licht 5 // de Haven 5 achtergrondverlichting LED -
#definiëren VoltageSensingPin 5 // 
#define SwitchPin 2 // de Haven een 12-knop bericht selectie
#define DelayTOPWROFF 500 
#define MinOPVoltage 3.4

// EEprom-geheugen van de cel adressen voor configuratie
#define EEFadeSeconds  993
#define EEAdvertsecdelay 994
#define EEAdvertMsg 995
#define EEPINA 996
#define EEPINC 997
#define EEPINDD 998 

SoftwareSerial mySerial(7, 6); // RX, TX

//LiquidCrystal(rs, inschakelen, d4, d5, d6, d7) 
Liquid crystal lcd(8, 13, 12, 11, 10, 9);


//variabelen
byte display Bank inhoud = 0; 

//Seriële Invoer-Behandeling
char TBuffer;
char Cbuffer[MaxInputBufferSize+1];       //USB-Code Input Buffer
String Sbuffer = "";                      //USB-String Input Buffer,
int waarde;                                /- /USB-Nummeric Input Buffer
byte Ccount = 0;                          //Aantal ontvangen Tekens
byte Inptype = 0;
boolean StrInput = valse;
boolean aantal input = is vals;
boolean data-invoer, = false,;
boolean enter input = valse;
byte menu-keuze = 0;

//push-button control
is een boolean - schakelaar staat = op true;
boolean - schakelaar staat buffer = ware;
byte SelectedMsg = 0;

//Geven Debug informatie over seriële Interface
boolean debug mode = aan valse;
boolean - echo modus = waar,;

//EEPROM
int eeaddress;                 //EEPROM adres Aanwijzer
byte EEPROM banken = 0;          //Gebruikt voor de Berekening van de EEPROM Banken
//SerMnueControl
byte MnuState = 0;            // Maximum menu diepte 255 icl Sub
- byte van de geselecteerde Bank =0;

//Real-Time Klok 
lang vorige Millis = 0;       // slaan de laatste tijd werd gemeten met de
lange previousMillisB = 0;       // slaan de laatste tijd wat wordt gemeten:

//Display Management
boolean display lock = valse;
boolean direct print = valse;
byte directe printrow = 0;
byte direct-print = 0;

boolean vernieuwen display = valse;
byte FRMCheck = 0; // Gebruikt voor het Schrijven van de werking naar de eeprom, dus sla hosts cycli
// battery monitoring
float Spanning;
boolean power save mode = false,;

// PWM light control 

byte huidige helderheid = 0;
byte doel helderheid = 0;
byte FadeSeconds = 0; // standaard = 3

// auto-Scherm voor reclame doeleinden

boolean Reclame = valse;
byte AdvertMsg = 1; // Minimum is 1
byte Advertsecdelay = 0; // standaard = 6
byte advertentie secco onder = 0;


void setup()    {    EEPROM banken = EEPROM / ((rLcdChr) * LcdRows);   lcd.beginnen(rLcdChr, LcdRows);   lcd.duidelijk();   lcd -.setCursor(0, 0);   lcd -.print(" Bluetooth");   lcd -.setCursor(0, 1);   lcd -.print(" Display");   mySerial.beginnen(9600);   pinMode(SwitchPin,INPUT_PULLUP); // Voorproefje Auswahl Tekst aus EEprom   pinMode(BackgroundLight,OUTPUT); // Displaybeleuchtung / Display AN /AUS   digitalWrite(BackgroundLight,LAGE);   // lees Config   FadeSeconds = EEPROM.lezen(EEFadeSeconds);    Advertsecdelay =EEPROM.lezen(EEAdvertsecdelay);   AdvertMsg =EEPROM.lezen(EEAdvertMsg);   Currentbrightness = 0;   Targetbrightness = 0;   lcd.setCursor(0, 4);   als (DisplayLock) {  lcd -.print(Systeem" gesperrt"); }   // Verdere Installatie Routines / initalizing   lcd.setCursor(0, 0);   Targetbrightness = 255;   mySerial.flush();
}

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

void loop() 
{
SerialcommandProcessor();
runrealTimeClock();
Displayprocessor();
SwitchProcessor();
//End Main loop
}

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


void TextHeader(byte rowm)
{    mySerial.println("Tekst voor de Bank " + String( Selectedbank) + " RIJ " + String (rowm) + ":");   }

void SerialcommandProcessor()
{
int een;
Inptype = 0;
Inptype = SerInputHandler();
// 0 keine Rückgabe 
// Nummer 1 
// 2 String 
// 3 Gegevens

als ((Inptype > 0) & (!Directprint))                {    als (PowersaveMode) {    TogglePowerSave(valse);      }      MenueSelection = 0;    als (Reclame)    {      lcd.duidelijke();      Reclame = valse;      mySerial.print(F("Reclame "));      mySerial.println(F(" UIT."));      }    als ((MnuState < 2) && (Inptype == 2)) {Sbuffer.toUpperCase(); } // Voor het Eenvoudig Invoeren van Commando ' s    als ((Sbuffer == "DEBUG") && (MnuState == 0) && (Inptype == 2))   { MenueSelection = 1;}    als ((Sbuffer == "ECHO")&& (MnuState == 0) && (Inptype == 2))       { MenueSelection = 2;}    als ((Sbuffer == "S") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 3;}    / Wissen/ ALLE EEprom-Inhoud    als ((Sbuffer == "E") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 4;}    als ((Sbuffer == "JA") && (MnuState == 1)&& (Inptype == 2))      { MenueSelection = 5;}    als ((Sbuffer != "JA") && (MnuState == 1) && (Inptype == 2))     { MenueSelection = 6;}    //Bewerk Geselecteerde Inhoud    als ((Sbuffer == "W") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 7;}    als ((MnuState == 2) && (waarde  < EEPromBanks) && (Inptype == 1)) { MenueSelection = 8;}    als (MnuState == 3)                                               { MenueSelection = 9;}    als (MnuState == 4)                                               { MenueSelection = 10;}    //Weergave van de Geselecteerde Inhoud    als ((Sbuffer == "P") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 11;}    als ((MnuState == 5) && (Inptype == 1))                           { MenueSelection = 12;}    als ((Sbuffer == "R") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 13;}    als ((MnuState == 6) && (Inptype == 1))                           { MenueSelection = 14;}    als ((Sbuffer == "D") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 15;}    als ((Sbuffer == "Z") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 16;}    als ((Sbuffer == "B") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 17;}    als ((MnuState == 7) && (Inptype == 1))                           { MenueSelection = 18;}    als ((Sbuffer == "FADE") && (MnuState == 0) && (Inptype == 2))     { MenueSelection = 19;}    als (MnuState == 9)                                               { MenueSelection = 20;}    als (MnuState == 10)                                              { MenueSelection = 21;}    als ((Sbuffer == "Een") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 22;}    als ((Sbuffer == "ADVERTENTIE") && (MnuState == 0) && (Inptype == 2))  { MenueSelection = 23;}    als (MnuState == 11)                                              { MenueSelection = 24;}    als (MnuState == 12)                                              { MenueSelection = 25;}    als ((Sbuffer == "ADSEC") && (MnuState == 0) && (Inptype == 2))   { MenueSelection = 26;}    als (MnuState == 13)                                              { MenueSelection = 27;}    als ((Sbuffer == "ADMSG") && (MnuState == 0) && (Inptype == 2))   { MenueSelection = 28;}    als (MnuState == 14)                                              { MenueSelection = 29;}      schakelaar (MenueSelection)      {        geval 1:            {          mySerial.print("Debug ");          DebugMode = !DebugMode;          als (DebugMode) {          mySerial.println(F(" OP."));          EchoMode = valse;           } anders           {              mySerial.println(F(" UIT."));             EchoMode = ware;           }          mySerial.println("");          mySerial.flush();          waarde = 0;          MnuState = 0;          Sbuffer = "";          breken;        }        geval 2:            {           mySerial.print(F("Echo "));           EchoMode = !EchoMode;           als (EchoMode) {             mySerial.println(F(" OP."));             DebugMode = valse;             } anders             {              mySerial.println(F(" UIT."));             }           mySerial.println(F(""));           mySerial.flush();           waarde = 0;           MnuState = 0;           Sbuffer = "";           breken;        }        geval 3:            {          mySerial.println(F("Lees EEEPROM Inhoud:" ));          mySerial.flush();          voor (int een = 0; een < EEPromBanks; een++)            {              mySerial.println("EEPROM-Geheugen van de Bank: " + String(een) );              mySerial.flush();              voor (int b = 1; b <= LcdRows;b++)                 {                   mySerial.print("Rij " + String(b) +": ");                   mySerial.flush();                   voor (int c = 0; c <rLcdChr; c++)                       {                         eeaddress = 0;                           eeaddress = (een * (rLcdChr)* LcdRows) + ((rLcdChr) * b) + c;                         waarde = in het EEPROM.lezen(eeaddress);                         mySerial.print(char(waarde));                         mySerial.flush();                                              }                   mySerial.println(F(" "));                   mySerial.flush();                 }                                           }                    Sbuffer = "";          mySerial.println(F("Niet meer EEPROM Banken."));          mySerial.flush();          breken;        }        geval 4:            {          waarde = 0;          mySerial.print("Wissen EEPROM ");          mySerial.println(F("JA/NEE:"));          mySerial.flush();          MnuState = 1;          Sbuffer = "";          breken;        }        geval 5:            {         waarde = 0;       mySerial.print(F("uit te Wissen EEPROM "));         mySerial.println(F("Stand-by."));         mySerial.flush();         voor (int een = 0; een < EEPromBanks; een++)           {             //Memory-Bank een             mySerial.println("Clear Bank: " + String(een));             voor (int b = 1; b <= LcdRows;b++)               {                voor (int c = 0; c <rLcdChr; c++)                   {                     eeaddress = 0;                       eeaddress = (een * (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. "+ String(waarde) + " Bytes gewist");         mySerial.println("");         mySerial.flush();         Sbuffer = "";         MnuState = 0;         breken;        }        geval 6:        {         waarde = 0;         Sbuffer = "";         MnuState = 0;         mySerial.println(F("OP afbreken."));         mySerial.flush();         breken;          }        geval 7:        {        mySerial.println("EEPPROM Bank Nummer (0-" + String(EEPromBanks-1) + "):");        mySerial.flush();        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.flush();        waarde = 0;        MnuState = 9;        Sbuffer = "";        breken;        }                geval 11:        {        waarde = 0;      mySerial.println("EEPPROM Bank Nummer (0-" + String(EEPromBanks-1) + "):");        MnuState = 5;        Sbuffer = "";        mySerial.flush();        breken;        }         geval 12:        {        SelectedMsg = waarde;        DisplayBank(waarde);          breken;        }        geval 13:        {        waarde = 0;        mySerial.println("EEPPROM Bank Nummer (0-" + String(EEPromBanks-1) + "):");        MnuState = 6;        Sbuffer = "";        mySerial.flush();        breken;        }        geval 14:        {         een = waarde;         als ( een < EEPromBanks)         {         mySerial.println("Memory Bank: " + String(een) );         mySerial.flush();         voor (int b = 1; b <= LcdRows;b++)           {             mySerial.print("Rij " + String(b) +": ");             mySerial.flush();             voor (int c = 0; c <rLcdChr; c++)               {                 eeaddress = 0;                   eeaddress = (een * (rLcdChr)* LcdRows) + ((rLcdChr) * b) + c;                 waarde = in het EEPROM.lezen(eeaddress);                 mySerial.print(char(waarde));                 mySerial.flush();                                      }             mySerial.println(" ");             mySerial.flush();           }         } anders            {            mySerial.println(F("Waarde buiten het Bereik."));               }                     waarde = 0;              Sbuffer = "";         MnuState = 0;         breken;        }        geval 15:        {        // Direct pPrint weer te geven        Directprint = ware;        mySerial.println ("Directprint OP.");        als (Directprint)        {        DirectprintROW = 0;        DirectprintLine = 0;        lcd -.duidelijk();        lcd -.cursor();        lcd.knipperen();        }        waarde = 0;             Sbuffer = "";        MnuState = 0;        breken;         }        geval 16:        {        waarde = 0;             Sbuffer = "";        MnuState = 0;        breken;         }        geval 17:        {        mySerial.println(F("de Helderheid van het Display: (max 255)"));        MnuState = 7;        waarde = 0;        Sbuffer = "";        breken;        }        geval 18:        {        als ((waarde < 256))          {            Targetbrightness = waarde;            mySerial.println("Helderheid: " + String (Targetbrightness) + " Set");                  } anders           {            mySerial.println(F("Waarde buiten het Bereik."));                }        MnuState = 0;              waarde = 0;        Sbuffer = "";        breken;        }        geval 19:        {       mySerial.println(F("Fade Vertraging: (max 255 Sec)"));        MnuState = 12;        waarde = 0;        Sbuffer = "";        breken;        }        geval 20:        {        WriteEEPROM(Selectedbank,3);         waarde = 0;        MnuState = 0;        Sbuffer = "";        TextHeader(4);        mySerial.flush();        waarde = 0;        MnuState = 10;        Sbuffer = "";        breken;        }        geval 21:        {        WriteEEPROM(Selectedbank,4);         waarde = 0;        MnuState = 0;        Sbuffer = "";        breken;        }        geval 22:        {        MnuState = 0;        Sbuffer = "";        mySerial.println(F("Voer een NIEUWE BT Pin"));        mySerial.flush();        MnuState = 11;        breken;        }        geval 23:        {        Reclame  = !Reclame;             mySerial.print(F("Reclame "));        als (Reclame)          {          mySerial.println(F(" OP."));         } anders  { mySerial.println(F(" UIT.")); }        mySerial.flush();        waarde = 0;        MnuState = 0;        Sbuffer = "";        breken;        }                geval 24:        {         als ((waarde > 1000) & (waarde < 10000))        {        mySerial.print("NEW PIN "+ Sbuffer);              vertraging(1000);        mySerial.flush();               vertraging(1000);         mySerial.println("OP+PIN"+ Sbuffer);        vertraging(3000);        mySerial.flush();              } anders        {        waarde = 0;        Sbuffer = "";        mySerial.println(F("Waarde buiten het Bereik."));         }                 waarde = 0;        MnuState = 0;        Sbuffer = "";        breken;        }        geval 25:        {         als ((waarde > 0) & (waarde < 251))        {                FadeSeconds = waarde;        EEPROM.schrijven(EEFadeSeconds, FadeSeconds);        mySerial.println("Waarde " + String (waarde) + " ingesteld.");        } anders        {        waarde = 0;        Sbuffer = "";        mySerial.println(F("Waarde buiten het Bereik."));        }                 waarde = 0;        MnuState = 0;        Sbuffer = "";        breken;        }        geval 26:        {       mySerial.println(F("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 " + String (waarde) + " ingesteld.");        } anders        {        waarde = 0;        Sbuffer = "";        mySerial.println(F("Waarde buiten het Bereik."));         }                 waarde = 0;        MnuState = 0;        Sbuffer = "";        breken;        }        geval 28:        {       mySerial.println("ADMsgs: (max " + String (EEPromBanks) + ")");       MnuState = 14;        waarde = 0;        Sbuffer = "";        breken;        }        geval 29:        {         als ((waarde > 0) & (waarde < EEPromBanks +1))        {                AdvertMsg = waarde;        EEPROM.schrijven(EEAdvertMsg,AdvertMsg);      mySerial.println("Waarde " + String (waarde) + " ingesteld.");        } anders        {        waarde = 0;        Sbuffer = "";        mySerial.println(F("Waarde buiten het Bereik."));         }                 waarde = 0;        MnuState = 0;        Sbuffer = "";        breken;        }        standaard:        {          als (DisplayLock)             {              lcd.helder();             DisplayLock = valse;            }          mySerial.println(F("-------Slim Bluetooth Display 1.1------"));          mySerial.println(F("S - Lees ALLE EEPROM Banken"));          mySerial.println(F("E - Wis ALLE EEPROM Banken"));          mySerial.println(F("W - Schrijven sel. EEPROM Bank"));          mySerial.println(F("R - Lees sel. EEPROM Bank"));          mySerial.println(F("P - Print EEPROM Bank op het Display"));          mySerial.println(F("----------------------------------------"));          mySerial.println(F("D - Direct Print"));          mySerial.println("B - Display Helderheid Huidige Waarde: " + String (Currentbrightness));          mySerial.println(F("----------------------------------------"));          mySerial.println(F("A - Bluetooth-PIN"));          mySerial.println(F("Andere: RECLAME,ADSEC,ADMSG,VERVAGEN,ECHO"));           mySerial.println(F("----------------------------------------"));          mySerial.println(F("Typ Cmd en druk op Enter."));          mySerial.flush();          als (DebugMode)            {                  mySerial.println("Debug: CmdProc Einde Typ: " + String(Inptype) + " Inhoud: " +Sbuffer);            mySerial.flush();           }          MnuState = 0;          waarde = 0;          Sbuffer = "";        }     }    } // Eingabe erkannt
}

void WriteEEPROM(byte FBank,byte FRow)
{
byte Writecounter;

Writecounter = 0; 
 mySerial.print("Opslaan ");        voor (int c = 0; c <rLcdChr; c++)           {            eeaddress = 0;              eeaddress = (FBank * (rLcdChr)* LcdRows) + ((rLcdChr) * FRow) + c;              waarde = in het EEPROM.lezen(eeaddress);            als (Sbuffer[c] != waarde)            {            in het EEPROM.schrijven(eeaddress,Sbuffer[c]);            mySerial.print(".");            Writecounter++;              }           }        mySerial.println(" " + String (Writecounter) + " geschreven Bytes.");     }

void 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 ((NumberInput) en niet (DataInput)en niet (StrInput))     //Getallen alleen        {        Sbuffer = "";        waarde = 0;        StrInput = valse;        NumberInput = valse;        DataInput = 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) {           een = Cbuffer[0] - 48 ;           een = een * 10;          b = Cbuffer[1] - 48 ;          waarde = van een + b;          }        als (Ccount == 3) {           een = Cbuffer[0] - 48 ;           een = een * 100;          b = Cbuffer[1] - 48 ;          b = b * 10;          c = Cbuffer[2] - 48 ;          waarde = a + 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 = van een + b + c + d;          }        als (Ccount >= 5)            {            Sbuffer = "";            waarde = 0;            Sbuffer = Cbuffer;            ClearCBuffer;            resultaat = 2;             } anders           {            ClearCBuffer;            als (DebugMode)              {             mySerial.println("Debug: Aantal: "+String(waarde));              mySerial.flush();            }            Ccount = 0;            resultaat = 1;                                                //Aantal Retournummer            NumberInput = valse;            StrInput = valse;            DataInput = valse;            EnterInput = valse;             Ccount = 0;            return resultaat;            }        }      als ((StrInput) en niet (DataInput))                          //String Ingang        {         Sbuffer = "";         Sbuffer = Cbuffer;          als (DebugMode)              {                mySerial.println("Debug: String: "+Sbuffer);               mySerial.flush();             }        waarde = 0;        StrInput = valse;        NumberInput = valse;        DataInput = valse;        EnterInput = valse;         Ccount = 0;        ClearCBuffer;        resultaat = 2;                                                 //Aantal Retournummer        }       als (DataInput) {        Sbuffer = "";        Sbuffer = Cbuffer;        waarde = 0;        StrInput = valse;        NumberInput = valse;        DataInput = valse;        EnterInput = false;         als (DebugMode)           {            mySerial.println("Debug: Gegevens: "+Sbuffer);             mySerial.flush();          }        Ccount = 0;        ClearCBuffer;        resultaat = 3;                                               //Aantal Retournummer        }        als ((EnterInput) en niet (StrInput) en niet (NumberInput) en niet (DataInput))        {        Sbuffer = "";        waarde = 0;        als (DebugMode)           {            mySerial.println(F("Debug: Alleen Enter gedrukt"));             mySerial.flush();          }        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);           }           }                als (DebugMode)            {                 mySerial.println("Debug: Invoeren ontvangen. Lengte: " + String(Ccount));           mySerial.flush();           }          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.afdrukken("#"); }            als (DebugMode) {        mySerial.println(F("Debug: Aantal Seriële ontvangen "));        mySerial.flush();       }       //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.afdrukken("#"); }          als (DebugMode) { mySerial.println(F("Debug: Char via een Seriële ontvangen "));       mySerial.flush(); }         //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.afdrukken("#"); }              als (DebugMode)           {             mySerial.println(F("Debug: Gegevens over een Seriële ontvangen "));            mySerial.flush();          }        //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;      BattMonitoring();
// 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-scherm");                 MnuState = 0;        Sbuffer = "";        waarde =0;        mySerial.flush();        } anders               {                 mySerial.println(F("Bank niet beschikbaar is."));                 waarde = 0;                 MnuState = 0;                 Sbuffer = "";                 mySerial.flush();               }        }

void TogglePowerSave(boolean staat)
{
mySerial.print("Powersave-Modus "); 
 als (!staat)     {     PowersaveMode = valse;    Targetbrightness = 255;    mySerial.println(F("UIT"));    } anders    {    PowersaveMode = ware;    Targetbrightness = 0;    mySerial.println(F("OP"));      }
}    void SwitchProcessor()
{
Switchstate = digitalRead(SwitchPin);
als ((!Switchstate) && (SwitchstateBuffer) && (niet DisplayLock))// Abfrage Schalter   {    SwitchstateBuffer = valse;    Reclame = valse;    Directprint = valse;    lcd.noCursor();    lcd.noBlink();    als (PowersaveMode)     {    TogglePowerSave(valse);     } anders    {    SelectedMsg = SelectedMsg + 1;      als (SelectedMsg >  EEPromBanks - 1 )        {       SelectedMsg = 0;       }     lcd -.duidelijk();     lcd -.setCursor(0,0);     lcd -.print("Bank: " + String(SelectedMsg) + " geselecteerd");     lcd -.setCursor(0,2);          lcd -.print("Systeem VDD: " + String(Spanning) + " V");     delay(10);     waarde = DelayTOPWROFF;          terwijl (digitalRead(SwitchPin) == 0)     {      vertraging(1);      als (waarde > 0) {waarde = waarde - 1;};      als (de waarde == 0 &&  niet PowersaveMode)      {      TogglePowerSave(true);      // als (SelectedMsg = 0 ) { SelectedMsg = EEPromBanks;} else { SelectedMsg = SelectedMsg - 1;};      lcd.setCursor(0,3);      lcd -.print("Power off OK ");         }      lcd -.setCursor(0,3);      als (waarde > 0) {lcd -.print("Power off: " + String(waarde /100)+ " sec ");};      }     DisplayBank(SelectedMsg);    }      }    als (Switchstate)      {       SwitchstateBuffer = true;     // delay(10);     }    }

void Powerdown ()  // Toggle Ingreep, als kritische Spanning is bereikt.
{
 lcd.helder();
 lcd -.setCursor(0,0);
 lcd -.print("Waarschuwing Batterij bijna leeg");
 lcd -.setCursor(0,2);
 lcd -.print("Opladen van de Batterij.");
 Directprint = valse;
 Reclame = valse;
 vertraging(5000);
 TogglePowerSave(ware);
}

leegte BattMonitoring()

{   int BatteryState;   BatteryState = analogRead(VoltageSensingPin);    // lees de input pin
 // Mittelung der Messwerte noch hinzufügen   Spanning = BatteryState * (0.00489);
 als (Spanning <= MinOPVoltage) 
{ 
Powerdown(); 
}

}

 

Es jetzt wird nicht nur, wie vorher, sterven aktuell ausgewählte Tekst Bank angezeigt, sondern darüber hinaus jetzt sterven aktuelle Betriebsspannung. (im Bild untern 4,97 Volt) sowie ein Teller, der beginnend mit 5 herunterzählt und bei bereiken van von 0 das Systeem herunterfährt. Ebenso wird das Systeem bei unterschreiben der im Quelltext angegeben Minimalbetriebsspannung heruntergefahren. Aktuell wird das Display zwar geleert, und die Hintergrundbeleuchtung abgeschaltet, es bleibt aber noch grundsätzlich mit Spannung versorgt. Wer möchte kann das Display per Feldeffekt Transistor auch noch spannungsfrei schalten. Ich habe aus Gründen der Einfachheit jedoch hierauf verzichtet.

Im Menu selbst ginbt es jetzt den "versteckten" Befehl "debug" der den Debug Modus durch einfache Eingabe des Befehls ein - und ausschaltet. Der nachfolgende Screenshot aus der Handige APP "BlueTerm" die ich für dieses Projekt sehr empfehlen kann, sieht man die Zusatzausgaben (Markiert mit dem Voorvoegsel "Debug:" ) matrijs ausgegeben werden, wenn der Modus eingeschaltet ist. Im Screenshot sieht man die Debugausgabe aller über Serielle Schnittstelle empfangenen Zeichen. (Hier debug)
Nach Empfang des Befehls debug wird der Debug Modus ausgeschaltet und mit "Debug OFF" quittiert.

Ich wünsche viel Spaß beim Nachbauen. Bis bald beim nächsten Blog und beim nächsten Projekt. Ich hoffe Ihr hattet dus viel Spaß beim Nachbauen wie ich beim entwickeln.

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