Display Bluetooth - Teil 5

Benvenuti nella quinta e penultima parte della serie di display Bluetooth.

Nella parte di oggi ho pensato a qualcosa di speciale. L'idea mi è venuta in un mercatino delle pulci dove volevo vendere alcune cose vecchie. Ho pensato che sarebbe stata una buona idea non essere in grado di utilizzare il display a casa, ma di utilizzare il display come "eye-catcher" in un mercato delle pulci. Dopotutto, non tutti hanno una cosa del genere, e nemmeno io ho trovato un display simile nel commercio regolare. Ma cosa devo mostrare sul display in un mercatino delle pulci?

La cosa migliore è un adesivo di vendita! Che ne dici di messaggi come: ogni CD solo xx euro, seguito da un altro messaggio come: ogni DVD xx euro. L'intero aspetto sembra migliore come ticker ticker, quindi le singole lettere si accumulano lentamente da sinistra a destra fino a quando l'intero messaggio è leggibile. Un vero colpo d'occhio per ogni mercato delle pulci! Per implementare questa funzione, stiamo espandendo il nostro codice per includere la funzione "Pubblicità".


Pertanto, prima cariciamo il codice esteso dalla funzione "Pubblicità" sulla nostra piattaforma hardware:

 

 

#include <SPI.B>
#include <filo.B>
#include <Serial software.B>
#include <EEPROM.B>
#include <a cristalli liquidi.B>
#include <avr/sonno.B>


#define MaxInputBufferSize 20 // adatta un massimo di 255 caratteri a vlcdr
#define EEpromSize 990

#define rLcdChr 20
#define LcdRows 4
#define intervallo 1000
#define sfondo chiaro 5 // LED retroilluminazione porta 5
#define SwitchPin 2 // Selezione messaggio pulsante porta 12

// Indirizzi di celle di memoria EEprom per la configurazione
#define EEFadeSeconds  993
#define EEAdvertsecdelay 994
#define EEAdvertMsg 995
#define EEPINA 996
#define EEPINC 997
#define EEPINDD 998


Serial software mySerial(7, 6); // RX, TX
a cristalli liquidi lcd(8, 13, 12, 11, 10, 9);


// variabili
byte Displaybank Content = 0;

// Gestione degli input seriali
carbonizzare TBuffer;
carbonizzare cBuffer[MaxInputBufferSize + 1];     // Buffer di input codice USB
stringa sBuffer = "";                      // Buffer di input stringa USB
int valore;                                // Buffer di input numerico USB
byte CCOUNT = 0;                          // Numero di caratteri ricevuti
byte Inptype = 0;
booleano strInput = falso;
booleano ingresso numero = falso;
booleano L'inserimento dei dati = falso;
booleano ENTERINPUT = falso;
byte Selezione di menu = 0;

// controllo a pulsante
booleano SwitchState = vero;
booleano SwitchState Buffer = vero;
byte SelectedMsg = 0;

// Fornisce informazioni di debug tramite interfaccia seriale
booleano modalità di debug = falso;
booleano modalità echo = vero;

// EEPROM
int eeaddress;                 // Puntatore indirizzo EEPROM
byte EEPromBanks = 0;          // Utilizzato per il calcolo delle banche EEPROM
// SerMnueControl
byte MnuState = 0;            // Profondità massima del menu 255 icl sub
byte Selectedbank = 0;

// Orologio in tempo reale
lungo previousMillis = 0;       // memorizzerà l'ultima volta che è stata misurata
lungo previousMillisB = 0;       // memorizzerà l'ultima volta che è stata misurata

// Gestione display
booleano DisplayLock = falso;
booleano direct Print = falso;
byte DirectprintROW = 0;
byte Linea di stampa diretta = 0;

booleano Display Refresh = falso;
byte FRMCheck = 0; // Utilizzato per scrivere operazioni su eeprom, quindi salva i cicli host
// Monitoraggio della batteria
galleggiante tensione;
booleano Modalità risparmio energetico = falso;

// Controllo della luce PWM

byte Luminosità corrente = 0;
byte Luminosità target = 0;
byte secondi dissolvenza = 0; // standard = 3

// Visualizzazione automatica, ad es. Per scopi pubblicitari

booleano pubblicità = falso;
byte AdvertMsg = 1; // minimo 1
byte Advertsecdelay = 0; // standard = 6
byte Advertseccounter = 0;


vuoto configurazione()
{   EEPromBanks = EEpromSize / ((rLcdChr) * LcdRows);   lcd.iniziare(rLcdChr, LcdRows);   lcd.chiaro();   lcd.setCursor(0, 0);   lcd.stampare("Bluetooth");   lcd.setCursor(0, 1);   lcd.stampare("Display");   mySerial.iniziare(9600);   pinMode(SwitchPin, INPUT_PULLUP); // Taster Auswahl Text aus EEprom   pinMode(BackgroundLight, PRODUZIONE); // Displaybeleuchtung / Display AN / AUS   digitalWrite(BackgroundLight, BASSO);   // leggi Config   FadeSeconds = EEPROM.leggere(EEFadeSeconds);   Advertsecdelay = EEPROM.leggere(EEAdvertsecdelay);   AdvertMsg = EEPROM.leggere(EEAdvertMsg);   Currentbrightness = 0;   Targetbrightness = 0;   lcd.setCursor(0, 4);   Se (DisplayLock) {     lcd.Stampa("System gesperrt");   }   // Altre routine di installazione / initalizzazione   lcd.setCursor(0, 0);   Targetbrightness = 255;   mySerial.sciacquone();
}



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

vuoto ciclo continuo()

{   SerialcommandProcessor();   runrealTimeClock();   Displayprocessor();   SwitchProcessor();   // powermgmt ();   // Termina ciclo principale
}

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


vuoto TextHeader(byte ROWm)
{   mySerial.println("Testo per banca" + Corda( Selectedbank) + "ROW" + Corda (ROWm) + ":");
}

vuoto SerialcommandProcessor()
{   int un';   Inptype = 0;   Inptype = SerInputHandler();   // 0 keine Rückgabe   // 1 Nummer   // 2 String   // 3 Dati   Se ((Inptype > 0) & (!DirectPrint))   {     MenueSelection = 0;     Se (Pubblicità)     {       lcd.chiaro();       Pubblicità = falso;       mySerial.Stampa("Pubblicità ");       mySerial.println("OFF".);     }     Se ((MnuState < 2) && (Inptype == 2)) {       sBuffer.toUpperCase();  // Per comandi di facile inserimento     }     Se ((sBuffer == "DEBUG") && (MnuState == 0) && (Inptype == 2))   {       MenueSelection = 1;     }     Se ((sBuffer == "ECO") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 2;     }     Se ((sBuffer == "S") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 3;     }     // Cancellazione di TUTTI i contenuti EEprom     Se ((sBuffer == "E") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 4;     }     Se ((sBuffer == "SÌ") && (MnuState == 1) && (Inptype == 2))      {       MenueSelection = 5;     }     Se ((sBuffer != "SÌ") && (MnuState == 1) && (Inptype == 2))     {       MenueSelection = 6;     }     // Modifica il contenuto selezionato     Se ((sBuffer == "W") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 7;     }     Se ((MnuState == 2) && (valore  < EEPromBanks) && (Inptype == 1)) {       MenueSelection = 8;     }     Se (MnuState == 3)                                               {       MenueSelection = 9;     }     Se (MnuState == 4)                                               {       MenueSelection = 10;     }     // Visualizza il contenuto selezionato     Se ((sBuffer == "P") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 11;     }     Se ((MnuState == 5) && (Inptype == 1))                           {       MenueSelection = 12;     }     Se ((sBuffer == "R") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 13;     }     Se ((MnuState == 6) && (Inptype == 1))                           {       MenueSelection = 14;     }     Se ((sBuffer == "D") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 15;     }     Se ((sBuffer == "Z") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 16;     }     Se ((sBuffer == "B") && (MnuState == 0) && (Inptype == 2))       {       MenueSelection = 17;     }     Se ((MnuState == 7) && (Inptype == 1))                           {       MenueSelection = 18;     }     Se ((sBuffer == "FADE") && (MnuState == 0) && (Inptype == 2))     {       MenueSelection = 19;     }     Se (MnuState == 9)                                               {       MenueSelection = 20;     }     Se (MnuState == 10)                                              {       MenueSelection = 21;     }     Se ((sBuffer == "ANNUNCIO") && (MnuState == 0) && (Inptype == 2))  {       MenueSelection = 23;     }     Se (MnuState == 11)                                              {       MenueSelection = 24;     }     Se (MnuState == 12)                                              {       MenueSelection = 25;     }     Se ((sBuffer == "ADSEC") && (MnuState == 0) && (Inptype == 2))   {       MenueSelection = 26;     }     Se (MnuState == 13)                                              {       MenueSelection = 27;     }     Se ((sBuffer == "ADMSG") && (MnuState == 0) && (Inptype == 2))   {       MenueSelection = 28;     }     Se (MnuState == 14)                                              {       MenueSelection = 29;     }     interruttore (MenueSelection)     {       Astuccio 1:         {           mySerial.Stampa("Debug");           Modalità di debug = !Modalità di debug;           Se (Modalità di debug) {             mySerial.println(" SU.");             EchoMode = falso;           } altro           {             mySerial.println("OFF".);             EchoMode = vero;           }           mySerial.println("");           mySerial.sciacquone();           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       Astuccio 2:         {           mySerial.Stampa("Eco ");           EchoMode = !EchoMode;           Se (EchoMode) {             mySerial.println(" SU.");             Modalità di debug = falso;           } altro           {             mySerial.println("OFF".);           }           mySerial.println("");           mySerial.sciacquone();           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       Astuccio 3:         {           mySerial.println("Leggi contenuto EEEPROM:" );           mySerial.sciacquone();           per (int un' = 0; un' < EEPromBanks; un'++)           {             mySerial.println("Banco di memoria EEPROM:" + Corda(un') );             mySerial.sciacquone();             per (int B = 1; B <= LcdRows; B++)             {               mySerial.Stampa("Fila" + Corda(B) + ": ");               mySerial.sciacquone();               per (int c = 0; c < rLcdChr; c++)               {                 eeaddress = 0;                 eeaddress = (un' * (rLcdChr) * LcdRows) + ((rLcdChr) * B) + c;                 valore = EEPROM.leggere(eeaddress);                 mySerial.Stampa(carbonizzare(valore));                 mySerial.sciacquone();               }               mySerial.println(" ");               mySerial.sciacquone();             }           }           sBuffer = "";           mySerial.println("Niente più banche EEPROM disponibili.");           mySerial.sciacquone();           rompere;         }       Astuccio 4:         {           valore = 0;           mySerial.Stampa("Cancellazione di EEPROM");           mySerial.println("SI NO:");           mySerial.sciacquone();           MnuState = 1;           sBuffer = "";           rompere;         }       Astuccio 5:         {           valore = 0;           mySerial.Stampa("Cancellazione di EEPROM");           mySerial.println("Pausa.");           mySerial.sciacquone();           per (int un' = 0; un' < EEPromBanks; un'++)           {             // Memory Bank a             mySerial.println("Cancella banca:" + Corda(un'));             per (int B = 1; B <= LcdRows; B++)             {               per (int c = 0; c < rLcdChr; c++)               {                 eeaddress = 0;                 eeaddress = (un' * (rLcdChr) * LcdRows) + ((rLcdChr ) * B) + c;                 FRMCheck = EEPROM.leggere(eeaddress);                 Se (FRMCheck > 0)                 {                   EEPROM.Scrivi(eeaddress, 00); // Formatierung                   mySerial.Stampa(".");                   valore++;                   ritardo(30);                   mySerial.sciacquone();                 }               }             }             mySerial.println("");             mySerial.sciacquone();           }           mySerial.println("");           mySerial.println("Finito." + Corda(valore) + "Byte cancellati");           mySerial.println("");           mySerial.sciacquone();           sBuffer = "";           MnuState = 0;           rompere;         }       Astuccio 6:         {           valore = 0;           sBuffer = "";           MnuState = 0;           mySerial.println("Interruzione OP.");           mySerial.sciacquone();           rompere;         }       Astuccio 7:         {           mySerial.println("Numero di banca EEPPROM (0-" + Corda(EEPromBanks - 1) + "):");           mySerial.sciacquone();           MnuState = 2;           valore = 0;           sBuffer = "";           rompere;         }       Astuccio 8:         {           Selectedbank = valore;           TextHeader(1);           MnuState = 3;           sBuffer = "";           valore = 0;           rompere;         }       Astuccio 9:         {           WriteEEPROM(Selectedbank, 1);           TextHeader(2);           valore = 0;           MnuState = 4;           sBuffer = "";           rompere;         }       Astuccio 10:         {           WriteEEPROM(Selectedbank, 2);           valore = 0;           MnuState = 0;           sBuffer = "";           TextHeader(3);           mySerial.sciacquone();           valore = 0;           MnuState = 9;           sBuffer = "";           rompere;         }       Astuccio 11:         {           valore = 0;           mySerial.println("Numero di banca EEPPROM (0-" + Corda(EEPromBanks - 1) + "):");           MnuState = 5;           sBuffer = "";           mySerial.sciacquone();           rompere;         }       Astuccio 12:         {           SelectedMsg = valore;           Displaybank(valore);           rompere;         }       Astuccio 13:         {           valore = 0;           mySerial.println("Numero di banca EEPPROM (0-" + Corda(EEPromBanks - 1) + "):");           MnuState = 6;           sBuffer = "";           mySerial.sciacquone();           rompere;         }       Astuccio 14:         {           un' = valore;           Se ( un' < EEPromBanks)           {             mySerial.println("Memory Bank:" + Corda(un') );             mySerial.sciacquone();             per (int B = 1; B <= LcdRows; B++)             {               mySerial.Stampa("Fila" + Corda(B) + ": ");               mySerial.sciacquone();               per (int c = 0; c < rLcdChr; c++)               {                 eeaddress = 0;                 eeaddress = (un' * (rLcdChr) * LcdRows) + ((rLcdChr) * B) + c;                 valore = EEPROM.leggere(eeaddress);                 mySerial.Stampa(carbonizzare(valore));                 mySerial.sciacquone();               }               mySerial.println(" ");               mySerial.sciacquone();             }           } altro           {             mySerial.println("Valore fuori intervallo.");           }           valore = 0;           sBuffer = "";           MnuState = 0;           rompere;         }       Astuccio 15:         {           // Diretta pPrint da visualizzare           DirectPrint = vero;           mySerial.println ("Directprint ON.");           Se (DirectPrint)           {             DirectprintROW = 0;             DirectprintLine = 0;             lcd.chiaro();             lcd.cursore();             lcd.batter();           }           valore = 0;           sBuffer = "";           MnuState = 0;           rompere;         }       Astuccio 16:         {           valore = 0;           sBuffer = "";           MnuState = 0;           rompere;         }       Astuccio 17:         {           mySerial.println("Luminosità display: (max 255)");           MnuState = 7;           valore = 0;           sBuffer = "";           rompere;         }       Astuccio 18:         {           Se ((valore < 256))           {             Targetbrightness = valore;             mySerial.println("Luminosità: " + Corda (Targetbrightness) + " Impostato");           } altro           {             mySerial.println("Valore fuori intervallo.");           }           MnuState = 0;           valore = 0;           sBuffer = "";           rompere;         }       Astuccio 19:         {           mySerial.println("Ritardo dissolvenza: (max 255 sec)");           MnuState = 12;           valore = 0;           sBuffer = "";           rompere;         }       Astuccio 20:         {           WriteEEPROM(Selectedbank, 3);           valore = 0;           MnuState = 0;           sBuffer = "";           TextHeader(4);           mySerial.sciacquone();           valore = 0;           MnuState = 10;           sBuffer = "";           rompere;         }       Astuccio 21:         {           WriteEEPROM(Selectedbank, 4);           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       Astuccio 23:         {           Pubblicità  = !Pubblicità;           mySerial.Stampa("Pubblicità ");           Se (Pubblicità)           {             mySerial.println(" SU.");           } altro  {             mySerial.println("OFF".);           }           mySerial.sciacquone();           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       Astuccio 25:         {           Se ((valore > 0) & (valore < 251))           {             FadeSeconds = valore;             EEPROM.Scrivi(EEFadeSeconds, FadeSeconds);             mySerial.println("Valore" + Corda (valore) + " impostato.");           } altro           {             valore = 0;             sBuffer = "";             mySerial.println("Valore fuori intervallo.");           }           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       Astuccio 26:         {           mySerial.println("ADverDelay: (max 255 Sec)");           MnuState = 13;           valore = 0;           sBuffer = "";           rompere;         }       Astuccio 27:         {           Se ((valore > 0) & (valore < 256))           {             Advertsecdelay = valore;             EEPROM.Scrivi(EEAdvertsecdelay, Advertsecdelay);             mySerial.println("Valore" + Corda (valore) + " impostato.");           } altro           {             valore = 0;             sBuffer = "";             mySerial.println("Valore fuori intervallo.");           }           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       Astuccio 28:         {           mySerial.println("ADMsgs: (max" + Corda (EEPromBanks) + ")");           MnuState = 14;           valore = 0;           sBuffer = "";           rompere;         }       Astuccio 29:         {           Se ((valore > 0) & (valore < EEPromBanks + 1))           {             AdvertMsg = valore;             EEPROM.Scrivi(EEAdvertMsg, AdvertMsg);             mySerial.println("Valore" + Corda (valore) + " impostato.");           } altro           {             valore = 0;             sBuffer = "";             mySerial.println("Valore fuori intervallo.");           }           valore = 0;           MnuState = 0;           sBuffer = "";           rompere;         }       predefinito:         {           Se (DisplayLock)           {             lcd.chiaro();             DisplayLock = falso;           }           mySerial.println("------- Smart Bluetooth Display 1.1 ------");           mySerial.println("S - Leggi TUTTE le banche EEPROM");           mySerial.println("E - Cancella TUTTE le banche EEPROM");           mySerial.println("W - Scrivi sel. Banca EEPROM");           mySerial.println("R - Lettura sel. Banca EEPROM");           mySerial.println("P - Stampa banco EEPROM sul display");           mySerial.println("----------------------------------------");           mySerial.println("D - Stampa diretta");           mySerial.println("B - Visualizza valore corrente di luminosità:" + Corda (Currentbrightness));           mySerial.println("----------------------------------------");           mySerial.println("Altro: ADVERT, ADSEC, ADMSG, ECHO");           mySerial.println("----------------------------------------");           mySerial.println("Digita Cmd e premi Invio");           mySerial.sciacquone();           MnuState = 0;           valore = 0;           sBuffer = "";         }     }   } // Eingabe erkannt
}



vuoto WriteEEPROM(byte FBank, byte frow)
{   byte Writecounter;   Writecounter = 0;   mySerial.Stampa("Salvataggio ");   per (int c = 0; c < rLcdChr; c++)   {     eeaddress = 0;     eeaddress = (FBank * (rLcdChr) * LcdRows) + ((rLcdChr) * frow) + c;     valore = EEPROM.leggere(eeaddress);     Se (sBuffer[c] != valore)     {       EEPROM.Scrivi(eeaddress, sBuffer[c]);       mySerial.Stampa(".");       Writecounter++;     }   }   mySerial.println(" " + Corda (Writecounter) + "Byte scritti.");

}


vuoto ClearCBuffer ()

{   per (byte un' = 0; MaxInputBufferSize - 1; un'++)     Cbuffer[un'] = 0;
}


byte SerInputHandler()

{   byte risultato = 0;   int c;   int d;   int un';   int B;   risultato = 0;   Se (CheckforserialEvent())   {     Se ((NumberInput) e non (Inserimento dati) e non (StrInput))    //Solo numeri     {       sBuffer = "";       valore = 0;       StrInput = falso;       NumberInput = falso;       Inserimento dati = falso;       ENTERINPUT = falso;       un' = 0;       B = 0;       c = 0;       d = 0;       sBuffer = Cbuffer; // Zahl wird AUCH! a SBUFFER übernommen, cade benötigt.       Se (CCOUNT == 1) {         valore  = Cbuffer[0] - 48 ;       }       Se (CCOUNT == 2) {         un' = Cbuffer[0] - 48 ;         un' = un' * 10;         B = Cbuffer[1] - 48 ;         valore = un' + B;       }       Se (CCOUNT == 3) {         un' = Cbuffer[0] - 48 ;         un' = un' * 100;         B = Cbuffer[1] - 48 ;         B = B * 10;         c = Cbuffer[2] - 48 ;         valore = un' + B + c;       }       Se (CCOUNT == 4) {         un' = Cbuffer[0] - 48 ;         un' = un' * 1000;         B = Cbuffer[1] - 48 ;         B = B * 100;         c = Cbuffer[2] - 48 ;         c = c * 10;         d = Cbuffer[3] - 48 ;         valore = un' + B + c + d;       }       Se (CCOUNT >= 5)       {         sBuffer = "";         valore = 0;         sBuffer = Cbuffer;         ClearCBuffer;         risultato = 2;       } altro       {         ClearCBuffer;         CCOUNT = 0;         risultato = 1;                                                // Numero codice di ritorno         NumberInput = falso;         StrInput = falso;         Inserimento dati = falso;         ENTERINPUT = falso;         CCOUNT = 0;         ritorno risultato;       }     }     Se ((StrInput) e non (Inserimento dati))                          // Solo input stringa     {       sBuffer = "";       sBuffer = Cbuffer;       valore = 0;       StrInput = falso;       NumberInput = falso;       Inserimento dati = falso;       ENTERINPUT = falso;       CCOUNT = 0;       ClearCBuffer;       risultato = 2;                                                 // Numero codice di ritorno     }     Se (Inserimento dati) {       sBuffer = "";       sBuffer = Cbuffer;       valore = 0;       StrInput = falso;       NumberInput = falso;       Inserimento dati = falso;       ENTERINPUT = falso;       CCOUNT = 0;       ClearCBuffer;       risultato = 3;                                               // Numero codice di ritorno     }     Se ((ENTERINPUT) e non (StrInput) e non (NumberInput) e non (Inserimento dati))     {       sBuffer = "";       valore = 0;       Ccount = 0;       ClearCBuffer;       risultato = 4;                                               //Numero di Codice di ritorno     }     NumberInput = false;     StrInput = false;     DataInput = false;     EnterInput = false;     Ccount = 0;     di ritorno risultato;   }   di ritorno risultato;   //Fine CheckforSerialEvent
}



// Eingabebuffer


boolean CheckforserialEvent()
{   mentre (mySerial.disponibile()) {     // ottiene il nuovo byte:     TBuffer = mySerial.leggere();     se (TBuffer > 9 && TBuffer < 14)     {       Cbuffer[Ccount] = 0;       TBuffer = 0;       se (EchoMode)       {         mySerial.stampa(char(13));         mySerial.filo();       }       se (Directprint)       {         mySerial.println("");         DirectprintLine = 0;         DirectprintROW = DirectprintROW + 1;         se ( DirectprintROW > 3)         {           Directprint = false;           lcd.noCursor();           lcd.noBlink();           Sbuffer = "";           valore = 0;         } altro         {           lcd.cursore();           lcd.lampeggia();           lcd.setCursor(0, DirectprintROW);         }       }       EnterInput = true;       return true;     } else if (TBuffer > 47 && TBuffer < 58 )     {       se ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer;         Ccount++;         se ((Directprint))         {           lcd.di stampa(char(TBuffer));           DirectprintLine = DirectprintLine + 1;           se ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } altro {             lcd.cursore();             lcd.lampeggia();           }         }         se (EchoMode) {           mySerial.stampa(char(TBuffer));           mySerial.flush();         }       } altro {         mySerial.stampa("#");       }       //Numero di Input rilevati       NumberInput = vero;     }     altro se (TBuffer > 64 && TBuffer < 123 )     {       se ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer;         Ccount++;         se ((Directprint))         {           lcd.di stampa(char(TBuffer));           DirectprintLine = DirectprintLine + 1;           se ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } altro {             lcd.cursore();             lcd.lampeggia();           }         }         se (EchoMode) {           mySerial.stampa(char(TBuffer));           mySerial.flush();         }       } altro {         mySerial.stampa("#");       }       //Carattere Char Input rilevati       StrInput = vero;     }     altro se ( (TBuffer == 127 )  |  (TBuffer == 8 ) )     {       se ( DirectprintLine > 0 )       {         DirectprintLine = DirectprintLine - 1;         lcd.setCursor(DirectprintLine, DirectprintROW);         lcd.di stampa(" ");         lcd.setCursor(DirectprintLine, DirectprintROW);       }       se (( DirectprintLine == 0 ) & ( DirectprintROW > 0 ))       {         DirectprintROW = DirectprintROW - 1;         DirectprintLine = rLcdChr - 1;         lcd.setCursor(DirectprintLine, DirectprintROW);       }       se ( Ccount > 0)       {         Ccount--;         Cbuffer[Ccount] = 0;         se ((Directprint))         {           se ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } altro {             lcd.cursore();             lcd.lampeggia();           }         }         se (EchoMode) {           mySerial.stampa("-");           mySerial.a filo();         }       }     }     il resto     {       se ( Ccount < MaxInputBufferSize)       {         Cbuffer[Ccount] = TBuffer;         Ccount++;         se ((Directprint))         {           DirectprintLine = DirectprintLine + 1;           se (TBuffer < 128) {             lcd.di stampa(char(TBuffer));           } altro  {             lcd.di stampa(Stringa(TBuffer));           }           se ( Ccount > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } altro {             lcd.cursore();             lcd.lampeggia();           }         }         se (EchoMode) {           mySerial.stampa(char(TBuffer));           mySerial.flush();         }       } altro {         mySerial.stampa("#");       }       //Immissione Dati rilevati       DataInput = true;     }     return false;   }   return false;
}

void Displayprocessor()  // Bei Blauem Display wird auf Scrollfunktion verzichtet, da das nur "schmiert"
{   se (RefreshDisplay)   {     lcd.chiaro();     RefreshDisplay = false;     per (int b = 1; b <= LcdRows; b++)     {       lcd.setCursor(0, b - 1);       se (!la Pubblicità) {         mySerial.stampa("Riga " + Stringa(b) + ": ");       }       per (int c = 0; c < rLcdChr; c++)       {         eeaddress = 0;         eeaddress = (DisplayBankContent * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c;         valore = 0;         valore = EEPROM.lettura(eeaddress);         se (il valore > 31) // Sonderzeichen nicht anzeigen         {           se (!la Pubblicità) {             mySerial.stampa(char(valore));           } altro {             ritardo(100);           }           lcd.di stampa(char(valore));         } altro         {           lcd.di stampa(char(32));         }       }       se (!la Pubblicità) {         mySerial.println();       }     }   }
}

void runrealTimeClock()    //TIMEBASE
{   // Real Time Clock & Countdown   // lungo previousMillis = 0; // memorizza l'ultima volta è stato misurato   // byte SecDivider = 0;   unsigned long currentMillis = millis();   int StepValue = 0;   // PWM Display Steuerung   StepValue = 4 * FadeSeconds;   se (currentMillis - previousMillis > StepValue)   {     previousMillis = currentMillis;     se (Currentbrightness < Targetbrightness        )     {       Currentbrightness = Currentbrightness + 1;       analogWrite (BackgroundLight, Currentbrightness);     } altro se (Currentbrightness > Targetbrightness)     {       Currentbrightness = Currentbrightness - 1;       analogWrite (BackgroundLight, Currentbrightness);     }   }   se (currentMillis - previousMillisB > 1000)   {     // sekundentakt     previousMillisB = currentMillis;     // La pubblicità     se (la Pubblicità)     {       se (Advertseccounter >  Advertsecdelay)       {         Advertseccounter = 0;         DisplayBankContent = DisplayBankContent + 1;         se (DisplayBankContent > AdvertMsg - 1) {           DisplayBankContent = 0;         }         RefreshDisplay = vero;       } altro {         Advertseccounter = Advertseccounter + 1;       }     }   }
}

void DisplayBank ( byte cobank)
{   se (cobank  < EEPromBanks )   {     RefreshDisplay = true;   // Inizializzare l'Uscita del Display     DisplayBankContent = cobank;     mySerial.println("Banca " + Stringa(cobank) + " viene visualizzato sul display LCD");     MnuState = 0;     Sbuffer = "";     valore = 0;     mySerial.flush();   } altro   {     mySerial.println("Banca non disponibile".);     valore = 0;     MnuState = 0;     Sbuffer = "";     mySerial.filo();   }
}

void SwitchProcessor()
{   Switchstate = digitalRead(SwitchPin);   se ((!Switchstate) && (SwitchstateBuffer) && (non DisplayLock))// Abfrage Schalter   {     SwitchstateBuffer = false;     Pubblicità = false;     Directprint = false;     lcd.noCursor();     lcd.noBlink();     SelectedMsg = SelectedMsg + 1;     se (SelectedMsg >  EEPromBanks - 1 )     {       SelectedMsg = 0;     }     lcd.clear();     lcd.setCursor(0, 0);     lcd.di stampa("la Banca: " + Stringa(SelectedMsg) + " selezionato");     ritardo di(10);     valore = 50000;     , mentre (digitalRead(SwitchPin) == 0)     {       ritardo(1);       se (di valore > 0) {         valore di = valore - 1;       };       lcd.setCursor(0, 3);       se (il valore di > 0) {         lcd.di stampa("Power off: " + Stringa di(valore / 100) + " sec ");       };     }     DisplayBank(SelectedMsg);   }   se (Switchstate)   {     SwitchstateBuffer = true;     // delay(10);   }
}

 

Ab jetzt ist das Menü um 3 weitere Optionen reicher: ANNUNCIO, ADSEC, und ADMSG. Diese zeigt unser Menü unter "Altro" un':

Menu di output sullo smartphone

 

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

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

Dann geben wir nach dem Befehl ADMSG die Zahl 4 ein. Als Quittierung bekommen wir die Ausgabe: "il Valore 2 set".

Danach geben wir den Befehl "ADSEC" ein gefolgt von einer Zahl tra 1 e 255. Dabei steht morire eingegebene Zahl für die Anzahl un'Secondi, bis di morire angezeigte aktuelle Nachricht durch die nächste konfigurierte Nachricht ersetzt wird. Als Beispiel geben wir hier "5" ein. Als Quittierung bekommen wir auch hier wieder die Ausgabe: "il Valore 5 set".

Als letzten Passo geben wir nun den Befehl "PUBBLICITÀ" ein. Nach der Quittierung des Befehls durch "la Pubblicità Su" wird nun immer im Wechsel automatisch morire Nachrichten aus den Bänken 0-2 hintereinander anzeigt. Ausschalten lässt sich die Automatik durch erneute Eingabe des Befehls ANNUNCIO oder durch einen druck auf den Nachrichtenwahltaster.



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

 

DisplaysPer arduinoProjekte für fortgeschrittene

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN