Bluetooth-Display - AZ-Delivery

Dans la première partie actuelle mehrteiligen Blogs, nous nous construisons Bluetooth librement pouvant être configuré le display LCD. Sur Bluetooth en série le profil, nous mettons à la disposition du client Bluetooth-un menu ASCII sur quoi le display LCD est complètement maniable. En outre nous élargirons sur Blogteile au loin le menu et incorporons le nouveau (confort) des fonctions. Dans la première partie de la rangée, nous construisons le menu de choix, et implémentons direct En série au display la demande qui distribue les lettres tapées au signe pour le signe directement visiblement sur notre display. Avec cela, nous utilisons le signe d'impôt „Enter“ au changement des lignes de display (1-4) et pour la conclusion de la séquence de demande, et aussi le signe d'impôt „Backspace“ à l'effacement de fausses demandes préalables. Nous appellerons la fonction dans le menu "Direct Print". Bluetooth l'adaptateur au PC peut être utilisé à l'un à la construction de Bluetooth le lien en lien avec un programme de terminal comme „Putty“, et aussi un portable compatible l'APPAREIL qui soutient Bluetooth en série le profil. Pour la transmission de l'interface en série à Bluetooth la norme, nous utilisons Bluetooth connu le module l'HC 05.

Nous voyons la liste partielle de notre projet :

1x Bluetooth HC-05 le module

1x Display HD44780 LCD 4x20

1x soutier le potentiomètre Max Widerstand 10kΩ1

1x 130 Ω la résistance la tolérance ±5%

1x ONU R3 Board le type ONU R3 ATmega328P

Ce n'est pas demandés beaucoup de parties pour ce projet, le Beschaltung des éléments séparés reste aussi limité.

Nous chargeons ONU le code suivant en haut sur notre Arduino :

 

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

#define MaxInputBufferSize 20 //au maximum 255 signes adaptent à vlcdr
#define rLcdChr 20
#define LcdRows 4
#define interval 1000

SoftwareSerial mySerial(7, 6); //RX, TX
LiquidCrystal lcd(8, 13, 12, 11, 10, 9);

//variable

//Serial l'entrée Handling
char TBuffer;
char Cbuffer[MaxInputBufferSize+1];       //Code USB l'entrée la mémoire tampon
Chaîne Sbuffer = "";                      //Chaîne USB l'entrée la mémoire tampon
int value;                                //Entrée USB Nummeric la mémoire tampon
int  MnuState = 0;
octet Ccount = 0;                          //Number received Chars
octet Inptype = 0;
boolean StrInput = false;
boolean NumberInput = false;
boolean DataInput = false;
boolean EnterInput = false;
octet MenueSelection = 0;
//Give Debug Informations over serial l'interface
boolean DebugMode = false;
boolean Mode d'écho = true;
//Display la gestion
boolean Directprint = false;
octet DirectprintROW = 0;
octet DirectprintLine = 0;

boolean RefreshDisplay = false;

void setup()    {    lcd.begin(rLcdChr, LcdRows);   lcd.clear();   lcd.curseur d'assortiment(0, 0);   lcd.print("Bluetooth");   lcd.curseur d'assortiment(0, 1);   lcd.print("Display");   mySerial.begin(9600);   lcd.curseur d'assortiment(0, 0);   mySerial.flush();
}

void SerialcommandProcessor()
{
int a;
Inptype = 0;
Inptype = SerInputHandler();
//0 aucune restitution 
//1 numéro 
//2 chaînes 
//3 Data
if ((Inptype > 0) & (!Directprint))               {    MenueSelection = 0;    if ((MnuState < 2) && (Inptype == 2)) {Sbuffer.toUpperCase(); } //For Easy l'anneau de canard Commands    if ((Sbuffer == "D") && (MnuState == 0) && (Inptype == 2))       { MenueSelection = 15;}    switch (MenueSelection)      {        case 15:        {        //Direct pPrint to le display        Directprint = true;        mySerial.println ("Directprint ON.");        if (Directprint)        {        DirectprintROW = 0;        DirectprintLine = 0;        lcd.clear();        lcd.curseur();        lcd.brille();        }        value = 0;             Sbuffer = "";        MnuState = 0;        break;         }        default:        {          mySerial.println("-------le Smart Bluetooth Display 1.0------");          mySerial.println("D - Direct Print");          mySerial.println("----------------------------------------");          mySerial.println("Type Cmd et presse Enter");          mySerial.flush();          MnuState = 0;          value = 0;          Sbuffer = "";        }           }      } //Demande reconnu
//Mémoire tampon de demande
}

boolean CheckforserialEvent()
{   while (mySerial.available()) {      //get the new l'octet :      TBuffer = mySerial.read();       if (TBuffer > 9 && TBuffer < 14)        {         Cbuffer[Ccount] = 0;         TBuffer =0;         si (EchoMode)           {            mySerial.impression(carboniser(13));            mySerial.affleurer();          }            si (Directprint)           {           mySerial.println("");           DirectprintLine = 0;           DirectprintROW = DirectprintROW + 1;           si ( DirectprintROW > 3)            {                     Directprint = faux;                    lcd.noCursor();                    lcd.noBlink();                    Sbuffer = "";                    valeur = 0;                                 } autre            {           lcd.le curseur();           lcd.cligner();           lcd.setCursor(0,DirectprintROW);           }           }          EnterInput = vrai;           revenir vrai;      } autre si (TBuffer > 47 && TBuffer <58 )       {        si ( Ccount < MaxInputBufferSize)           {             Cbuffer[Ccount] = TBuffer;               Ccount++;             si ((Directprint))               {                  lcd.impression(carboniser(TBuffer));                  DirectprintLine = DirectprintLine + 1;                  si ( Ccount > MaxInputBufferSize -1)                   {                    lcd.noCursor();                    lcd.noBlink();                    } autre {                    lcd.le curseur();                    lcd.cligner();                    }                                 }                      si (EchoMode) {              mySerial.impression(carboniser(TBuffer));              mySerial.affleurer();             }            } autre {mySerial.impression("#"); }            // Numéro entrée détectée       NumberInput = vrai;       }        autre si (TBuffer > 64 && TBuffer < 123 )       {        si ( Ccount < MaxInputBufferSize)           {             Cbuffer[Ccount] = TBuffer;               Ccount++;             si ((Directprint))               {                  lcd.impression(carboniser(TBuffer));                                 DirectprintLine = DirectprintLine + 1;                  si ( Ccount > MaxInputBufferSize -1)                   {                    lcd.noCursor();                    lcd.noBlink();                    } autre {                    lcd.le curseur();                    lcd.cligner();                    }                       }                si (EchoMode) {              mySerial.impression(carboniser(TBuffer));              mySerial.affleurer();             }            } autre {mySerial.impression("#"); }       // Entrée de caractères caractère détectée       StrInput = vrai;      }     autre si ( (TBuffer == 127 )  |  (TBuffer == 8 ) )          {                       si ( DirectprintLine > 0 )                  {                  DirectprintLine = DirectprintLine - 1;                  lcd.setCursor(DirectprintLine, DirectprintROW);                   lcd.impression(" ");                  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();                    } autre {                    lcd.le curseur();                    lcd.cligner();                    }                       }                      si (EchoMode) {              mySerial.impression("-");              mySerial.affleurer();             }            }        }          autre         {                      si ( Ccount < MaxInputBufferSize)           {             Cbuffer[Ccount] = TBuffer;               Ccount++;              si ((Directprint))               {                  DirectprintLine = DirectprintLine + 1;                  si (TBuffer < 128) {lcd.impression(carboniser(TBuffer)); } autre  {lcd.impression(Chaîne(TBuffer)); }                  si ( Ccount > MaxInputBufferSize -1)                   {                    lcd.noCursor();                    lcd.noBlink();                    } autre {                    lcd.le curseur();                    lcd.cligner();                    }                       }                si (EchoMode) {              mySerial.impression(carboniser(TBuffer));              mySerial.affleurer();             }            } autre {mySerial.impression("#"); }       // Entrée de données détectée       Entrée de données = vrai;       }      revenir faux;      }     revenir faux;   }    néant ClearCBuffer ()

{
 pour (octet une= 0; MaxInputBufferSize -1;une++)   Cbuffer[une] = 0;
}    octet SerInputHandler()
{
octet résultat = 0;
int c;
int ;
int une;
int b;
résultat = 0;
si (CheckforserialEvent())     {       si ((NumberInput) et ne pas (Entrée de données)et ne pas (StrInput))     //Chiffres uniquement        {        Sbuffer = "";        valeur = 0;        StrInput = faux;        NumberInput = faux;        Entrée de données = faux;        EnterInput = faux;         une = 0;        b = 0;        c = 0;         = 0;        Sbuffer = Cbuffer; // Zahl wird AUCH! chez SBUFFER �bernommen, tombe ben�tigt.        si (Ccount == 1) { valeur  = Cbuffer[0]- 48 ; }        si (Ccount == 2) {           une = Cbuffer[0] - 48 ;           une = une * 10;          b = Cbuffer[1] - 48 ;          valeur = une + b;          }        si (Ccount == 3) {           une = Cbuffer[0] - 48 ;           une = une * 100;          b = Cbuffer[1] - 48 ;          b = b * 10;          c = Cbuffer[2] - 48 ;          valeur = une + b + c;          }        si (Ccount == 4) {           une = Cbuffer[0] - 48 ;           une = une * 1000;          b = Cbuffer[1] - 48 ;          b = b * 100;          c = Cbuffer[2] - 48 ;          c = c * 10;           = Cbuffer[3] - 48 ;          valeur = une + b + c + ;          }        si (Ccount >= 5)            {            Sbuffer = "";            valeur = 0;            Sbuffer = Cbuffer;            ClearCBuffer;            résultat = 2;             } autre           {            ClearCBuffer;            Ccount = 0;            résultat = 1;                                                // Numéro Code retour            NumberInput = faux;            StrInput = faux;            Entrée de données = faux;            EnterInput = faux;             Ccount = 0;            revenir résultat;            }        }      si ((StrInput) et ne pas (Entrée de données))                          // Entrée chaîne uniquement        {        Sbuffer = "";        Sbuffer = Cbuffer;        valeur = 0;        StrInput = faux;        NumberInput = faux;        Entrée de données = faux;        EnterInput = faux;         Ccount = 0;        ClearCBuffer;        résultat = 2;                                                 // Numéro Code retour        }       si (DataInput) {        Sbuffer = "";        Sbuffer = Cbuffer;        valeur = 0;        StrInput = faux;        NumberInput = faux;        DataInput = faux;        EnterInput = faux;         Ccount = 0;        ClearCBuffer;        résultat = 3;                                               // Numéro de code de retour        }        si ((EnterInput) et pas (StrInput) et pas (NumberInput) et pas (DataInput))        {        Sbuffer = "";        valeur = 0;        Ccount = 0;        ClearCBuffer;        résultat = 4;                                               // Numéro de code de retour        }             NumberInput = faux;    StrInput = faux;    DataInput = faux;    EnterInput = faux;     Ccount = 0;    retour résultat;     } 
retour résultat;          // Fin de CheckforSerialEvent
}


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

nul boucle() 

{
SerialcommandProcessor();
}

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

Après avoir téléchargé le code, nous nous connectons maintenant à notre Arduino en utilisant le module Bluetooth et un profil Bluetooth série. Nous obtenons le menu suivant après avoir appuyé sur la touche "Entrée":

Nous tapons maintenant la lettre "D" puis appuyons sur "Entrée":

Une confirmation suit que "Directprint" a été activé. Tout ce que nous tapons maintenant est affiché directement et sans délai à la fois sur l'écran LCD et reconnu sur l'interface série. Nous «voyons» ce que nous écrivons dans le terminal et pouvons également corriger les erreurs de frappe avec «Retour arrière».

Remarque importante: le code de cette fonction de l'affichage décrit dans cette partie peut sembler assez complexe. La fonction pure serait également possible avec un code simple. Certaines parties du code ont déjà été optimisées ou préparées pour les parties suivantes de la série.

Certaines sections du code peuvent expliquer uniquement dans les parties suivantes

 

Maintenant, je vous souhaite beaucoup de plaisir avec la réplication et jusqu'à la prochaine fois.

DisplaysFür arduinoProjekte für anfänger

Laisser un commentaire

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

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery