Welkom bij het vijfde en voorlaatste deel van de Bluetooth-weergaveserie.
In het deel van vandaag heb ik iets speciaals bedacht. Het idee kwam bij me op een rommelmarkt waar ik wat oude dingen wilde verkopen. Ik dacht dat het een goed idee zou zijn om het scherm niet thuis te kunnen gebruiken, maar om het scherm te gebruiken als een "blikvanger" op een rommelmarkt. Tenslotte heeft niet iedereen zoiets en ook in de reguliere handel heb ik geen vergelijkbare weergave gevonden. Maar wat moet ik op het display tonen op een rommelmarkt?
Het beste is een verkoopsticker! Hoe zit het met berichten als: Elke CD kost slechts xx euro, gevolgd door een ander bericht zoals: Elke dvd xx euro. Het geheel ziet er het beste uit als ticker ticker, dus de individuele letters worden langzaam opgebouwd van links naar rechts totdat het hele bericht leesbaar is. Een echte blikvanger voor elke rommelmarkt! Om deze functie te implementeren, breiden we onze code nu uit met de functie "Reclame".
Daarom uploaden we eerst de code die is uitgebreid met de functie "Reclame" naar ons hardwareplatform:
# opnemen <SPI.h> # opnemen <Draad.h> # opnemen <SoftwareSerieel.h> # opnemen <EEPROM.h> # opnemen <Vloeibaar Kristal.h> # opnemen <avr/slapen.h> #define MaxInputBufferSize 20 // maximaal 255 tekens aanpassen aan vlcdr #define EEpromSize 990 #define rLcdChr 20 #define LcdRijen 4 #define interval 1000 #define Achtergrondlicht 5 // Poort 5 achtergrondverlichting LED #define SwitchPin 2 // Poort 12 knop berichtselectie // EEprom geheugenceladressen voor configuratie #define EEFadeSeconds 993 #define EEAdvertsecdelay 994 #define EEAdvertMsg 995 #define EEPINA 996 #define EEPINC 997 #define EEPINDD 998 SoftwareSerieel mySerial(7, 6); // RX, TX Vloeibaar Kristal lcd(8, 13, 12, 11, 10, 9); // variabelen byte DisplayBankContent = 0; // Seriële invoerafhandeling char TBuffer; char Cbuffer[MaxInputBufferSize + 1]; // USB-code invoerbuffer String Sbuffer = ""; // USB string invoerbuffer int waarde; // USB numerieke invoerbuffer byte Ccount = 0; // Aantal ontvangen tekens byte Inptype = 0; Boolean StrInput = fout; Boolean Nummer Input = fout; Boolean Data-invoer = fout; Boolean Enter-invoer = fout; byte Menu selectie = 0; // drukknopbediening Boolean Schakelstatus = waar; Boolean SchakelstatusBuffer = waar; byte Geselecteerd Bericht = 0; // Geef foutopsporingsinformatie via de seriële interface Boolean DebugMode = fout; Boolean EchoMode = waar; // EEPROM int adres; // EEPROM-adreswijzer byte EEPromBanken = 0; // Gebruikt voor het berekenen van de EEPROM-banken // SerMnueControl byte MnuState = 0; // Maximale menudiepte 255 icl sub byte Selectedbank = 0; // Real-time klok lang vorige Millis = 0; // zal de laatste keer opslaan werd gemeten lang vorige MillisB = 0; // zal de laatste keer opslaan werd gemeten // Displaybeheer Boolean DisplayLock = fout; Boolean Directprint = fout; byte DirectprintROW = 0; byte DirectprintLine = 0; Boolean Vernieuwen Display = fout; byte FRMCheck = 0; // Gebruikt voor schrijfbewerkingen naar eeprom, dus bespaar hostcycli // Batterijbewaking zweven Spanning; Boolean PowersaveMode = fout; // PWM-lichtregeling byte Huidige helderheid = 0; byte Doel helderheid = 0; byte FadeSeconds = 0; // standaard = 3 // Auto display bijv. Voor reclamedoeleinden Boolean Adverteren = fout; byte AdvertMsg = 1; // minimaal 1 byte Advertsecdelay = 0; // standaard = 6 byte Advertentieteller = 0; nietig instellen() { EEPromBanken = EEpromSize / ((rLcdChr) * LcdRijen); lcd.beginnen(rLcdChr, LcdRijen); lcd.duidelijk(); lcd.setCursor(0, 0); lcd.afdrukken("Bluetooth"); lcd.setCursor(0, 1); lcd.afdrukken("Display"); mySerial.beginnen(9600); pinMode(SwitchPin, INPUT_PULLUP); // Taster Auswahl Tekst aus EEprom pinMode(Achtergrondlicht, UITGANG); // Displaybeleuchtung / Display AN / AUS digitalWrite(Achtergrondlicht, LAAG); // lees Config FadeSeconds = EEPROM.lezen(EEFadeSeconds); Advertsecdelay = EEPROM.lezen(EEAdvertsecdelay); AdvertMsg = EEPROM.lezen(EEAdvertMsg); Huidige helderheid = 0; Doelhelderheid = 0; lcd.setCursor(0, 4); als (DisplayLock) { lcd.afdrukken("Systeem gesperrt"); } // Verdere setuproutines / initialiseren lcd.setCursor(0, 0); Doelhelderheid = 255; mySerial.blozen(); } // ###################################################################################################### // nietig lus() { Seriële opdracht Processor(); runrealTimeClock(); Displayprocessor(); Schakelaar Processor(); // Powermgmt (); // Einde hoofdlus } // ###################################################################################################### // nietig TextHeader(byte rowm) { mySerial.println("Tekst voor bank" + Draad( Selectedbank) + "ROW" + Draad (rowm) + ":"); } nietig Seriële opdracht Processor() { int een; Inptype = 0; Inptype = SerInputHandler(); // 0 keine Rückgabe // 1 nummer // 2 String // 3 gegevens als ((Inptype > 0) & (!Directprint)) { Menu selectie = 0; als (Adverteren) { lcd.Doorzichtig(); Adverteren = fout; mySerial.afdrukken("Adverteren"); mySerial.println(" UIT."); } als ((MnuState < 2) && (Inptype == 2)) { Sbuffer.toUpperCase(); // Voor eenvoudig invoeren van opdrachten } als ((Sbuffer == "DEBUG") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 1; } als ((Sbuffer == "ECHO") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 2; } als ((Sbuffer == "S") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 3; } // ALLE EEprom-inhoud wissen als ((Sbuffer == "E") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 4; } als ((Sbuffer == "JA") && (MnuState == 1) && (Inptype == 2)) { Menu selectie = 5; } als ((Sbuffer != "JA") && (MnuState == 1) && (Inptype == 2)) { Menu selectie = 6; } // Bewerk geselecteerde inhoud als ((Sbuffer == "W") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 7; } als ((MnuState == 2) && (waarde < EEPromBanken) && (Inptype == 1)) { Menu selectie = 8; } als (MnuState == 3) { Menu selectie = 9; } als (MnuState == 4) { Menu selectie = 10; } // Toon geselecteerde inhoud als ((Sbuffer == "P") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 11; } als ((MnuState == 5) && (Inptype == 1)) { Menu selectie = 12; } als ((Sbuffer == "R") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 13; } als ((MnuState == 6) && (Inptype == 1)) { Menu selectie = 14; } als ((Sbuffer == "D") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 15; } als ((Sbuffer == "Z") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 16; } als ((Sbuffer == "B") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 17; } als ((MnuState == 7) && (Inptype == 1)) { Menu selectie = 18; } als ((Sbuffer == "VERVAGEN") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 19; } als (MnuState == 9) { Menu selectie = 20; } als (MnuState == 10) { Menu selectie = 21; } als ((Sbuffer == "ADVERTENTIE") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 23; } als (MnuState == 11) { Menu selectie = 24; } als (MnuState == 12) { Menu selectie = 25; } als ((Sbuffer == "ADSEC") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 26; } als (MnuState == 13) { Menu selectie = 27; } als ((Sbuffer == "ADMSG") && (MnuState == 0) && (Inptype == 2)) { Menu selectie = 28; } als (MnuState == 14) { Menu selectie = 29; } schakelaar (Menu selectie) { geval 1: { mySerial.afdrukken("Debug"); DebugMode = !DebugMode; als (DebugMode) { mySerial.println(" AAN."); EchoMode = fout; } anders { mySerial.println(" UIT."); EchoMode = waar; } mySerial.println(""); mySerial.blozen(); waarde = 0; MnuState = 0; Sbuffer = ""; breken; } geval 2: { mySerial.afdrukken("Echo"); EchoMode = !EchoMode; als (EchoMode) { mySerial.println(" AAN."); DebugMode = fout; } anders { mySerial.println(" UIT."); } mySerial.println(""); mySerial.blozen(); waarde = 0; MnuState = 0; Sbuffer = ""; breken; } geval 3: { mySerial.println("Lees EEEPROM-inhoud:" ); mySerial.blozen(); voor (int een = 0; een < EEPromBanken; een++) { mySerial.println("EEPROM-geheugenbank:" + Draad(een) ); mySerial.blozen(); voor (int b = 1; b <= LcdRijen; b++) { mySerial.afdrukken("Row" + Draad(b) + ": "); mySerial.blozen(); voor (int c = 0; c < rLcdChr; c++) { adres = 0; adres = (een * (rLcdChr) * LcdRijen) + ((rLcdChr) * b) + c; waarde = EEPROM.lezen(adres); mySerial.afdrukken(char(waarde)); mySerial.blozen(); } mySerial.println(" "); mySerial.blozen(); } } Sbuffer = ""; mySerial.println("Geen EEPROM-banken meer beschikbaar."); mySerial.blozen(); breken; } geval 4: { waarde = 0; mySerial.afdrukken("EEPROM wissen"); mySerial.println("JA NEE:"); mySerial.blozen(); MnuState = 1; Sbuffer = ""; breken; } geval 5: { waarde = 0; mySerial.afdrukken("EEPROM wissen"); mySerial.println("Stand-by."); mySerial.blozen(); voor (int een = 0; een < EEPromBanken; een++) { // Geheugenbank a mySerial.println("Bank wissen:" + Draad(een)); voor (int b = 1; b <= LcdRijen; b++) { voor (int c = 0; c < rLcdChr; c++) { adres = 0; adres = (een * (rLcdChr) * LcdRijen) + ((rLcdChr ) * b) + c; FRMCheck = EEPROM.lezen(adres); als (FRMCheck > 0) { EEPROM.schrijven(adres, 00); // Formatierung mySerial.afdrukken("."); waarde++; vertraging(30); mySerial.blozen(); } } } mySerial.println(""); mySerial.blozen(); } mySerial.println(""); mySerial.println("Afgewerkt. " + Draad(waarde) + "Bytes gewist"); mySerial.println(""); mySerial.blozen(); Sbuffer = ""; MnuState = 0; breken; } geval 6: { waarde = 0; Sbuffer = ""; MnuState = 0; mySerial.println("OP afbreken."); mySerial.blozen(); breken; } geval 7: { mySerial.println("EEPPROM Banknummer (0-" + Draad(EEPromBanken - 1) + "):"); mySerial.blozen(); MnuState = 2; waarde = 0; Sbuffer = ""; breken; } geval 8: { Selectedbank = waarde; TextHeader(1); MnuState = 3; Sbuffer = ""; waarde = 0; breken; } geval 9: { WriteEEPROM(Selectedbank, 1); TextHeader(2); waarde = 0; MnuState = 4; Sbuffer = ""; breken; } geval 10: { WriteEEPROM(Selectedbank, 2); waarde = 0; MnuState = 0; Sbuffer = ""; TextHeader(3); mySerial.blozen(); waarde = 0; MnuState = 9; Sbuffer = ""; breken; } geval 11: { waarde = 0; mySerial.println("EEPPROM Banknummer (0-" + Draad(EEPromBanken - 1) + "):"); MnuState = 5; Sbuffer = ""; mySerial.blozen(); breken; } geval 12: { Geselecteerd Bericht = waarde; DisplayBank(waarde); breken; } geval 13: { waarde = 0; mySerial.println("EEPPROM Banknummer (0-" + Draad(EEPromBanken - 1) + "):"); MnuState = 6; Sbuffer = ""; mySerial.blozen(); breken; } geval 14: { een = waarde; als ( een < EEPromBanken) { mySerial.println("Geheugenbank:" + Draad(een) ); mySerial.blozen(); voor (int b = 1; b <= LcdRijen; b++) { mySerial.afdrukken("Row" + Draad(b) + ": "); mySerial.blozen(); voor (int c = 0; c < rLcdChr; c++) { adres = 0; adres = (een * (rLcdChr) * LcdRijen) + ((rLcdChr) * b) + c; waarde = EEPROM.lezen(adres); mySerial.afdrukken(char(waarde)); mySerial.blozen(); } mySerial.println(" "); mySerial.blozen(); } } anders { mySerial.println("Waarde buiten bereik."); } waarde = 0; Sbuffer = ""; MnuState = 0; breken; } geval 15: { // Directe afdruk afdrukken Directprint = waar; mySerial.println ("Directprint AAN."); als (Directprint) { DirectprintROW = 0; DirectprintLine = 0; lcd.Doorzichtig(); lcd.cursor(); lcd.knipperen(); } waarde = 0; Sbuffer = ""; MnuState = 0; breken; } geval 16: { waarde = 0; Sbuffer = ""; MnuState = 0; breken; } geval 17: { mySerial.println("Displayhelderheid: (max 255)"); MnuState = 7; waarde = 0; Sbuffer = ""; breken; } geval 18: { als ((waarde < 256)) { Doelhelderheid = waarde; mySerial.println("Helderheid:" + Draad (Doelhelderheid) + "Set"); } anders { mySerial.println("Waarde buiten bereik."); } MnuState = 0; waarde = 0; Sbuffer = ""; breken; } geval 19: { mySerial.println("Fade Delay: (max 255 Sec)"); MnuState = 12; waarde = 0; Sbuffer = ""; breken; } geval 20: { WriteEEPROM(Selectedbank, 3); waarde = 0; MnuState = 0; Sbuffer = ""; TextHeader(4); mySerial.blozen(); waarde = 0; MnuState = 10; Sbuffer = ""; breken; } geval 21: { WriteEEPROM(Selectedbank, 4); waarde = 0; MnuState = 0; Sbuffer = ""; breken; } geval 23: { Adverteren = !Adverteren; mySerial.afdrukken("Adverteren"); als (Adverteren) { mySerial.println(" AAN."); } anders { mySerial.println(" UIT."); } mySerial.blozen(); waarde = 0; MnuState = 0; Sbuffer = ""; breken; } geval 25: { als ((waarde > 0) & (waarde < 251)) { FadeSeconds = waarde; EEPROM.schrijven(EEFadeSeconds, FadeSeconds); mySerial.println("Waarde " + Draad (waarde) + "ingesteld."); } anders { waarde = 0; Sbuffer = ""; mySerial.println("Waarde buiten bereik."); } waarde = 0; MnuState = 0; Sbuffer = ""; breken; } geval 26: { mySerial.println("ADverDelay: (max 255 sec)"); MnuState = 13; waarde = 0; Sbuffer = ""; breken; } geval 27: { als ((waarde > 0) & (waarde < 256)) { Advertsecdelay = waarde; EEPROM.schrijven(EEAdvertsecdelay, Advertsecdelay); mySerial.println("Waarde " + Draad (waarde) + "ingesteld."); } anders { waarde = 0; Sbuffer = ""; mySerial.println("Waarde buiten bereik."); } waarde = 0; MnuState = 0; Sbuffer = ""; breken; } geval 28: { mySerial.println("ADMsgs: (max" + Draad (EEPromBanken) + ")"); MnuState = 14; waarde = 0; Sbuffer = ""; breken; } geval 29: { als ((waarde > 0) & (waarde < EEPromBanken + 1)) { AdvertMsg = waarde; EEPROM.schrijven(EEAdvertMsg, AdvertMsg); mySerial.println("Waarde " + Draad (waarde) + "ingesteld."); } anders { waarde = 0; Sbuffer = ""; mySerial.println("Waarde buiten bereik."); } waarde = 0; MnuState = 0; Sbuffer = ""; breken; } standaard: { als (DisplayLock) { lcd.Doorzichtig(); DisplayLock = fout; } mySerial.println("------- Smart Bluetooth Display 1.1 ------"); mySerial.println("S - Lees ALLE EEPROM-banken"); mySerial.println("E - ALLE EEPROM-banken wissen"); mySerial.println("W - Schrijf sel. EEPROM Bank"); mySerial.println("R - Lees selectie. EEPROM Bank"); mySerial.println("P - EEPROM-bank afdrukken op display"); mySerial.println("----------------------------------------"); mySerial.println("D - Direct afdrukken"); mySerial.println("B - Huidige waarde van helderheid weergeven:" + Draad (Huidige helderheid)); mySerial.println("----------------------------------------"); mySerial.println("Overige: ADVERT, ADSEC, ADMSG, ECHO"); mySerial.println("----------------------------------------"); mySerial.println("Typ Cmd en druk op Enter"); mySerial.blozen(); MnuState = 0; waarde = 0; Sbuffer = ""; } } } // Eingabe erkannt } nietig WriteEEPROM(byte FBank, byte Nu) { byte Schrijfteller; Schrijfteller = 0; mySerial.afdrukken("Opslaan"); voor (int c = 0; c < rLcdChr; c++) { adres = 0; adres = (FBank * (rLcdChr) * LcdRijen) + ((rLcdChr) * Nu) + c; waarde = EEPROM.lezen(adres); als (Sbuffer[c] != waarde) { EEPROM.schrijven(adres, Sbuffer[c]); mySerial.afdrukken("."); Schrijfteller++; } } mySerial.println(" " + Draad (Schrijfteller) + "Bytes geschreven."); } nietig ClearCBuffer () { voor (byte een = 0; MaxInputBufferSize - 1; een++) Cbuffer[een] = 0; } byte SerInputHandler() { byte resultaat = 0; int c; int d; int een; int b; resultaat = 0; als (CheckforserialEvent()) { als ((Nummer Input) en niet (Data-invoer) en niet (StrInput)) //Alleen nummers { Sbuffer = ""; waarde = 0; StrInput = fout; Nummer Input = fout; Data-invoer = fout; Enter-invoer = fout; een = 0; b = 0; c = 0; d = 0; Sbuffer = Cbuffer; // Zahl wird AUCH! in SBUFFER übernommen, valt benötigt. als (Ccount == 1) { waarde = Cbuffer[0] - 48 ; } als (Ccount == 2) { een = Cbuffer[0] - 48 ; een = een * 10; b = Cbuffer[1] - 48 ; waarde = een + b; } als (Ccount == 3) { een = Cbuffer[0] - 48 ; een = een * 100; b = Cbuffer[1] - 48 ; b = b * 10; c = Cbuffer[2] - 48 ; waarde = een + b + c; } als (Ccount == 4) { een = Cbuffer[0] - 48 ; een = een * 1000; b = Cbuffer[1] - 48 ; b = b * 100; c = Cbuffer[2] - 48 ; c = c * 10; d = Cbuffer[3] - 48 ; waarde = een + b + c + d; } als (Ccount >= 5) { Sbuffer = ""; waarde = 0; Sbuffer = Cbuffer; ClearCBuffer; resultaat = 2; } anders { ClearCBuffer; Ccount = 0; resultaat = 1; // Nummer retourcode Nummer Input = fout; StrInput = fout; Data-invoer = fout; Enter-invoer = fout; Ccount = 0; terug resultaat; } } als ((StrInput) en niet (Data-invoer)) // Alleen stringinvoer { Sbuffer = ""; Sbuffer = Cbuffer; waarde = 0; StrInput = fout; Nummer Input = fout; Data-invoer = fout; Enter-invoer = fout; Ccount = 0; ClearCBuffer; resultaat = 2; // Nummer retourcode } als (Data-invoer) { Sbuffer = ""; Sbuffer = Cbuffer; waarde = 0; StrInput = fout; Nummer Input = fout; Data-invoer = fout; Enter-invoer = fout; Ccount = 0; ClearCBuffer; resultaat = 3; // Nummer retourcode } als ((Enter-invoer) en niet (StrInput) en niet (Nummer Input) en niet (Data-invoer)) { Sbuffer = ""; waarde = 0; Ccount = 0; ClearCBuffer; resultaat = 4; //Aantal Retournummer } NumberInput = valse; StrInput = valse; DataInput = valse; EnterInput = valse; Ccount = 0; return resultaat; } return resultaat; //Einde CheckforSerialEvent } // Eingabebuffer boolean CheckforserialEvent() { terwijl (mySerial.beschikbaar()) { // voor de nieuwe byte: TBuffer = mySerial.lezen(); als (TBuffer > 9 && TBuffer < 14) { Cbuffer[Ccount] = 0; TBuffer = 0; als (EchoMode) { mySerial.print(char(13)); mySerial.flush(); } als (Directprint) { mySerial.println(""); DirectprintLine = 0; DirectprintROW = DirectprintROW + 1; als ( DirectprintROW > 3) { Directprint = valse; lcd.noCursor(); lcd.noBlink(); Sbuffer = ""; waarde = 0; } anders { lcd -.cursor(); lcd.knipperen(); lcd.setCursor(0, DirectprintROW); } } EnterInput = true; return true; } else als (TBuffer > 47 && TBuffer < 58 ) { als ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; als ((Directprint)) { lcd -.print(char(TBuffer)); DirectprintLine = DirectprintLine + 1; als ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } anders { lcd -.cursor(); lcd-scherm.knipperen(); } } als (EchoMode) { mySerial.print(char(TBuffer)); mySerial.flush(); } } anders { mySerial.print("#"); } //Nummer Invoer gedetecteerd NumberInput = waar; } anders als (TBuffer > 64 && TBuffer < 123 ) { als ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; als ((Directprint)) { lcd -.print(char(TBuffer)); DirectprintLine = DirectprintLine + 1; als ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } anders { lcd -.cursor(); lcd-scherm.knipperen(); } } als (EchoMode) { mySerial.print(char(TBuffer)); mySerial.flush(); } } anders { mySerial.print("#"); } //Karakter Char Invoer gedetecteerd StrInput = waar; } anders als ( (TBuffer == 127 ) | (TBuffer == 8 ) ) { als ( DirectprintLine > 0 ) { DirectprintLine = DirectprintLine - 1; lcd.setCursor(DirectprintLine, DirectprintROW); lcd -.print(" "); lcd.setCursor(DirectprintLine, DirectprintROW); } als (( DirectprintLine == 0 ) & ( DirectprintROW > 0 )) { DirectprintROW = DirectprintROW - 1; DirectprintLine = rLcdChr - 1; lcd.setCursor(DirectprintLine, DirectprintROW); } als ( Ccount > 0) { Ccount--; Cbuffer[Ccount] = 0; als ((Directprint)) { als ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } anders { lcd -.cursor(); lcd-scherm.knipperen(); } } als (EchoMode) { mySerial.print("-"); mySerial.flush(); } } } anders { als ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; als ((Directprint)) { DirectprintLine = DirectprintLine + 1; als (TBuffer < 128) { lcd -.print(char(TBuffer)); } anders { lcd -.print(String(TBuffer)); } als ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } anders { lcd -.cursor(); lcd-scherm.knipperen(); } } als (EchoMode) { mySerial.print(char(TBuffer)); mySerial.flush(); } } anders { mySerial.print("#"); } //Data-Invoer gedetecteerd DataInput = true; } return false; } return false; } void Displayprocessor() // Bei Blauem Display wird auf Scrollfunktion verzichtet, da das nur "schmiert" { als (RefreshDisplay) { lcd.helder(); RefreshDisplay = false; voor (int b = 1; b <= LcdRows; b++) { lcd -.setCursor(0, b - 1); als (!Reclame) { mySerial.print("Rij " + String(b) + ": "); } voor (int c = 0; c < rLcdChr; c++) { eeaddress = 0; eeaddress = (DisplayBankContent * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c; waarde = 0; waarde = EEPROM.lezen(eeaddress); als (waarde > 31) // Sonderzeichen nicht anzeigen { als (!Reclame) { mySerial.print(char(waarde)); } anders { vertraging(100); } lcd -.print(char(waarde)); } anders { lcd -.print(char(32)); } } als (!Reclame) { mySerial.println(); } } } } void runrealTimeClock() //TIJDBASIS { // Real-Time Klok en Timerfunctie // lange previousMillis = 0; // slaat de laatste tijd werd gemeten // byte SecDivider = 0; unsigned long currentMillis = millis(); int StepValue = 0; // PWM-Display Steuerung StepValue = 4 * FadeSeconds; als (currentMillis - previousMillis > StepValue) { previousMillis = currentMillis; als (Currentbrightness < Targetbrightness ) { Currentbrightness = Currentbrightness + 1; analogWrite (BackgroundLight, Currentbrightness); } anders als (Currentbrightness > Targetbrightness) { Currentbrightness = Currentbrightness - 1; analogWrite (BackgroundLight, Currentbrightness); } } als (currentMillis - previousMillisB > 1000) { // sekundentakt previousMillisB = currentMillis; // Reclame als (Reclame) { als (Advertseccounter > Advertsecdelay) { Advertseccounter = 0; DisplayBankContent = DisplayBankContent + 1; als (DisplayBankContent > AdvertMsg - 1) { DisplayBankContent = 0; } RefreshDisplay = waar; } anders { Advertseccounter = Advertseccounter + 1; } } } } void DisplayBank ( byte cobank) { als (cobank < EEPromBanks ) { RefreshDisplay = true; // Initalize Display Output DisplayBankContent = cobank; mySerial.println("Bank " + String(cobank) + " wordt weergegeven op het LCD -"); MnuState = 0; Sbuffer = ""; waarde = 0; mySerial.flush(); } anders { mySerial.println("Bank niet beschikbaar is."); waarde = 0; MnuState = 0; Sbuffer = ""; mySerial.flush(); } } void SwitchProcessor() { Switchstate = digitalRead(SwitchPin); als ((!Switchstate) && (SwitchstateBuffer) && (niet DisplayLock))// Abfrage Schalter { SwitchstateBuffer = valse; Reclame = valse; Directprint = valse; lcd.noCursor(); lcd.noBlink(); SelectedMsg = SelectedMsg + 1; als (SelectedMsg > EEPromBanks - 1 ) { SelectedMsg = 0; } lcd -.duidelijk(); lcd -.setCursor(0, 0); lcd -.print("Bank: " + String(SelectedMsg) + " geselecteerd"); delay(10); waarde = 50000; , terwijl (digitalRead(SwitchPin) == 0) { vertraging(1); als (waarde > 0) { waarde = waarde - 1; }; lcd.setCursor(0, 3); als (waarde > 0) { lcd -.print("Power off: " + String(waarde / 100) + " sec "); }; } DisplayBank(SelectedMsg); } als (Switchstate) { SwitchstateBuffer = true; // delay(10); } }
Ab jetzt ist das Menu um 3 weitere Opties reicher: ADVERTENTIE, ADSEC, und ADMSG. Diese zeigt unser Menu unter "Andere" een:
Als Handyapp empfehle ich zur Bedienung sterven App "BlueTerm" sterven es kostenlos aus dem Google Store zu beladen gibt. Um nun sterven Nachrichten nacheinander automatisch anzeigen zu lassen, ist wie folgt vorzugehen:
Als erstes wir setzen mit dem Befehl ADMSG sterven Anzahl een Nachrichten von 0 zählend, sterven nacheinander angezeigt werden sollen. Beispiel: Wir haben in den Bänken 0-2 insges. 3 Nachrichten confirmed, sterven angezeigt werden sollen.
Dann geben wir nach dem Befehl ADMSG die Zahl 4 ein. Als Quittierung bekommen wir sterven Ausgabe: "Waarde 2".
Danach geben wir den Befehl "ADSEC" ein gefolgt von einer Zahl tussen 1 en 255. Dabei steht sterven eingegebene Zahl für die Anzahl een Sekunden, bis sterven angezeigte aktuelle Nachricht durch die nächste konfigurierte Nachricht ersetzt wird. Als Beispiel geben wir hier "5" ein. Als Quittierung bekommen wir auch wieder hier sterven Ausgabe: "Waarde 5 set".
Als letzten Deel geben wir nun den Befehl "ADVERTENTIE" ein. Nach der Quittierung des Befehls durch "Reclame Op" wird nun immer im Wechsel automatisch sterven Nachrichten aus den Bänken 0-2 hintereinander anzeigt. Ausschalten lässt sich die Automatik durch erneute Eingabe des Befehls ADVERTENTIE oder durch einen druck auf den Nachrichtenwahltaster.
Ich wünsche viel Spaß beim Nachbauen und wie immer bis zum nächsten Mal.