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':
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.