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 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 ré; 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; ré = 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; ré = Cbuffer[3] - 48 ; valeur = une + b + c + ré; } 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.