Bienvenue à la cinquième et dernière Partie de l'Écran Bluetooth de Série.
Dans le contexte de la Partie, j'ai quelque chose de spécial à venir. L'Idée m'est venue lors d'un marché aux Puces, chez j'ai quelques vieux Trucs voulait vendre. J'ai pensé que ça serait une bonne Idée de l'Écran n'est pas la maison, mais que l'Affichage est également appelé "Eye Catcher" lors d'un marché aux Puces à utiliser. Enfin, chacun n'a pas une telle chose, et dans le Commerce régulier, j'ai un similaire, l'Écran n'est pas trouvé. Mais que dois-je sur l'Écran lors d'un marché aux Puces de la carte?
Au mieux, un Verkaufsticker! Comment serait-il avec des Messages tels que: Chaque CD-rom uniquement xx Euros, suivi d'un autre Message: Chaque DVD xx Euros. Le Tout est bien sûr préférable que Ticker texte Défilant, par conséquent, de se construire lentement les Lettres de gauche à droite, jusqu'à ce que la totalité du Message est lisible. Pour chaque marché totale de tous les Regards! Pour accéder à cette Fonction à réaliser, nous élargissons maintenant notre Code pour la "Publicité" de la Fonction.
Nous invitons donc d'abord pour la Fonction "Advertising" Code étendu sur notre plate-forme de haut:
#include <SPI.h> #include <Wire.h> #include <SoftwareSerial.h> #include <EEPROM.h> #include <LiquidCrystal.h> #include <avr/sleep.h> #define MaxInputBufferSize 20 // maximum de 255 Caractères à vlcdr #define EEpromSize 990 #define rLcdChr 20 #define LcdRows 4 #define interval 1000 #define BackgroundLight 5 Port// 5 rétro-éclairage LED #define SwitchPin 2 // Port 12 Boutons Nachrichtsauswahl // EEprom SpeicherzellenAdressen pour la Configuration #define EEFadeSeconds 993 #define EEAdvertsecdelay 994 #define EEAdvertMsg 995 #define EEPINA 996 #define EEPINC 997 #define EEPINDD 998 SoftwareSerial mySerial(7, 6); // RX, TX LiquidCrystal lcd(8, 13, 12, 11, 10, 9); //variable d'octets DisplayBankContent = 0; //Serial Input Manipulation char TBuffer; char Cbuffer[MaxInputBufferSize + 1]; //Code USB Input Buffer String Sbuffer = ""; /USB/String Input Buffer int value; //USB Nummeric Entrée Tampon d'octets Account = 0; //Number received Caractères octets Inptype = 0; boolean StrInput = false; boolean NumberInput = false; boolean DataInput = false; boolean EnterInput = false; octets MenueSelection = 0; //Druckknopfsteuerung boolean Switchstate = true; boolean SwitchstateBuffer = true; octets SelectedMsg = 0; //Give Debug technologies de l'Information over serial Interface boolean DebugMode = false; boolean EchoMode = true; //EEPROM int eeaddress; //EEPROM Adresse de Pointeur d'octet EEPromBanks = 0; //Used for Calculating the EEPROM Banks //SerMnueControl octets MnuState = 0; // Maximale Menuetiefe 255 icl Sub octets Selectedbank = 0; //Real Time Clock long previousMillis = 0; // veut store last time ce measured long previousMillisB = 0; // veut store last time ce measured //Gestion de l'Affichage boolean DisplayLock = false; boolean Directprint = false; octets DirectprintROW = 0; octets DirectprintLine = 0; boolean RefreshDisplay = false; octets FRMCheck = 0; // Used fpr Writing Operations to eeprom pour save Maîtres de cycles // BatterieMonitoring float Voltage; boolean PowersaveMode = false; // PWM de commande de l'Éclairage octets Currentbrightness = 0; octets Targetbrightness = 0; octets FadeSeconds = 0; // valeur par Défaut = 3 // Auto Display Z. B pour Werbungszwecke boolean Advertising = false; octets AdvertMsg = 1; // Minimum 1 octet Advertsecdelay = 0; // valeur par Défaut = 6 octets Advertseccounter = 0; void setup() { EEPromBanks = EEpromSize / ((rLcdChr) * LcdRows); lcd.begin(rLcdChr, LcdRows); lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Bluetooth"); lcd.setCursor(0, 1); lcd.print(" Affichage"); mySerial.begin(9600); pinMode(SwitchPin, INPUT_PULLUP); // bouton-Poussoir de Sélection de Texte à partir de l'EEprom pinMode(BackgroundLight, OUTPUT); // Éclairage de l'écran / Écran /DE digitalWrite(BackgroundLight, LOW); // read Config FadeSeconds = EEPROM.read(EEFadeSeconds); Advertsecdelay = EEPROM.read(EEAdvertsecdelay); AdvertMsg = EEPROM.lecture(EEAdvertMsg); Currentbrightness = 0; Targetbrightness = 0; lcd.setCursor(0, 4); si (DisplayLock) { lcd.imprimer(" Système gesperrt"); } // Autres Routines d'Installation / initalizing lcd.setCursor(0, 0); Targetbrightness = 255; mySerial.à chasse(); } // ###################################################################################################### // nulle boucle() { SerialcommandProcessor(); runrealTimeClock(); Displayprocessor(); SwitchProcessor(); //Powermgmt(); //Fin de la boucle Principale } // ###################################################################################################### // void TextHeader(octet rowm) { mySerial.println("Texte pour la Banque " + Chaîne( Selectedbank) + " LIGNE " + de la Chaîne de (rowm) + ":"); } vide SerialcommandProcessor() { int un; Inptype = 0; Inptype = SerInputHandler(); // 0 keine Rückgabe // Nummer 1 // 2 Chaîne // 3 Données si ((Inptype > 0) & (!Directprint)) { MenueSelection = 0; si (la Publicité) { lcd.clair(); de la Publicité = fausse; mySerial.impression de("Publicité "); mySerial.println(("OFF."); } si ((MnuState < 2) && (Inptype == 2)) { Sbuffer.toUpperCase(); // Pour faciliter la Saisie de Commandes } si ((Sbuffer == "DEBUG") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 1; } si ((Sbuffer == "ECHO") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 2; } si ((Sbuffer == "S") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 3; } // Effacement de l'ENSEMBLE de l'EEprom Contenu si ((Sbuffer == "E") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 4; } si ((Sbuffer == "OUI") && (MnuState == 1) && (Inptype == 2)) { MenueSelection = 5; } si ((Sbuffer != "OUI") && (MnuState == 1) && (Inptype == 2)) { MenueSelection = 6; } //permet de Modifier le Contenu Sélectionné si ((Sbuffer == "W") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 7; } si ((MnuState == 2) && (valeur < EEPromBanks) && (Inptype == 1)) { MenueSelection = 8; } si (MnuState == 3) { MenueSelection = 9; } si (MnuState == 4) { MenueSelection = 10; } //Affichage du Contenu Sélectionné si ((Sbuffer == "P") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 11; } si ((MnuState == 5) && (Inptype == 1)) { MenueSelection = 12; } si ((Sbuffer == "R") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 13; } si ((MnuState == 6) && (Inptype == 1)) { MenueSelection = 14; } si ((Sbuffer == "D") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 15; } si ((Sbuffer == "Z") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 16; } si ((Sbuffer == "B") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 17; } si ((MnuState == 7) && (Inptype == 1)) { MenueSelection = 18; } si ((Sbuffer == "FADE") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 19; } si (MnuState == 9) { MenueSelection = 20; } si (MnuState == 10) { MenueSelection = 21; } si ((Sbuffer == "ANNONCE") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 23; } si (MnuState == 11) { MenueSelection = 24; } si (MnuState == 12) { MenueSelection = 25; } si ((Sbuffer == "IL") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 26; } si (MnuState == 13) { MenueSelection = 27; } si ((Sbuffer == "ADMSG") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 28; } si (MnuState == 14) { MenueSelection = 29; } commutateur (MenueSelection) { cas 1: { mySerial.impression de("Debug "); DebugMode = !DebugMode; si (DebugMode) { mySerial.println(" ON".); EchoMode = faux; } d'autre { mySerial.println(("OFF."); EchoMode = vrai; } mySerial.println(""); mySerial.rincer(); valeur = 0; MnuState = 0; Sbuffer = ""; casser; } cas 2: { mySerial.impression("Echo "); EchoMode = !EchoMode; si (EchoMode) { mySerial.println(" ON".); DebugMode = faux; } d'autre { mySerial.println(("OFF."); } mySerial.println(""); mySerial.rincer(); valeur = 0; MnuState = 0; Sbuffer = ""; casser; } cas 3: { mySerial.println("Lire EEEPROM Contenu:" ); mySerial.chasse(); pour (int un = 0; un < EEPromBanks; un++) { mySerial.println("de la Mémoire EEPROM de la Banque: " + Chaîne(un) ); mySerial.chasse(); pour (int b = 1; b <= LcdRows; b++) { mySerial.print("Ligne " + Chaîne(b) + ": "); mySerial.chasse(); pour (int c = 0; c < rLcdChr; c++) { eeaddress = 0; eeaddress = (un * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c; valeur = de l'EEPROM.en lecture(eeaddress); mySerial.impression(char(valeur)); mySerial.rincer(); } mySerial.println(" "); mySerial.rincer(); } } Sbuffer = ""; mySerial.println("Pas plus EEPROM Banques."); mySerial.rincer(); pause; } de cas 4: { de la valeur = 0; mySerial.imprimer("l'Effacement de l'EEPROM "); mySerial.println("OUI/NON:"); mySerial.rincer(); MnuState = 1; Sbuffer = ""; pause; } de cas 5: { de la valeur = 0; mySerial.imprimer("l'Effacement de l'EEPROM "); mySerial.println("Stand-by"."); mySerial.chasse(); pour (int un = 0; un < EEPromBanks; un++) { //Banque de Mémoire un mySerial.println("Clair de la Banque: " + La chaîne(a)); pour (int b = 1; b <= LcdRows; b++) { pour (int c = 0; c < rLcdChr; c++) { eeaddress = 0; eeaddress = (un * (rLcdChr) * LcdRows) + ((rLcdChr ) * b) + c; FRMCheck = EEPROM.lecture(eeaddress); si (FRMCheck > 0) { EEPROM.écrire(eeaddress, 00); // Formatierung mySerial.impression("."); de la valeur++; de retard(30); mySerial.rincer(); } } } mySerial.println(""); mySerial.rincer(); } mySerial.println(""); mySerial.println("Fini. " + Chaîne de(valeur) + " Octets pointés"); mySerial.println(""); mySerial.rincer(); Sbuffer = ""; MnuState = 0; pause; } de cas 6: { de la valeur = 0; Sbuffer = ""; MnuState = 0; mySerial.println("OP abandonner."); mySerial.rincer(); casser; } cas 7: { mySerial.println("EEPPROM Numéro de Banque (0-" + Chaîne(EEPromBanks - 1) + "):"); mySerial.rincer(); MnuState = 2; valeur = 0; Sbuffer = ""; casser; } cas 8: { Selectedbank = valeur; TextHeader(1); MnuState = 3; Sbuffer = ""; valeur = 0; casser; } cas 9: { WriteEEPROM(Selectedbank, 1); TextHeader(2); valeur = 0; MnuState = 4; Sbuffer = ""; casser; } cas 10: { WriteEEPROM(Selectedbank, 2); valeur = 0; MnuState = 0; Sbuffer = ""; TextHeader(3); mySerial.rincer(); valeur = 0; MnuState = 9; Sbuffer = ""; pause; } de cas 11: { de la valeur = 0; mySerial.println("EEPPROM Numéro de Banque (0-" + Chaîne(EEPromBanks - 1) + "):"); MnuState = 5; Sbuffer = ""; mySerial.rincer(); casser; } cas 12: { SelectedMsg = valeur; DisplayBank(valeur); pause; } de cas 13: { de la valeur = 0; mySerial.println("EEPPROM Numéro de Banque (0-" + Chaîne de(EEPromBanks - 1) + "):"); MnuState = 6; Sbuffer = ""; mySerial.rincer(); casser; } cas 14: { une = valeur; si ( une < EEPromBanks) { mySerial.println("Banque de Mémoire: " + Chaîne(un) ); mySerial.chasse(); pour (int b = 1; b <= LcdRows; b++) { mySerial.print("Ligne " + Chaîne(b) + ": "); mySerial.chasse(); pour (int c = 0; c < rLcdChr; c++) { eeaddress = 0; eeaddress = (un * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c; valeur = de l'EEPROM.en lecture(eeaddress); mySerial.impression(char(valeur)); mySerial.rincer(); } mySerial.println(" "); mySerial.flush(); } } d'autre { mySerial.println("Valeur hors de Portée."); } valeur = 0; Sbuffer = ""; MnuState = 0; pause; } de cas 15: { // Direct pPrint pour Afficher Directprint = vrai; mySerial.println ("Directprint SUR."); si (Directprint) { DirectprintROW = 0; DirectprintLine = 0; lcd.clear(); lcd.curseur à l'(); écran lcd.clignote(); } valeur = 0; Sbuffer = ""; MnuState = 0; pause; } de cas 16: { de la valeur = 0; Sbuffer = ""; MnuState = 0; casser; } cas 17: { mySerial.println("la Luminosité de l'Écran: (max 255)"); MnuState = 7; valeur = 0; Sbuffer = ""; casser; } cas 18: { si ((la valeur < 256)) { Targetbrightness = valeur; mySerial.println("Luminosité: " + Chaîne de (Targetbrightness) + " Set"); } d'autre { mySerial.println("Valeur hors de Portée."); } MnuState = 0; valeur = 0; Sbuffer = ""; casser; } cas 19: { mySerial.println("Fondu de Retard: (max 255 Sec)"); MnuState = 12; valeur = 0; Sbuffer = ""; casser; } cas 20: { WriteEEPROM(Selectedbank, 3); valeur = 0; MnuState = 0; Sbuffer = ""; TextHeader(4); mySerial.rincer(); valeur = 0; MnuState = 10; Sbuffer = ""; casser; } cas 21: { WriteEEPROM(Selectedbank, 4); valeur = 0; MnuState = 0; Sbuffer = ""; casser; } cas 23: { de la Publicité = !de la Publicité; mySerial.impression de("Publicité "); si (la Publicité) { mySerial.println(" SUR."); } d'autre { mySerial.println(("OFF."); } mySerial.rincer(); valeur = 0; MnuState = 0; Sbuffer = ""; casser; } cas 25: { si ((la valeur > 0) & (de la valeur < 251)) { FadeSeconds = valeur; EEPROM.écrire(EEFadeSeconds, FadeSeconds); mySerial.println("Valeur " + Chaîne de (valeur) + " set".); } d'autre { valeur = 0; Sbuffer = ""; mySerial.println("Valeur hors de Portée."); } valeur = 0; MnuState = 0; Sbuffer = ""; casser; } cas 26: { mySerial.println("ADverDelay: (max 255 Sec)"); MnuState = 13; valeur = 0; Sbuffer = ""; casser; } cas 27: { si ((la valeur > 0) & (de la valeur < 256)) { Advertsecdelay = valeur; EEPROM.écrire(EEAdvertsecdelay, Advertsecdelay); mySerial.println("Valeur " + Chaîne de (valeur) + " set".); } d'autre { valeur = 0; Sbuffer = ""; mySerial.println("Valeur hors de Portée."); } valeur = 0; MnuState = 0; Sbuffer = ""; casser; } cas 28: { mySerial.println("ADMsgs: (max " + Chaîne (EEPromBanks) + ")"); MnuState = 14; valeur = 0; Sbuffer = ""; casser; } cas 29: { si ((la valeur > 0) & (de la valeur < EEPromBanks + 1)) { AdvertMsg = valeur; EEPROM.écrire(EEAdvertMsg, AdvertMsg); mySerial.println("Valeur " + Chaîne de (valeur) + " set".); } d'autre { valeur = 0; Sbuffer = ""; mySerial.println("Valeur hors de Portée."); } valeur = 0; MnuState = 0; Sbuffer = ""; pause; } par défaut: { si (DisplayLock) { lcd.clair(); DisplayLock = faux; } mySerial.println("-------Smart Bluetooth Affichage 1.1------"); mySerial.println("S - Lire TOUS les EEPROM des Banques"); mySerial.println("E - Effacer TOUTES les EEPROM des Banques"); mySerial.println("W - Écrire sel. EEPROM de la Banque"); mySerial.println("R - Lire sel. EEPROM de la Banque"); mySerial.println(("P - Impression de l'EEPROM de la Banque sur l'Affichage"); mySerial.println("----------------------------------------"); mySerial.println("D - Impression Directe"); mySerial.println(("B - Affichage de la Brillance Valeur Actuelle: " + la Chaîne de (Currentbrightness)); mySerial.println("----------------------------------------"); mySerial.println("Autre: ANNONCE,l'ADSEC,ADMSG,ECHO"); mySerial.println("----------------------------------------"); mySerial.println("Tapez Cmd et appuyez sur Entrée"); mySerial.rincer(); MnuState = 0; valeur = 0; Sbuffer = ""; } } } // Eingabe erkannt } vide WriteEEPROM(octet FBank, octet FRow) { octet Writecounter; Writecounter = 0; mySerial.impression(de"Sauver "); pour les (int c = 0; c < rLcdChr; c++) { eeaddress = 0; eeaddress = (FBank * (rLcdChr) * LcdRows) + ((rLcdChr) * FRow) + c; valeur = de l'EEPROM.en lecture(eeaddress); si (Sbuffer[c] != valeur) { de l'EEPROM.écrire(eeaddress, Sbuffer[c]); mySerial.impression("."); Writecounter++; } } mySerial.println(" " + Chaîne (Writecounter) + " Octets écrits."); } void ClearCBuffer () { pour les (octets d'un = 0; MaxInputBufferSize - 1; un++) Cbuffer[un] = 0; } octet SerInputHandler() { octet résultat = 0; de type int c,; int d; int a; int b; résultat = 0; si (CheckforserialEvent()) { si ((NumberInput) et pas (DataInput) et pas (StrInput)) //Uniquement les numéros de { Sbuffer = ""; valeur = 0; StrInput = faux; NumberInput = faux; DataInput = faux; EnterInput = faux; a = 0; b = 0; c = 0; d = 0; Sbuffer = Cbuffer; // Zahl wird AUCH ! dans SBUFFER übernommen, tombe benötigt. si (Ccount == 1) { valeur = Cbuffer[0] - 48 ; } si (Ccount == 2) { un = Cbuffer[0] - 48 ; un = un * 10; b = Cbuffer[1] - 48 ; valeur = d'un + b; } si (Ccount == 3) { un = Cbuffer[0] - 48 ; un = un * 100; b = Cbuffer[1] - 48 ; b = b * 10; c = Cbuffer[2] - 48 ; valeur = a + b + c; } si (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 ; valeur = d'un + b + c + d; } si (Ccount >= 5) { Sbuffer = ""; valeur = 0; Sbuffer = Cbuffer; ClearCBuffer; résultat = 2; } d'autre { ClearCBuffer; Ccount = 0; résultat = 1; //Nombre Code_retour NumberInput = faux; StrInput = faux; DataInput = faux; EnterInput = faux; Ccount = 0; retour suite; } } si ((StrInput) et pas (DataInput)) //D'Entrée de chaîne seulement { Sbuffer = ""; Sbuffer = Cbuffer; valeur = 0; StrInput = faux; NumberInput = faux; DataInput = faux; EnterInput = faux; Ccount = 0; ClearCBuffer; résultat = 2; //Nombre Code_retour } si (DataInput) { Sbuffer = ""; Sbuffer = Cbuffer; valeur = 0; StrInput = faux; NumberInput = faux; DataInput = faux; EnterInput = faux; Ccount = 0; ClearCBuffer; résultat = 3; //Nombre Code_retour } si ((EnterInput) et pas (StrInput) et pas (NumberInput) et pas (DataInput)) { Sbuffer = ""; valeur = 0; Ccount = 0; ClearCBuffer; résultat = 4; //Nombre Code_retour } NumberInput = faux; StrInput = faux; DataInput = faux; EnterInput = faux; Ccount = 0; retour résultat; } de retour de résultat; //Fin de la CheckforSerialEvent } // Eingabebuffer boolean CheckforserialEvent() { tout (mySerial.disponible()) { // obtenir la nouvelle octet: TBuffer = mySerial.lire(); si (TBuffer > 9 && TBuffer < 14) { Cbuffer[Ccount] = 0; TBuffer = 0; si (EchoMode) { mySerial.impression(char(13)); mySerial.rincer(); } si (Directprint) { mySerial.println(""); DirectprintLine = 0; DirectprintROW = DirectprintROW + 1; si ( DirectprintROW > 3) { Directprint = faux; lcd.noCursor(); lcd.noBlink(); Sbuffer = ""; valeur = 0; } d'autre { lcd.curseur à l'(); écran lcd.clignote(); lcd.setCursor(0, DirectprintROW); } } EnterInput = vrai; retourner vrai; } sinon si (TBuffer > 47 && TBuffer < 58 ) { si ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; si ((Directprint)) { lcd.imprimer(char(TBuffer)); DirectprintLine = DirectprintLine + 1; si ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } d'autre { lcd.curseur à l'(); écran lcd.clignote(); } } si (EchoMode) { mySerial.impression(char(TBuffer)); mySerial.flush(); } } d'autre { mySerial.d'impression("#"); } //Nombre d'Entrée détecté NumberInput = vrai; } sinon si (TBuffer > 64 && TBuffer < 123 ) { si ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; si ((Directprint)) { lcd.imprimer(char(TBuffer)); DirectprintLine = DirectprintLine + 1; si ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } d'autre { lcd.curseur à l'(); écran lcd.clignote(); } } si (EchoMode) { mySerial.impression(char(TBuffer)); mySerial.flush(); } } d'autre { mySerial.d'impression("#"); } //Caractère Char d'Entrée détecté StrInput = vrai; } sinon si ( (TBuffer == 127 ) | (TBuffer == 8 ) ) { si ( DirectprintLine > 0 ) { DirectprintLine = DirectprintLine - 1; lcd.setCursor(DirectprintLine, DirectprintROW); lcd.imprimer(" "); lcd.setCursor(DirectprintLine, DirectprintROW); } si (( DirectprintLine == 0 ) & ( DirectprintROW > 0 )) { DirectprintROW = DirectprintROW - 1; DirectprintLine = rLcdChr - 1; lcd.setCursor(DirectprintLine, DirectprintROW); } si ( Ccount > 0) { Ccount--; Cbuffer[Ccount] = 0; si ((Directprint)) { si ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } d'autre { lcd.curseur(); écran lcd.clignote(); } } si (EchoMode) { mySerial.impression("-"); mySerial.chasse d'(); } } } ailleurs { si ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; si ((Directprint)) { DirectprintLine = DirectprintLine + 1; si (TBuffer < 128) { lcd.imprimer(char(TBuffer)); } d'autre { lcd.imprimer(Chaîne(TBuffer)); } si ( Ccount > MaxInputBufferSize - 1) { lcd.noCursor(); lcd.noBlink(); } d'autre { lcd.curseur à l'(); écran lcd.clignote(); } } si (EchoMode) { mySerial.impression(char(TBuffer)); mySerial.rincer(); } } d'autre { mySerial.d'impression("#"); } //Saisie des Données détectées DataInput = true; } return false; } return false; } vide Displayprocessor() // Bei Blauem Affichage wird auf Scrollfunktion verzichtet, da das nur "schmiert" { si (RefreshDisplay) { lcd.clair(); RefreshDisplay = faux; pour (int b = 1; b <= LcdRows; b++) { lcd.setCursor(0, b - 1); si (!la Publicité) { mySerial.print("Ligne " + de la Chaîne(b) + ": "); } de (type int c = 0; c < rLcdChr; c++) { eeaddress = 0; eeaddress = (DisplayBankContent * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c; valeur = 0; de la valeur = de l'EEPROM.en lecture(eeaddress); si (la valeur > 31) // Sonderzeichen nicht anzeigen { si (!la Publicité) { mySerial.impression(char(valeur)); } d'autre { retard(100); } lcd.imprimer(char(valeur)); } d'autre { lcd.imprimer(char(32)); } } si (!la Publicité) { mySerial.println(); } } } } vide runrealTimeClock() //base de temps { // Temps Réel l'Horloge et le compte à Rebours // long previousMillis = 0; // va stocker la dernière fois a été mesurée // octet SecDivider = 0; unsigned long currentMillis = millis(); int StepValue = 0; // PWM Affichage Steuerung StepValue = 4 * FadeSeconds; si (currentMillis - previousMillis > StepValue) { previousMillis = currentMillis; si (Currentbrightness < Targetbrightness ) { Currentbrightness = Currentbrightness + 1; analogWrite (BackgroundLight, Currentbrightness); } d'autre si (Currentbrightness > Targetbrightness) { Currentbrightness = Currentbrightness - 1; analogWrite (BackgroundLight, Currentbrightness); } } si (currentMillis - previousMillisB > 1000) { // sekundentakt previousMillisB = currentMillis; // La publicité si (la Publicité) { si (Advertseccounter > Advertsecdelay) { Advertseccounter = 0; DisplayBankContent = DisplayBankContent + 1; si (DisplayBankContent > AdvertMsg - 1) { DisplayBankContent = 0; } RefreshDisplay = vrai; } d'autre { Advertseccounter = Advertseccounter + 1; } } } } vide DisplayBank ( octet cobank) { si (cobank < EEPromBanks ) { RefreshDisplay = vrai; // Initalize de la Sortie d'Affichage DisplayBankContent = cobank; mySerial.println("Banque " + de la Chaîne de(cobank) + " est affiché sur l'écran LCD"); MnuState = 0; Sbuffer = ""; valeur = 0; mySerial.flush(); } d'autre { mySerial.println("La banque n'est pas disponible."); valeur = 0; MnuState = 0; Sbuffer = ""; mySerial.à chasse(); } } nulle SwitchProcessor() { Switchstate = digitalRead(SwitchPin); si ((!Switchstate) && (SwitchstateBuffer) && (pas DisplayLock))// Abfrage Schalter { SwitchstateBuffer = fausse; Publicité = fausse; Directprint = faux; lcd.noCursor(); lcd.noBlink(); SelectedMsg = SelectedMsg + 1; si (SelectedMsg > EEPromBanks - 1 ) { SelectedMsg = 0; } lcd.clear(); lcd.setCursor(0, 0); lcd.imprimer("de la Banque: " + Chaîne de(SelectedMsg) + " sélectionné"); retard(10); de la valeur = 50000; tout en (digitalRead(SwitchPin) == 0) { retard(1); si (la valeur > 0) { valeur = valeur - 1; }; lcd.setCursor(0, 3); si (la valeur > 0) { lcd.imprimer("Power off: " + Chaîne de(valeur / 100) + " sec "); }; } DisplayBank(SelectedMsg); } si (Switchstate) { SwitchstateBuffer = vrai; // delay(10); } }
Ab jetzt ist das Menü de messagerie unifiée 3 autres Optionen reicher: ANNONCE, l'ADSEC, und ADMSG. Diese zeigt unser. Menü unter "Autres": l'
Als Handyapp empfehle zur ich Bedienung die App "BlueTerm" die es kostenlos aus dem Google Store 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: "Valeur 2 set".
Avoir suivi geben wir den Befehl "IL" ein gefolgt von einer Zahl zwischen 1 et 255. Dabei steht die eingegebene Zahl für die Anzahl un Sekunden, bis die 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: "Valeur de 5 set".
Als letzten Schritt geben wir nonne den Befehl "ANNONCE" ein. Nach der Quittierung des Befehls durch "de la Publicité Sur" wird nonne immer im Wechsel automatisch mourir Nachrichten aus den Bänken 0-2 hintereinander anzeigt. Ausschalten lässt sich die Automatik durch erneute Eingabe des Befehls ANNONCE oder durch einen druck auf den Nachrichtenwahltaster.
Ich wünsche viel Spaß beim Nachbauen und wie immer bis zum nächsten Mal.