Écran Bluetooth - Teil 3

Bienvenue dans la troisième partie de la série Bluetooth Display. Aujourd’hui, en plus d’un élément de menu d’opérateur supplémentaire obligatoire, notre écran reçoit une petite extension du matériel! Avec cette nouvelle extension matérielle, la luminosité de fond de notre écran peut être contrôlée et configurée par un logiciel !

À cette fin, nous utilisons le port 5 de notre Uno comme puissance de modulation de largeur de pouls. Cette sortie contrôle ensuite un module pilote IRF520. Ce module, qui est également utilisé par exemple pour contrôler les moteurs, nous utilisons pour contrôler la connexion au sol des led intégrées de l’écran. (L’IRF520 passe au sol)

De cette façon, vous pouvez contrôler la luminosité de notre écran en 255 niveaux. En outre, il est également pratique à partir de notre terminal Bluetooth.

Mais maintenant, à la construction et la mise en œuvre réelles de l’élargissement. Dans un premier temps, nous étendons notre matériel comme le montre le schéma suivant à Module pilote IRF520 MOS.

 

 

Circuit - Bluetooth Display Part 3

Dans le circuit, la première chose qui ressort, c’est que les terminaux d’entrée et de sortie positifs de la Module pilote IRF520 MOSne sont pas occupés. Ce n’est pas une erreur de circuit, car ces terminaux / connexions du module ne sont pas nécessaires pour le fonctionnement de notre circuit, car nous obtenons la tension de fonctionnement positive pour le rétro-éclairage de l’écran via le pré-stand directement via le rail de 5 volts.

(Même dans le module lui-même, les terminaux Vin et VMD ne sont pontés et n’ont pas de composants actifs ou passifs entre les deux terminaux!)

Par conséquent, ne soyez pas irrité par le mode de commutation du module, qui diffère quelque peu de la norme.

Ensuite, pour cette extension, nous téléchargeons le code personnalisé suivant sur notre ARduino UNO :

 

#include <Spi.H (en)>
#include <Fil.H (en)>
#include <LogicielsSerial.H (en)>
#include <Eeprom.H (en)>
#include <LiquidCrystal (en).H (en)>
#include <Avr (Avr)/Dormir.H (en)>

#define MaxInputBufferSize 20 maximum 255 caractères pour s’adapter à vlcdr
#define EEpromSize (EEpromSize) 990

#define rLcdChr 20
#define LcdRows (LcdRows) 4
#define Intervalle 1000
#define BackgroundLight 5 Port 5 LED rétroéclairée
#define DelayTOPWROFF (en) 500

EEprom Memory CellAddresses pour Configuration
#define EEFadeSeconds  993

#define EEPINA (EEPINA) 996
#define EEPINC (EEPINC) 997
#define EEPINDD 998


LogicielsSerial mySerial (en)(7, 6); RX, TX
LiquidCrystal (en) Lcd(8, 13, 12, 11, 10, 9);


Variables
Octet DisplayBankContent = 0;

Manipulation d’intrants en série
Char Char TBuffer (TBuffer);
Char Char Cbuffer (Cbuffer)[MaxInputBufferSize + 1];     Tampon d’entrée de code USB
String Sbuffer (Sbuffer) = "";                      Tampon d’entrée de chaîne USB
Int Valeur;                                Tampon d’entrée NUmmeric USB
Octet Ccount (Ccount) = 0;                          Nombre reçu Chars
Octet Inptype (Inptype) = 0;
Boolean StrInput (En) = Faux;
Boolean Nombre d’autres = Faux;
Boolean DataInput (en) = Faux;
Boolean EntrezInput = Faux;
Octet MenueSelection = 0;

Octet SelectedMsg = 0;

Eeprom
Int eeaddress;                 Pointeur d’adresse EEPROM
Octet EEPromBanks (en) = 0;          Utilisé pour calculer les banques EEPROM
SerMnueControl
Octet MnuState (en) = 0;            Profondeur maximale du menu 255 icl Sub
Octet Banque sélectionnée = 0;

Horloge en temps réel
Long précédentMillis = 0;       stockera la dernière fois a été mesurée
Long précédenteMillisB = 0;       stockera la dernière fois a été mesurée

Gestion de l’affichage
Boolean DisplayLock (DisplayLock) = Faux;
Boolean Empreinte directe = Faux;
Boolean EchoMode = Vrai;
Octet DirectprintROW = 0;
Octet Ligne d’impression directe = 0;

Boolean RefreshDisplay (en) = Faux;
Octet FRMCheck (FRMCheck) = 0; Utilisé fpr Opérations d’écriture à eeprom afin d’enregistrer les cycles hôtes


Contrôle de la lumière PWM

Octet La droiteur actuelle = 0;
Octet Cédanteur = 0;
Octet FadeSeconds (FadeSeconds) = 0; Norme 3



Vide Configuration()
{   EEPromBanks (en) = EEpromSize (EEpromSize) / ((rLcdChr) * LcdRows (LcdRows));   Lcd.Commencer(rLcdChr, LcdRows (LcdRows));   Lcd.Clair();   Lcd.setCursor(0, 0);   Lcd.Imprimer("Bluetooth");   Lcd.setCursor(0, 1);   Lcd.Imprimer("Affichage");   mySerial (en).Commencer(9600);   pinMode(BackgroundLight, Sortie); Displaybeleuchtung / Affichage AN /AUS   digitalWrite (en)(BackgroundLight, Faible);   lire Config   FadeSeconds (FadeSeconds) = 0;   La droiteur actuelle = 0;   Cédanteur = 0;   Lcd.setCursor(0, 4);   Si (DisplayLock (DisplayLock)) {     Lcd.Imprimer(" Gesperrt système ");   }   D’autres routines d’installation / initalisant   Lcd.setCursor(0, 0);   Cédanteur = 255;   mySerial (en).Rincer();
}



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

Vide Boucle()

{   SerialcommandProcesseur();   runrealTimeClock (en)();   Processeur d’affichage();   Boucle principale de fin
}

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


Vide TextHeader (en)(Octet rowm)
{   mySerial (en).println("Texte pour la Banque" + String( Banque sélectionnée) + " ROW " + String (rowm) + ":");
}

Vide SerialcommandProcesseur()
{   Int Un;   Inptype (Inptype) = 0;   Inptype (Inptype) = SerInputHandler();   0 keine R’ckgabe   1 Nummer   2 Chaîne   3 Données   Si ((Inptype (Inptype) > 0) & (!Empreinte directe))   {     MenueSelection = 0;     Si ((MnuState (en) < 2) && (Inptype (Inptype) == 2)) {       Sbuffer (Sbuffer).àUpperCase();  Pour faciliter les commandes     }     Si ((Sbuffer (Sbuffer) == "S") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 3;     }     Effacer TOUS les contenus EEprom     Si ((Sbuffer (Sbuffer) == "E") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 4;     }     Si ((Sbuffer (Sbuffer) == "OUI") && (MnuState (en) == 1) && (Inptype (Inptype) == 2))      {       MenueSelection = 5;     }     Si ((Sbuffer (Sbuffer) != "OUI") && (MnuState (en) == 1) && (Inptype (Inptype) == 2))     {       MenueSelection = 6;     }     Modifier le contenu sélectionné     Si ((Sbuffer (Sbuffer) == "W") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 7;     }     Si ((MnuState (en) == 2) && (Valeur  < EEPromBanks (en)) && (Inptype (Inptype) == 1)) {       MenueSelection = 8;     }     Si (MnuState (en) == 3)                                               {       MenueSelection = 9;     }     Si (MnuState (en) == 4)                                               {       MenueSelection = 10;     }     Afficher le contenu sélectionné     Si ((Sbuffer (Sbuffer) == "P") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 11;     }     Si ((MnuState (en) == 5) && (Inptype (Inptype) == 1))                           {       MenueSelection = 12;     }     Si ((Sbuffer (Sbuffer) == "R") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 13;     }     Si ((MnuState (en) == 6) && (Inptype (Inptype) == 1))                           {       MenueSelection = 14;     }     Si ((Sbuffer (Sbuffer) == "D") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 15;     }     Si ((Sbuffer (Sbuffer) == "Z") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 16;     }     Si ((Sbuffer (Sbuffer) == "B") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))       {       MenueSelection = 17;     }     Si ((MnuState (en) == 7) && (Inptype (Inptype) == 1))                           {       MenueSelection = 18;     }     Si ((Sbuffer (Sbuffer) == "FADE") && (MnuState (en) == 0) && (Inptype (Inptype) == 2))     {       MenueSelection = 19;     }     Si (MnuState (en) == 9)                                               {       MenueSelection = 20;     }     Si (MnuState (en) == 10)                                              {       MenueSelection = 21;     }     Si (MnuState (en) == 12)                                              {       MenueSelection = 25;     }     Si (MnuState (en) == 13)                                              {       MenueSelection = 27;     }     Si (MnuState (en) == 14)                                              {       MenueSelection = 29;     }     Interrupteur (MenueSelection)     {       Cas 3:         {           mySerial (en).println("Lire le contenu EEEPROM:" );           mySerial (en).Rincer();           Pour (Int Un = 0; Un < EEPromBanks (en); Un++)           {             mySerial (en).println("EEPROM Memory Bank: " + String(Un) );             mySerial (en).Rincer();             Pour (Int B = 1; B <= LcdRows (LcdRows); B++)             {               mySerial (en).Imprimer("Row " + String(B) + ": ");               mySerial (en).Rincer();               Pour (Int C = 0; C < rLcdChr; C++)               {                 eeaddress = 0;                 eeaddress = (Un * (rLcdChr) * LcdRows (LcdRows)) + ((rLcdChr) * B) + C;                 Valeur = Eeprom.Lire(eeaddress);                 mySerial (en).Imprimer(char(Valeur));                 mySerial (en).Rincer();               }               mySerial (en).println(" ");               mySerial (en).Rincer();             }           }           Sbuffer (Sbuffer) = "";           mySerial (en).println("Plus de banques EEPROM disponibles.");           mySerial (en).Rincer();           Pause;         }       Cas 4:         {           Valeur = 0;           mySerial (en).Imprimer("Effacement EEPROM ");           mySerial (en).println("OUI/NON:");           mySerial (en).Rincer();           MnuState (en) = 1;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 5:         {           Valeur = 0;           mySerial (en).Imprimer("Effacement EEPROM ");           mySerial (en).println("Restez là.");           mySerial (en).Rincer();           Pour (Int Un = 0; Un < EEPromBanks (en); Un++)           {             Banque de mémoire a             mySerial (en).println("Clear Bank: " + String(Un));             Pour (Int B = 1; B <= LcdRows (LcdRows); B++)             {               Pour (Int C = 0; C < rLcdChr; C++)               {                 eeaddress = 0;                 eeaddress = (Un * (rLcdChr) * LcdRows (LcdRows)) + ((rLcdChr ) * B) + C;                 FRMCheck (FRMCheck) = Eeprom.Lire(eeaddress);                 Si (FRMCheck (FRMCheck) > 0)                 {                   Eeprom.Écrire(eeaddress, 00); Formatierung Formatierung                   mySerial (en).Imprimer(".");                   Valeur++;                   Retard(30);                   mySerial (en).Rincer();                 }               }             }             mySerial (en).println("");             mySerial (en).Rincer();           }           mySerial (en).println("");           mySerial (en).println("Fini." + String(Valeur) + "Octes effacé");           mySerial (en).println("");           mySerial (en).Rincer();           Sbuffer (Sbuffer) = "";           MnuState (en) = 0;           Pause;         }       Cas 6:         {           Valeur = 0;           Sbuffer (Sbuffer) = "";           MnuState (en) = 0;           mySerial (en).println("OP avorter.");           mySerial (en).Rincer();           Pause;         }       Cas 7:         {           mySerial (en).println(Numéro de banque EEPPROM (0-" + String(EEPromBanks (en) - 1) + "):");           mySerial (en).Rincer();           MnuState (en) = 2;           Valeur = 0;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 8:         {           Banque sélectionnée = Valeur;           TextHeader (en)(1);           MnuState (en) = 3;           Sbuffer (Sbuffer) = "";           Valeur = 0;           Pause;         }       Cas 9:         {           ÉcrireEEPROM(Banque sélectionnée, 1);           TextHeader (en)(2);           Valeur = 0;           MnuState (en) = 4;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 10:         {           ÉcrireEEPROM(Banque sélectionnée, 2);           Valeur = 0;           MnuState (en) = 0;           Sbuffer (Sbuffer) = "";           TextHeader (en)(3);           mySerial (en).Rincer();           Valeur = 0;           MnuState (en) = 9;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 11:         {           Valeur = 0;           mySerial (en).println(Numéro de banque EEPPROM (0-" + String(EEPromBanks (en) - 1) + "):");           MnuState (en) = 5;           Sbuffer (Sbuffer) = "";           mySerial (en).Rincer();           Pause;         }       Cas 12:         {           SelectedMsg = Valeur;           DisplayBank (en)(Valeur);           Pause;         }       Cas 13:         {           Valeur = 0;           mySerial (en).println(Numéro de banque EEPPROM (0-" + String(EEPromBanks (en) - 1) + "):");           MnuState (en) = 6;           Sbuffer (Sbuffer) = "";           mySerial (en).Rincer();           Pause;         }       Cas 14:         {           Un = Valeur;           Si ( Un < EEPromBanks (en))           {             mySerial (en).println("Banque de mémoire: " + String(Un) );             mySerial (en).Rincer();             Pour (Int B = 1; B <= LcdRows (LcdRows); B++)             {               mySerial (en).Imprimer("Row " + String(B) + ": ");               mySerial (en).Rincer();               Pour (Int C = 0; C < rLcdChr; C++)               {                 eeaddress = 0;                 eeaddress = (Un * (rLcdChr) * LcdRows (LcdRows)) + ((rLcdChr) * B) + C;                 Valeur = Eeprom.Lire(eeaddress);                 mySerial (en).Imprimer(char(Valeur));                 mySerial (en).Rincer();               }               mySerial (en).println(" ");               mySerial (en).Rincer();             }           } Autre           {             mySerial (en).println("Valeur hors de portée.");           }           Valeur = 0;           Sbuffer (Sbuffer) = "";           MnuState (en) = 0;           Pause;         }       Cas 15:         {           PPrint direct à afficher           Empreinte directe = Vrai;           mySerial (en).println ("Directprint ON.");           Si (Empreinte directe)           {             DirectprintROW = 0;             Ligne d’impression directe = 0;             Lcd.Clair();             Lcd.Curseur();             Lcd.Clignoter();           }           Valeur = 0;           Sbuffer (Sbuffer) = "";           MnuState (en) = 0;           Pause;         }       Cas 16:         {           Valeur = 0;           Sbuffer (Sbuffer) = "";           MnuState (en) = 0;           Pause;         }       Cas 17:         {           mySerial (en).println("Afficher la luminosité: (max 255)");           MnuState (en) = 7;           Valeur = 0;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 18:         {           Si ((Valeur < 256))           {             Cédanteur = Valeur;             mySerial (en).println("Brightness: " + String (Cédanteur) + "Set");           } Autre           {             mySerial (en).println("Valeur hors de portée.");           }           MnuState (en) = 0;           Valeur = 0;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 19:         {           mySerial (en).println("Fade Delay: (max 255 Sec)");           MnuState (en) = 12;           Valeur = 0;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 20:         {           ÉcrireEEPROM(Banque sélectionnée, 3);           Valeur = 0;           MnuState (en) = 0;           Sbuffer (Sbuffer) = "";           TextHeader (en)(4);           mySerial (en).Rincer();           Valeur = 0;           MnuState (en) = 10;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 21:         {           ÉcrireEEPROM(Banque sélectionnée, 4);           Valeur = 0;           MnuState (en) = 0;           Sbuffer (Sbuffer) = "";           Pause;         }       Cas 25:         {           Si ((Valeur > 0) & (Valeur < 251))           {             FadeSeconds (FadeSeconds) = Valeur;             Eeprom.Écrire(EEFadeSeconds, FadeSeconds (FadeSeconds));             mySerial (en).println("Valeur" + String (Valeur) + "ensemble.");           } Autre           {             Valeur = 0;             Sbuffer (Sbuffer) = "";             mySerial (en).println("Valeur hors de portée.");           }           Valeur = 0;           MnuState (en) = 0;           Sbuffer (Sbuffer) = "";           Pause;         }       Par défaut:         {           mySerial (en).println("-------Smart Bluetooth Display 1.1------");           mySerial (en).println("S - Lire TOUTES les banques EEPROM");           mySerial (en).println("E - Effacer TOUTES les banques EEPROM");           mySerial (en).println("W - Eil. EEPROM Bank");           mySerial (en).println("R - Lire sel. EEPROM Bank");           mySerial (en).println("P - Imprimer EEPROM Bank sur l’affichage");           mySerial (en).println("----------------------------------------");           mySerial (en).println("D - Impression directe");           mySerial (en).println("B - Afficher la valeur actuelle de luminosité: " + String (La droiteur actuelle));           mySerial (en).println("----------------------------------------");           mySerial (en).println("Type Cmd et appuyez sur Entrez");           mySerial (en).Rincer();           MnuState (en) = 0;           Valeur = 0;           Sbuffer (Sbuffer) = "";         }     }   } Eingabe erkannt
}



Vide ÉcrireEEPROM(Octet FBank (FBank), Octet FRow (FRow))
{   Octet Ecrire le compte;   Ecrire le compte = 0;   mySerial (en).Imprimer("Sauver");   Pour (Int C = 0; C < rLcdChr; C++)   {     eeaddress = 0;     eeaddress = (FBank (FBank) * (rLcdChr) * LcdRows (LcdRows)) + ((rLcdChr) * FRow (FRow)) + C;     Valeur = Eeprom.Lire(eeaddress);     Si (Sbuffer (Sbuffer)[C] != Valeur)     {       Eeprom.Écrire(eeaddress, Sbuffer (Sbuffer)[C]);       mySerial (en).Imprimer(".");       Ecrire le compte++;     }   }   mySerial (en).println(" " + String (Ecrire le compte) + "Bytes écrit.");

}

Vide ClearCBuffer (en) ()

{   Pour (Octet Un = 0; MaxInputBufferSize - 1; Un++)     Cbuffer (Cbuffer)[Un] = 0;
}

Octet SerInputHandler()
{   Octet Résultat = 0;   Int C;   Int D;   Int Un;   Int B;   Résultat = 0;   Si (CheckforserialEvent())   {     Si ((Nombre d’autres) Et Pas (DataInput (en)) Et Pas (StrInput (En)))    Nombres seulement     {       Sbuffer (Sbuffer) = "";       Valeur = 0;       StrInput (En) = Faux;       Nombre d’autres = Faux;       DataInput (en) = Faux;       EntrezInput = Faux;       Un = 0;       B = 0;       C = 0;       D = 0;       Sbuffer (Sbuffer) = Cbuffer (Cbuffer); Zahl wird AUCH ! sBUFFER 'bernommen, falls ben’tigt.       Si (Ccount (Ccount) == 1) {         Valeur  = Cbuffer (Cbuffer)[0] - 48 ;       }       Si (Ccount (Ccount) == 2) {         Un = Cbuffer (Cbuffer)[0] - 48 ;         Un = Un * 10;         B = Cbuffer (Cbuffer)[1] - 48 ;         Valeur = Un + B;       }       Si (Ccount (Ccount) == 3) {         Un = Cbuffer (Cbuffer)[0] - 48 ;         Un = Un * 100;         B = Cbuffer (Cbuffer)[1] - 48 ;         B = B * 10;         C = Cbuffer (Cbuffer)[2] - 48 ;         Valeur = Un + B + C;       }       Si (Ccount (Ccount) == 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 ;         Valeur = Un + B + C + D;       }       Si (Ccount (Ccount) >= 5)       {         Sbuffer (Sbuffer) = "";         Valeur = 0;         Sbuffer (Sbuffer) = Cbuffer (Cbuffer);         ClearCBuffer (en);         Résultat = 2;       } Autre       {         ClearCBuffer (en);         Ccount (Ccount) = 0;         Résultat = 1;                                                Code de retour de numéro         Nombre d’autres = Faux;         StrInput (En) = Faux;         DataInput (en) = Faux;         EntrezInput = Faux;         Ccount (Ccount) = 0;         Retour Résultat;       }     }     Si ((StrInput (En)) Et Pas (DataInput (en)))                          Entrée de chaîne seulement     {       Sbuffer (Sbuffer) = "";       Sbuffer (Sbuffer) = Cbuffer (Cbuffer);       Valeur = 0;       StrInput (En) = Faux;       Nombre d’autres = Faux;       DataInput (en) = Faux;       EntrezInput = Faux;       Ccount (Ccount) = 0;       ClearCBuffer (en);       Résultat = 2;                                                 Code de retour de numéro     }     Si (DataInput (en)) {       Sbuffer (Sbuffer) = "";       Sbuffer (Sbuffer) = Cbuffer (Cbuffer);       Valeur = 0;       StrInput (En) = Faux;       Nombre d’autres = Faux;       DataInput (en) = Faux;       EntrezInput = Faux;       Ccount (Ccount) = 0;       ClearCBuffer (en);       Résultat = 3;                                               Code de retour de numéro     }     Si ((EntrezInput) Et Pas (StrInput (En)) Et Pas (Nombre d’autres) Et Pas (DataInput (en)))     {       Sbuffer (Sbuffer) = "";       Valeur = 0;       Ccount (Ccount) = 0;       ClearCBuffer (en);       Résultat = 4;                                               Code de retour de numéro     }     Nombre d’autres = Faux;     StrInput (En) = Faux;     DataInput (en) = Faux;     EntrezInput = Faux;     Ccount (Ccount) = 0;     Retour Résultat;   }   Retour Résultat;   Fin CheckforSerialEvent
}

Eingabebuffer
Boolean CheckforserialEvent()
{   Tandis que (mySerial (en).Disponible()) {     obtenir le nouveau byte:     TBuffer (TBuffer) = mySerial (en).Lire();     Si (TBuffer (TBuffer) > 9 && TBuffer (TBuffer) < 14)     {       Cbuffer (Cbuffer)[Ccount (Ccount)] = 0;       TBuffer (TBuffer) = 0;       Si (EchoMode)       {         mySerial (en).Imprimer(char(13));         mySerial (en).Rincer();       }       Si (Empreinte directe)       {         mySerial (en).println("");         Ligne d’impression directe = 0;         DirectprintROW = DirectprintROW + 1;         Si ( DirectprintROW > 3)         {           Empreinte directe = Faux;           Lcd.noCursor (en)();           Lcd.noBlink (noBlink)();           Sbuffer (Sbuffer) = "";           Valeur = 0;         } Autre         {           Lcd.Curseur();           Lcd.Clignoter();           Lcd.setCursor(0, DirectprintROW);         }       }       EntrezInput = Vrai;       Retour Vrai;     } Autre Si (TBuffer (TBuffer) > 47 && TBuffer (TBuffer) < 58 )     {       Si ( Ccount (Ccount) < MaxInputBufferSize)       {         Cbuffer (Cbuffer)[Ccount (Ccount)] = TBuffer (TBuffer);         Ccount (Ccount)++;         Si ((Empreinte directe))         {           Lcd.Imprimer(char(TBuffer (TBuffer)));           Ligne d’impression directe = Ligne d’impression directe + 1;           Si ( Ccount (Ccount) > MaxInputBufferSize - 1)           {             Lcd.noCursor (en)();             Lcd.noBlink (noBlink)();           } Autre {             Lcd.Curseur();             Lcd.Clignoter();           }         }         Si (EchoMode) {           mySerial (en).Imprimer(char(TBuffer (TBuffer)));           mySerial (en).Rincer();         }       } Autre {         mySerial (en).Imprimer("#");       }       Entrée de nombre détectée       Nombre d’autres = Vrai;     }     Autre Si (TBuffer (TBuffer) > 64 && TBuffer (TBuffer) < 123 )     {       Si ( Ccount (Ccount) < MaxInputBufferSize)       {         Cbuffer (Cbuffer)[Ccount (Ccount)] = TBuffer (TBuffer);         Ccount (Ccount)++;         Si ((Empreinte directe))         {           Lcd.Imprimer(char(TBuffer (TBuffer)));           Ligne d’impression directe = Ligne d’impression directe + 1;           Si ( Ccount (Ccount) > MaxInputBufferSize - 1)           {             Lcd.noCursor (en)();             Lcd.noBlink (noBlink)();           } Autre {             Lcd.Curseur();             Lcd.Clignoter();           }         }         Si (EchoMode) {           mySerial (en).Imprimer(char(TBuffer (TBuffer)));           mySerial (en).Rincer();         }       } Autre {         mySerial (en).Imprimer("#");       }       StrInput (En) = Vrai;     }     Autre Si ( (TBuffer (TBuffer) == 127 )  |  (TBuffer (TBuffer) == 8 ) )     {       Si ( Ligne d’impression directe > 0 )       {         Ligne d’impression directe = Ligne d’impression directe - 1;         Lcd.setCursor(Ligne d’impression directe, DirectprintROW);         Lcd.Imprimer(" ");         Lcd.setCursor(Ligne d’impression directe, DirectprintROW);       }       Si (( Ligne d’impression directe == 0 ) & ( DirectprintROW > 0 ))       {         DirectprintROW = DirectprintROW - 1;         Ligne d’impression directe = rLcdChr - 1;         Lcd.setCursor(Ligne d’impression directe, DirectprintROW);       }       Si ( Ccount (Ccount) > 0)       {         Ccount (Ccount)--;         Cbuffer (Cbuffer)[Ccount (Ccount)] = 0;         Si ((Empreinte directe))         {           Si ( Ccount (Ccount) > MaxInputBufferSize - 1)           {             Lcd.noCursor (en)();             Lcd.noBlink (noBlink)();           } Autre {             Lcd.Curseur();             Lcd.Clignoter();           }         }         Si (EchoMode) {           mySerial (en).Imprimer("-");           mySerial (en).Rincer();         }       }     }     Autre     {       Si ( Ccount (Ccount) < MaxInputBufferSize)       {         Cbuffer (Cbuffer)[Ccount (Ccount)] = TBuffer (TBuffer);         Ccount (Ccount)++;         Si ((Empreinte directe))         {           Ligne d’impression directe = Ligne d’impression directe + 1;           Si (TBuffer (TBuffer) < 128) {             Lcd.Imprimer(Char Char(TBuffer (TBuffer)));           } Autre  {             Lcd.Imprimer(String(TBuffer (TBuffer)));           }           Si ( Ccount (Ccount) > MaxInputBufferSize - 1)           {             Lcd.noCursor (en)();             Lcd.noBlink (noBlink)();           } Autre {             Lcd.Curseur();             Lcd.Clignoter();           }         }         Si (EchoMode) {           mySerial (en).Imprimer(Char Char(TBuffer (TBuffer)));           mySerial (en).Rincer();         }       } Autre {         mySerial (en).Imprimer("#");       }       Entrée de données détectée       DataInput (en) = Vrai;     }     Retour Faux;   }   Retour Faux;
}

Vide Processeur d’affichage()  Avec l’affichage bleu, l’ingestion de défilement est omise, car ceci ne « lubrifie »
{   Si (RefreshDisplay (en))   {     Lcd.Clair();     RefreshDisplay (en) = Faux;     Pour (Int B = 1; B <= LcdRows (LcdRows); B++)     {       Lcd.setCursor(0, B - 1);       Pour (Int C = 0; C < rLcdChr; C++)       {         eeaddress = 0;         eeaddress = (DisplayBankContent * (rLcdChr) * LcdRows (LcdRows)) + ((rLcdChr) * B) + C;         Valeur = 0;         Valeur = Eeprom.Lire(eeaddress);         Si (Valeur > 31) Ne montrez pas de personnages spéciaux         {           mySerial (en).Imprimer(Char Char(Valeur));           Lcd.Imprimer(Char Char(Valeur));         } Autre         {           Lcd.Imprimer(Char Char(32));         }       }       mySerial (en).println();     }   }
}

Vide runrealTimeClock (en)()    BASE DE TEMPS
{   Horloge en temps réel et compte à rebours   longs précédentsMillis 0;       stockera la dernière fois a été mesurée   byte SecDivider 0;   Unsigned Long currentMillis = Millis();   Int StepValue (StepValue) = 0;   Contrôle d’affichage PWM   StepValue (StepValue) = 4 * FadeSeconds (FadeSeconds);   Si (currentMillis - précédentMillis > StepValue (StepValue))   {     précédentMillis = currentMillis;     Si (La droiteur actuelle < Cédanteur        )     {       La droiteur actuelle = La droiteur actuelle + 1;       analogWrite (en) (BackgroundLight, La droiteur actuelle);     } Autre Si (La droiteur actuelle > Cédanteur)     {       La droiteur actuelle = La droiteur actuelle - 1;       analogWrite (en) (BackgroundLight, La droiteur actuelle);     }   }   Si (currentMillis - précédenteMillisB > 1000)   {     secondes-course     précédenteMillisB = currentMillis;   }
}

Vide DisplayBank (en) ( Octet cobancaire)
{   Si (cobancaire  < EEPromBanks (en) )   {     RefreshDisplay (en) = Vrai;   Initaliser la sortie d’affichage     DisplayBankContent = cobancaire;     mySerial (en).println("Banque" + String(cobancaire) + " est affiché sur LCD ");     MnuState (en) = 0;     Sbuffer (Sbuffer) = "";     Valeur = 0;     mySerial (en).Rincer();   } Autre   {     mySerial (en).println("Banque non disponible.");     Valeur = 0;     MnuState (en) = 0;     Sbuffer (Sbuffer) = "";     mySerial (en).Rincer();   }
}

 

Fini! Plus n’est plus nécessaire.

Après cette petite extension ou ajustement du matériel, la commande supplémentaire "B" pour brightness est maintenant disponible pour nous dans le menu Bluetooth.

  • B - Afficher la valeur actuelle de luminosité : 255

Partie 3 - Ajuster la luminosité via le menu

Le nombre donné derrière lui décrit la luminosité d’affichage actuellement définie dans une gamme de valeur de 0 (backlight off) à un maximum de 255 (luminosité maximale)

Nous voyons donc toujours d’un coup d’œil ce que la luminosité est actuellement fixé sur notre écran.

Si nous voulons maintenant changer la luminosité du rétroéclairage, nous sélectionnons le point "B" (Brightness) et appuyez sur Enter. On nous demande ensuite brièvement : Afficher la luminosité : (max 255) et entrez notre valeur désirée derrière elle.

Définir la luminosité

Dans cet exemple, nous entrons 20 comme valeur de luminosité souhaitée)

Ceci est reconnu avec la sortie: Brightness: 20 Set. Nous voyons maintenant comment l’affichage s’assombrit à la valeur désirée.

Pour tous ceux qui sont intéressés qui veulent voir le signal PWM que notre code génère pour contrôler la luminosité, j’ai pris des captures d’écran de mon oscilloscope une fois à la valeur 20 et à la valeur 200:

Valeur 20

Valeur: 20

 

 

Valeur: 200

Valeur:200

 

Comme on peut le voir, le rapport impulsion-pause du signal diffère, tandis que la fréquence reste la même. Notre œil fait la moyenne de ce ratio à une luminosité égale.

Je vous souhaite beaucoup de plaisir à reconstruire et, comme toujours, jusqu’à la prochaine fois.

EtalagesPour arduinoProjets pour avancé

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi