Bluetooth-Display - Teil 4 - AZ-Delivery

Benvenuti alla quarta parte della serie Bluetooth Display.

 

Nella parte di oggi, il nostro display riceve un'ulteriore piccola estensione dell'hardware oltre a una voce di menu operatore aggiuntiva obbligatoria. Con questa nuova estensione hardware, i messaggi memorizzati nella memoria interna possono essere recuperati tramite un pulsante senza il menu operatore!

A tale scopo, utilizziamo come input un'altra porta libera del nostro microcontrollore (compatibile con Uno R3). Più precisamente: usiamo la porta 2 come input. A questo ingresso, un pulsante è collegato a terra, la cui pressione del tasto viene valutata dal nostro Arduino.

Ma ora all'effettiva costruzione e attuazione dell'allargamento. Nel primo passaggio espandiamo il nostro hardware come mostrato nel seguente schema al modulo pulsante KY-004. In totale, il display Bluetooth ha 12 memoria di testo 4x20 caratteri quando si utilizza un Arduino standard.

Questi vengono visualizzati in ordine crescente da 0 a 11 quando si preme il pulsante. Se viene visualizzato il messaggio 11 sul display e viene premuto il pulsante, il contatore torna al messaggio 0.

Bluetooth Display - Parte 4 - Diagramma cablato

 

Successivamente, per questa estensione, carichiamo il seguente codice personalizzato sul nostro microcontrollore:

 

 

#include <Spi.H>
#include <Filo.H>
#include <SoftwareSerialseriale.H>
#include <Eeprom.H>
#include <LiquidoCristallo.H>
#include <Avr/Dormire.H>

# define MaxInputBufferSize 20 massimo 255 caratteri per adattarsi a vlcdr
# define Dimensioni e-promSize 990
# define rLcdChr 20
# define LcdRows (informazioni in base ai colori in 4
# define Intervallo 1000
# define BackgroundLight 5 LED retroilluminazione porta 5
# define SwitchPin (SwitchPin) 2 Pulsanti di selezione dei messaggi della porta 12
# define DelayTOPWROFF 500

EEprom Memory CellAddresses per la configurazione
# define EEFadeSecondi  993
# define EEPINA 996
# define EPINC 997
# define EEPINDD 998


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

Variabili
Dite DisplayBankContent (Contenuto Della banca) = 0;

Gestione dell'input seriale
Char TBuffer (TBuffer);
Char Cbuffer (Cbuffer)[MaxInputBufferSize + 1];     Buffer di input codice USB
Stringa Buffer = "";                      Buffer di input stringa USB
Int Valore;                                USB Nummeric Input Buffer
Dite Conteggio cconteggio = 0;                          Numero ricevuto Chars
Dite Inptype (Inptype) = 0;
Boolean StrInput = False;
Boolean NumeroIngresso = False;
Boolean DataInput (Input dati) = False;
Boolean Input enter = False;
Dite MenueSelezione = 0;

Controllo pulsante
Boolean Stato di commutazione = Vero;
Boolean SwitchstateBuffer (Server switch) = Vero;
Dite SelectedMsg = 0;

Fornire informazioni di debug tramite l'interfaccia seriale
Boolean Modalità Echo = Vero;

Eeprom
Int eeaddress (indirizzo eeaddress);                 Puntatore indirizzo EEPROM
Dite EEPromBanche = 0;          Utilizzato per il calcolo delle banche EEPROM
Controllo SerMnue
Dite MnuState = 0;            Profondità massima del menu 255 icl Sub
Dite Banca selezionata = 0;

Orologio in tempo reale
Lungo previousMillis = 0;       memorizzerà l'ultima volta è stato misurato
Lungo previousMillisB = 0;       memorizzerà l'ultima volta è stato misurato

Gestione del display
Boolean DisplayLock (DisplayLock) = False;
Boolean Impronta diretta = False;
Dite Stampa direttaROW = 0;
Dite Stampa direttaLinea = 0;

Boolean AggiornaVisualizzazione = False;
Dite FRMControllo = 0; Usato fpr operazioni di scrittura per eeprom in modo da salvare i cicli host
Monitoraggio della batteria
Galleggiante Tensione;
Boolean PowersaveMode (Modalità Powersave) = False;

Controllo della luce PWM

Dite Luminosità corrente = 0;
Dite Luminosità di destinazione = 0;
Dite FadeSecondi = 0; Standard n. 3


Vuoto Installazione()
{   EEPromBanche = Dimensioni e-promSize / ((rLcdChr) * LcdRows (informazioni in base ai colori in);   Lcd.Iniziare(rLcdChr, LcdRows (informazioni in base ai colori in);   Lcd.Chiaro();   Lcd.Setcursor(0, 0);   Lcd.Stampare("Bluetooth" (Bluetooth));   Lcd.Setcursor(0, 1);   Lcd.Stampare("Visualizza");   mySerial.Iniziare(9600);   PinMode (Modalità pin)(SwitchPin (SwitchPin), INPUT_PULLUP); Testo di selezione dei pulsanti da EEprom   PinMode (Modalità pin)(BackgroundLight, Output); Illuminazione di visualizzazione / Visualizza ON /OFF   digitalWrite (Scrittura digitale)(BackgroundLight, Basso);   leggere Config   FadeSecondi = Eeprom.Leggere(EEFadeSecondi);   Luminosità corrente = 0;   Luminosità di destinazione = 0;   Lcd.Setcursor(0, 4);   Se (DisplayLock (DisplayLock)) {     Lcd.Stampare(" Gesperrt di sistema");   }   Ulteriori routine di installazione / inizializzazione   Lcd.Setcursor(0, 0);   Luminosità di destinazione = 255;   mySerial.sciacquone();
}

// ###################################################################################################### //
Vuoto Ciclo()
{   SerialcommandProcessore();   runrealTimeClock();   Processore di visualizzazione();   SwitchProcessore();   Ciclo principale finale
}
// ###################################################################################################### //

Vuoto Intestazione di testo(Dite rowm)
{   mySerial.println("Testo per banca" + Stringa( Banca selezionata) + " RIGA " + Stringa (rowm) + ":");
}

Vuoto SerialcommandProcessore()
{   Int Un;   Inptype (Inptype) = 0;   Inptype (Inptype) = SerInputHandler();   0 cheine R'ckgabe   1 Nummer   2 Stringa   3 Dati   Se ((Inptype (Inptype) > 0) & (!Impronta diretta))   {     MenueSelezione = 0;     Se ((MnuState < 2) && (Inptype (Inptype) == 2)) {       Buffer.ToUpperCase (Caso in taupper)();  Per facilitare l'immissione dei comandi     }     Se ((Buffer == "ECHO") && (MnuState == 0) && (Inptype (Inptype) == 2))     {       MenueSelezione = 2;     }     Se ((Buffer == "S") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 3;     }     Cancellazione di TUTTI i contenuti EEprom     Se ((Buffer == "E") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 4;     }     Se ((Buffer == "SÌ") && (MnuState == 1) && (Inptype (Inptype) == 2))      {       MenueSelezione = 5;     }     Se ((Buffer != "SÌ") && (MnuState == 1) && (Inptype (Inptype) == 2))     {       MenueSelezione = 6;     }     Modifica contenuto selezionato     Se ((Buffer == "W") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 7;     }     Se ((MnuState == 2) && (Valore  < EEPromBanche) && (Inptype (Inptype) == 1)) {       MenueSelezione = 8;     }     Se (MnuState == 3)                                               {       MenueSelezione = 9;     }     Se (MnuState == 4)                                               {       MenueSelezione = 10;     }     Visualizza contenuto selezionato     Se ((Buffer == "P") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 11;     }     Se ((MnuState == 5) && (Inptype (Inptype) == 1))                           {       MenueSelezione = 12;     }     Se ((Buffer == "R") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 13;     }     Se ((MnuState == 6) && (Inptype (Inptype) == 1))                           {       MenueSelezione = 14;     }     Se ((Buffer == "D" (D)) && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 15;     }     Se ((Buffer == "z") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 16;     }     Se ((Buffer == "B") && (MnuState == 0) && (Inptype (Inptype) == 2))       {       MenueSelezione = 17;     }     Se ((MnuState == 7) && (Inptype (Inptype) == 1))                           {       MenueSelezione = 18;     }     Se ((Buffer == "DISSOLVEnza") && (MnuState == 0) && (Inptype (Inptype) == 2))     {       MenueSelezione = 19;     }     Se (MnuState == 9)                                               {       MenueSelezione = 20;     }     Se (MnuState == 10)                                              {       MenueSelezione = 21;     }     Se (MnuState == 12)                                              {       MenueSelezione = 25;     }     Interruttore (MenueSelezione)     {       Caso 2:         {           mySerial.Stampare("Echo");           Modalità Echo = !Modalità Echo;           Se (Modalità Echo) {             mySerial.println("ON".);           } Altro           {             mySerial.println("FUORI".);           }           mySerial.println("");           mySerial.sciacquone();           Valore = 0;           MnuState = 0;           Buffer = "";           Pausa;         }       Caso 3:         {           mySerial.println("Leggi contenuto EEEPROM:" );           mySerial.sciacquone();           Per (Int Un = 0; Un < EEPromBanche; Un++)           {             mySerial.println("Banca di memoria EEPROM: " + Stringa(Un) );             mySerial.sciacquone();             Per (Int B = 1; B <= LcdRows (informazioni in base ai colori in; B++)             {               mySerial.Stampare("Riga" + Stringa(B) + ": ");               mySerial.sciacquone();               Per (Int C = 0; C < rLcdChr; C++)               {                 eeaddress (indirizzo eeaddress) = 0;                 eeaddress (indirizzo eeaddress) = (Un * (rLcdChr) * LcdRows (informazioni in base ai colori in) + ((rLcdChr) * B) + C;                 Valore = Eeprom.Leggere(eeaddress (indirizzo eeaddress));                 mySerial.Stampare(Char(Valore));                 mySerial.sciacquone();               }               mySerial.println(" ");               mySerial.sciacquone();             }           }           Buffer = "";           mySerial.println("Non sono più disponibili banche EEPROM.");           mySerial.sciacquone();           Pausa;         }       Caso 4:         {           Valore = 0;           mySerial.Stampare("Cancellare EEPROM");           mySerial.println("SÌ/NO:");           mySerial.sciacquone();           MnuState = 1;           Buffer = "";           Pausa;         }       Caso 5:         {           Valore = 0;           mySerial.Stampare("Cancellare EEPROM");           mySerial.println("Stand Di.");           mySerial.sciacquone();           Per (Int Un = 0; Un < EEPromBanche; Un++)           {             Banca di memoria a             mySerial.println("Banca Chiara: " + Stringa(Un));             Per (Int B = 1; B <= LcdRows (informazioni in base ai colori in; B++)             {               Per (Int C = 0; C < rLcdChr; C++)               {                 eeaddress (indirizzo eeaddress) = 0;                 eeaddress (indirizzo eeaddress) = (Un * (rLcdChr) * LcdRows (informazioni in base ai colori in) + ((rLcdChr ) * B) + C;                 FRMControllo = Eeprom.Leggere(eeaddress (indirizzo eeaddress));                 Se (FRMControllo > 0)                 {                   Eeprom.Scrivere(eeaddress (indirizzo eeaddress), 00); Formatierung                   mySerial.Stampare(".");                   Valore++;                   Ritardo(30);                   mySerial.sciacquone();                 }               }             }             mySerial.println("");             mySerial.sciacquone();           }           mySerial.println("");           mySerial.println("Finito". + Stringa(Valore) + " Dite cancellati");           mySerial.println("");           mySerial.sciacquone();           Buffer = "";           MnuState = 0;           Pausa;         }       Caso 6:         {           Valore = 0;           Buffer = "";           MnuState = 0;           mySerial.println("Interruzione OP".);           mySerial.sciacquone();           Pausa;         }       Caso 7:         {           mySerial.println("Numero di banca EEPPROM (0-" + Stringa(EEPromBanche - 1) + "):");           mySerial.sciacquone();           MnuState = 2;           Valore = 0;           Buffer = "";           Pausa;         }       Caso 8:         {           Banca selezionata = Valore;           Intestazione di testo(1);           MnuState = 3;           Buffer = "";           Valore = 0;           Pausa;         }       Caso 9:         {           Scrittura(Banca selezionata, 1);           Intestazione di testo(2);           Valore = 0;           MnuState = 4;           Buffer = "";           Pausa;         }       Caso 10:         {           Scrittura(Banca selezionata, 2);           Valore = 0;           MnuState = 0;           Buffer = "";           Intestazione di testo(3);           mySerial.sciacquone();           Valore = 0;           MnuState = 9;           Buffer = "";           Pausa;         }       Caso 11:         {           Valore = 0;           mySerial.println("Numero di banca EEPPROM (0-" + Stringa(EEPromBanche - 1) + "):");           MnuState = 5;           Buffer = "";           mySerial.sciacquone();           Pausa;         }       Caso 12:         {           SelectedMsg = Valore;           DisplayBank(Valore);           Pausa;         }       Caso 13:         {           Valore = 0;           mySerial.println("Numero di banca EEPPROM (0-" + Stringa(EEPromBanche - 1) + "):");           MnuState = 6;           Buffer = "";           mySerial.sciacquone();           Pausa;         }       Caso 14:         {           Un = Valore;           Se ( Un < EEPromBanche)           {             mySerial.println("Banca della memoria: " + Stringa(Un) );             mySerial.sciacquone();             Per (Int B = 1; B <= LcdRows (informazioni in base ai colori in; B++)             {               mySerial.Stampare("Riga" + Stringa(B) + ": ");               mySerial.sciacquone();               Per (Int C = 0; C < rLcdChr; C++)               {                 eeaddress (indirizzo eeaddress) = 0;                 eeaddress (indirizzo eeaddress) = (Un * (rLcdChr) * LcdRows (informazioni in base ai colori in) + ((rLcdChr) * B) + C;                 Valore = Eeprom.Leggere(eeaddress (indirizzo eeaddress));                 mySerial.Stampare(Char(Valore));                 mySerial.sciacquone();               }               mySerial.println(" ");               mySerial.sciacquone();             }           } Altro           {             mySerial.println("Valore non compreso nell'intervallo.");           }           Valore = 0;           Buffer = "";           MnuState = 0;           Pausa;         }       Caso 15:         {           PPrint diretto da visualizzare           Impronta diretta = Vero;           mySerial.println ("Directprint ON.");           Se (Impronta diretta)           {             Stampa direttaROW = 0;             Stampa direttaLinea = 0;             Lcd.Chiaro();             Lcd.Cursore();             Lcd.Lampeggiare();           }           Valore = 0;           Buffer = "";           MnuState = 0;           Pausa;         }       Caso 16:         {           Valore = 0;           Buffer = "";           MnuState = 0;           Pausa;         }       Caso 17:         {           mySerial.println("Luminosità del display: (max 255)");           MnuState = 7;           Valore = 0;           Buffer = "";           Pausa;         }       Caso 18:         {           Se ((Valore < 256))           {             Luminosità di destinazione = Valore;             mySerial.println("Luminosità: " + Stringa (Luminosità di destinazione) + "Imposta");           } Altro           {             mySerial.println("Valore non compreso nell'intervallo.");           }           MnuState = 0;           Valore = 0;           Buffer = "";           Pausa;         }       Caso 19:         {           mySerial.println("Ritardo dissolvenza: (max 255 sec)");           MnuState = 12;           Valore = 0;           Buffer = "";           Pausa;         }       Caso 20:         {           Scrittura(Banca selezionata, 3);           Valore = 0;           MnuState = 0;           Buffer = "";           Intestazione di testo(4);           mySerial.sciacquone();           Valore = 0;           MnuState = 10;           Buffer = "";           Pausa;         }       Caso 21:         {           Scrittura(Banca selezionata, 4);           Valore = 0;           MnuState = 0;           Buffer = "";           Pausa;         }       Caso 25:         {           Se ((Valore > 0) & (Valore < 251))           {             FadeSecondi = Valore;             Eeprom.Scrivere(EEFadeSecondi, FadeSecondi);             mySerial.println("Valore" + Stringa (Valore) + " insieme.");           } Altro           {             Valore = 0;             Buffer = "";             mySerial.println("Valore non compreso nell'intervallo.");           }           Valore = 0;           MnuState = 0;           Buffer = "";           Pausa;         }       Predefinito:         {           Se (DisplayLock (DisplayLock))           {             Lcd.Chiaro();             DisplayLock (DisplayLock) = False;           }           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 banca EEPROM");           mySerial.println("R - Leggi sel. EEPROM Bank");           mySerial.println("P - Stampa Banca EEPROM sul display");           mySerial.println("----------------------------------------");           mySerial.println("D - Stampa diretta");           mySerial.println("B - Visualizza il valore attuale di Brighness: " + Stringa (Luminosità corrente));           mySerial.println("Altro: ECHO");           mySerial.println("----------------------------------------");           mySerial.println("Digitare Cmd e premere Invio");           mySerial.sciacquone();           MnuState = 0;           Valore = 0;           Buffer = "";         }     }   } Eingabe erkannt
}

Vuoto Scrittura(Dite FBank, Dite Riga F)
{   Dite Scrivicounter;   Scrivicounter = 0;   mySerial.Stampare("Salvataggio");   Per (Int C = 0; C < rLcdChr; C++)   {     eeaddress (indirizzo eeaddress) = 0;     eeaddress (indirizzo eeaddress) = (FBank * (rLcdChr) * LcdRows (informazioni in base ai colori in) + ((rLcdChr) * Riga F) + C;     Valore = Eeprom.Leggere(eeaddress (indirizzo eeaddress));     Se (Buffer[C] != Valore)     {       Eeprom.Scrivere(eeaddress (indirizzo eeaddress), Buffer[C]);       mySerial.Stampare(".");       Scrivicounter++;     }   }   mySerial.println(" " + Stringa (Scrivicounter) + "Dite scritti.");
}

Vuoto ClearCBuffer (Buffer Di ClearC) ()
{   Per (Dite Un = 0; MaxInputBufferSize - 1; Un++)     Cbuffer (Cbuffer)[Un] = 0;
}

Dite SerInputHandler()
{   Dite Risultato = 0;   Int C;   Int D;   Int Un;   Int B;   Risultato = 0;   Se (VerificaforserialE())   {     Se ((NumeroIngresso) E Non (DataInput (Input dati)) E Non (StrInput))    Solo numeri     {       Buffer = "";       Valore = 0;       StrInput = False;       NumeroIngresso = False;       DataInput (Input dati) = False;       Input enter = False;       Un = 0;       B = 0;       C = 0;       D = 0;       Buffer = Cbuffer (Cbuffer); AUCH wird ! in SBUFFER sbernommen, cade bentigt.       Se (Conteggio cconteggio == 1) {         Valore  = Cbuffer (Cbuffer)[0] - 48 ;       }       Se (Conteggio cconteggio == 2) {         Un = Cbuffer (Cbuffer)[0] - 48 ;         Un = Un * 10;         B = Cbuffer (Cbuffer)[1] - 48 ;         Valore = Un + B;       }       Se (Conteggio cconteggio == 3) {         Un = Cbuffer (Cbuffer)[0] - 48 ;         Un = Un * 100;         B = Cbuffer (Cbuffer)[1] - 48 ;         B = B * 10;         C = Cbuffer (Cbuffer)[2] - 48 ;         Valore = Un + B + C;       }       Se (Conteggio cconteggio == 4) {         Un = Cbuffer (Cbuffer)[0] - 48 ;         Un = Un * 1000;         B = Cbuffer (Cbuffer)[1] - 48 ;         B = B * 100;         C = Cbuffer (Cbuffer)[2] - 48 ;         C = C * 10;         D = Cbuffer (Cbuffer)[3] - 48 ;         Valore = Un + B + C + D;       }       Se (Conteggio cconteggio >= 5)       {         Buffer = "";         Valore = 0;         Buffer = Cbuffer (Cbuffer);         ClearCBuffer (Buffer Di ClearC);         Risultato = 2;       } Altro       {         ClearCBuffer (Buffer Di ClearC);         Conteggio cconteggio = 0;         Risultato = 1;                                                Numero Codice restituito         NumeroIngresso = False;         StrInput = False;         DataInput (Input dati) = False;         Input enter = False;         Conteggio cconteggio = 0;         Ritorno Risultato;       }     }     Se ((StrInput) E Non (DataInput (Input dati)))                          Solo input stringa     {       Buffer = "";       Buffer = Cbuffer (Cbuffer);       Valore = 0;       StrInput = False;       NumeroIngresso = False;       DataInput (Input dati) = False;       Input enter = False;       Conteggio cconteggio = 0;       ClearCBuffer (Buffer Di ClearC);       Risultato = 2;                                                 Numero Codice restituito     }     Se (DataInput (Input dati)) {       Buffer = "";       Buffer = Cbuffer (Cbuffer);       Valore = 0;       StrInput = False;       NumeroIngresso = False;       DataInput (Input dati) = False;       Input enter = False;       Conteggio cconteggio = 0;       ClearCBuffer (Buffer Di ClearC);       Risultato = 3;                                               Numero Codice restituito     }     Se ((Input enter) E Non (StrInput) E Non (NumeroIngresso) E Non (DataInput (Input dati)))     {       Buffer = "";       Valore = 0;       Conteggio cconteggio = 0;       ClearCBuffer (Buffer Di ClearC);       Risultato = 4;                                               Numero Codice restituito     }     NumeroIngresso = False;     StrInput = False;     DataInput (Input dati) = False;     Input enter = False;     Conteggio cconteggio = 0;     Ritorno Risultato;   }   Ritorno Risultato;   Fine controlloforSerialEvent
}

Eingabebuffer

Boolean VerificaforserialE()
{   Mentre (mySerial.Disponibile()) {     ottenere il nuovo Dite:     TBuffer (TBuffer) = mySerial.Leggere();     Se (TBuffer (TBuffer) > 9 && TBuffer (TBuffer) < 14)     {       Cbuffer (Cbuffer)[Conteggio cconteggio] = 0;       TBuffer (TBuffer) = 0;       Se (Modalità Echo)       {         mySerial.Stampare(Char(13));         mySerial.sciacquone();       }       Se (Impronta diretta)       {         mySerial.println("");         Stampa direttaLinea = 0;         Stampa direttaROW = Stampa direttaROW + 1;         Se ( Stampa direttaROW > 3)         {           Impronta diretta = False;           Lcd.noCursor (Cursore)();           Lcd.noBlink();           Buffer = "";           Valore = 0;         } Altro         {           Lcd.Cursore();           Lcd.Lampeggiare();           Lcd.Setcursor(0, Stampa direttaROW);         }       }       Input enter = Vero;       Ritorno Vero;     } Altro Se (TBuffer (TBuffer) > 47 && TBuffer (TBuffer) < 58 )     {       Se ( Conteggio cconteggio < MaxInputBufferSize)       {         Cbuffer (Cbuffer)[Conteggio cconteggio] = TBuffer (TBuffer);         Conteggio cconteggio++;         Se ((Impronta diretta))         {           Lcd.Stampare(Char(TBuffer (TBuffer)));           Stampa direttaLinea = Stampa direttaLinea + 1;           Se ( Conteggio cconteggio > MaxInputBufferSize - 1)           {             Lcd.noCursor (Cursore)();             Lcd.noBlink();           } Altro {             Lcd.Cursore();             Lcd.Lampeggiare();           }         }         Se (Modalità Echo) {           mySerial.Stampare(Char(TBuffer (TBuffer)));           mySerial.sciacquone();         }       } Altro {         mySerial.Stampare("#");       }       Numero Ingresso rilevato       NumeroIngresso = Vero;     }     Altro Se (TBuffer (TBuffer) > 64 && TBuffer (TBuffer) < 123 )     {       Se ( Conteggio cconteggio < MaxInputBufferSize)       {         Cbuffer (Cbuffer)[Conteggio cconteggio] = TBuffer (TBuffer);         Conteggio cconteggio++;         Se ((Impronta diretta))         {           Lcd.Stampare(Char(TBuffer (TBuffer)));           Stampa direttaLinea = Stampa direttaLinea + 1;           Se ( Conteggio cconteggio > MaxInputBufferSize - 1)           {             Lcd.noCursor (Cursore)();             Lcd.noBlink();           } Altro {             Lcd.Cursore();             Lcd.Lampeggiare();           }         }         Se (Modalità Echo) {           mySerial.Stampare(Char(TBuffer (TBuffer)));           mySerial.sciacquone();         }       } Altro {         mySerial.Stampare("#");       }       if (DebugMode) - mySerial.println("Debug: Char over Serial ricevuto ");       mySerial.flush(); }       Rilevato input carattere carattere       StrInput = Vero;     }     Altro Se ( (TBuffer (TBuffer) == 127 )  |  (TBuffer (TBuffer) == 8 ) )     {       Se ( Stampa direttaLinea > 0 )       {         Stampa direttaLinea = Stampa direttaLinea - 1;         Lcd.Setcursor(Stampa direttaLinea, Stampa direttaROW);         Lcd.Stampare(" ");         Lcd.Setcursor(Stampa direttaLinea, Stampa direttaROW);       }       Se (( Stampa direttaLinea == 0 ) & ( Stampa direttaROW > 0 ))       {         Stampa direttaROW = Stampa direttaROW - 1;         Stampa direttaLinea = rLcdChr - 1;         Lcd.Setcursor(Stampa direttaLinea, Stampa direttaROW);       }       Se ( Conteggio cconteggio > 0)       {         Conteggio cconteggio--;         Cbuffer (Cbuffer)[Conteggio cconteggio] = 0;         Se ((Impronta diretta))         {           Se ( Conteggio cconteggio > MaxInputBufferSize - 1)           {             Lcd.noCursor (Cursore)();             Lcd.noBlink();           } Altro {             Lcd.Cursore();             Lcd.Lampeggiare();           }         }         Se (Modalità Echo) {           mySerial.Stampare("-");           mySerial.sciacquone();         }       }     }     Altro     {       Se ( Conteggio cconteggio < MaxInputBufferSize)       {         Cbuffer (Cbuffer)[Conteggio cconteggio] = TBuffer (TBuffer);         Conteggio cconteggio++;         Se ((Impronta diretta))         {           Stampa direttaLinea = Stampa direttaLinea + 1;           Se (TBuffer (TBuffer) < 128) {             Lcd.Stampare(Char(TBuffer (TBuffer)));           } Altro  {             Lcd.Stampare(Stringa(TBuffer (TBuffer)));           }           Se ( Conteggio cconteggio > MaxInputBufferSize - 1)           {             Lcd.noCursor (Cursore)();             Lcd.noBlink();           } Altro {             Lcd.Cursore();             Lcd.Lampeggiare();           }         }         Se (Modalità Echo) {           mySerial.Stampare(Char(TBuffer (TBuffer)));           mySerial.sciacquone();         }       } Altro {         mySerial.Stampare("#");       }       Immissione dati rilevata       DataInput (Input dati) = Vero;     }     Ritorno False;   }   Ritorno False;
}

Vuoto Processore di visualizzazione()  Con il display blu, l'ingesissimento a scorrimento viene omesso, in quanto questo
{   Se (AggiornaVisualizzazione)   {     Lcd.Chiaro();     AggiornaVisualizzazione = False;     Per (Int B = 1; B <= LcdRows (informazioni in base ai colori in; B++)     {       Lcd.Setcursor(0, B - 1);       mySerial.Stampare("Riga" + Stringa(B) + ": ");       Per (Int C = 0; C < rLcdChr; C++)       {         eeaddress (indirizzo eeaddress) = 0;         eeaddress (indirizzo eeaddress) = (DisplayBankContent (Contenuto Della banca) * (rLcdChr) * LcdRows (informazioni in base ai colori in) + ((rLcdChr) * B) + C;         Valore = 0;         Valore = Eeprom.Leggere(eeaddress (indirizzo eeaddress));         Se (Valore > 31) Non mostrare caratteri speciali         {           mySerial.Stampare(Char(Valore));           Lcd.Stampare(Char(Valore));         } Altro         {           Lcd.Stampare(Char(32));         }       }       mySerial.println();     }   }
}

Vuoto runrealTimeClock()    BASE TEMPORALE
{   Orologio in tempo reale & Conto alla rovescia   lungo precedenteMillis - 0;       memorizzerà l'ultima volta è stato misurato   Dite SecDivider - 0;   Unsigned Lungo currentMillis = millis();   Int ValoreStepValue = 0;   Controllo dello schermo PWM   ValoreStepValue = 4 * FadeSecondi;   Se (currentMillis - previousMillis > ValoreStepValue)   {     previousMillis = currentMillis;     Se (Luminosità corrente < Luminosità di destinazione        )     {       Luminosità corrente = Luminosità corrente + 1;       analogicoScrittura (BackgroundLight, Luminosità corrente);     } Altro Se (Luminosità corrente > Luminosità di destinazione)     {       Luminosità corrente = Luminosità corrente - 1;       analogicoScrittura (BackgroundLight, Luminosità corrente);     }   }   Se (currentMillis - previousMillisB > 1000)   {     secondi-corsa     previousMillisB = currentMillis;   }
}

Vuoto DisplayBank ( Dite cobank)
{   Se (cobank  < EEPromBanche )   {     AggiornaVisualizzazione = Vero;   Inializzare l'output di visualizzazione     DisplayBankContent (Contenuto Della banca) = cobank;     mySerial.println("Banca" + Stringa(cobank) + " viene visualizzato su LCD");     MnuState = 0;     Buffer = "";     Valore = 0;     mySerial.sciacquone();   } Altro   {     mySerial.println("Banca non disponibile.");     Valore = 0;     MnuState = 0;     Buffer = "";     mySerial.sciacquone();   }
}

Vuoto SwitchProcessore()
{   Stato di commutazione = digitalRead (Lettura digitale)(SwitchPin (SwitchPin));   Se ((!Stato di commutazione) && (SwitchstateBuffer (Server switch)) && (Non DisplayLock (DisplayLock)))Opzione di query   {     SwitchstateBuffer (Server switch) = False;     Impronta diretta = False;     Lcd.noCursor (Cursore)();     Lcd.noBlink();     SelectedMsg = SelectedMsg + 1;     Se (SelectedMsg >  EEPromBanche - 1 )     {       SelectedMsg = 0;     }     Lcd.Chiaro();     Lcd.Setcursor(0, 0);     Lcd.Stampare("Banca: " + Stringa(SelectedMsg) + "Selezionato");     Lcd.Setcursor(0, 2);     Ritardo(10);     Valore = DelayTOPWROFF;     Mentre (digitalRead (Lettura digitale)(SwitchPin (SwitchPin)) == 0)     {       Ritardo(1);       Se (Valore > 0) {         Valore = Valore - 1;       };       Lcd.Setcursor(0, 3);     }     DisplayBank(SelectedMsg);   }   Se (Stato di commutazione)   {     SwitchstateBuffer (Server switch) = Vero;     ritardo(10);   }
}

 

Oltre all'estensione hardware, ora abbiamo una piccola funzione di supporto nel menu più: Il comando è "echo". Con questo si accende e si spegne la funzione Echo dei personaggi dell'interfaccia seriale. Per illustrare l'impatto di questo, la schermata seguente disattiva prima la funzione Echo con il comando Echo. Questo viene riconosciuto con "Echo OFF". Lo stesso comando riattiva la funzione Eco. (Attiva/disattiva funzione). Questo è confermato analogamente con "Echo ON". Da questo punto in eloming, ogni carattere di input viene riconosciuto.

Parte 4 - Menu Di visualizzazione

 

Vi auguro un sacco di divertimento ricostruzione e, come sempre, fino alla prossima volta.

DisplaysFür arduinoProjekte für fortgeschritteneSensori

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione