En la primera parte de hoy de Blogs de varias partes construimos a nosotros Bluetooth libremente configurable el LCD display. Sobre Bluetooth en serie el perfil ponemos a la disposición al cliente Bluetooth-un menú ASCII sobre el cual el LCD display es completamente controlable. A continuación ampliaremos sobre Blogteile fuera el menú y montamos nuevas (comodidades) funciones. En la primera parte de la fila construimos el menú de selección, e implementamos directo En serie al display la solicitud que distribuye las letras escritas a máquina al signo para el signo directamente evidentemente en nuestro display. Con esto usamos el signo de impuesto „Enter“ al cambio de las líneas de display (1-4) y para el fin de la consecuencia de entrada, sino también el signo de impuesto „Backspace“ a la extinción de solicitudes equivocadas precedentes. Llamaremos la función en el menú „Direct Print“. Bluetooth el adaptador en el PC puede ser utilizado, por un lado, a la construcción de Bluetooth la relación en la relación con un programa de terminal como „Putty“, sino también un móvil compatible el APARTAMIENTO que apoya Bluetooth en serie el perfil. Al transferencia de la interface en serie en Bluetooth el estándar usamos Bluetooth famoso el módulo el HC 05.
Miramos la lista parcial de nuestro proyecto:
1x cortabordes el potenciómetro Max la resistencia 10kΩ1
1x 130 Ω la resistencia la tolerancia ±5%
1x Uno R3 Board el tipo ONU R3 ATmega328P
No muchas partes son necesitadas para este proyecto, también el Beschaltung de los componentes particulares se mantiene en fronteras.
Cargamos ONU el código siguiente en lo alto en nuestro Arduino:
#include <SoftwareSerial.h> #include <LiquidCrystal.h> #define MaxInputBufferSize 20 //como máximo 255 signos adaptan en 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 el input Handling char TBuffer; char Cbuffer[MaxInputBufferSize+1]; //Código USB el input el tope Bramante Sbuffer = ""; //Bramante USB el input el tope int value; //Input USB Nummeric el tope int MnuState = 0; byte Ccount = 0; //Number received Chars byte Inptype = 0; boolean StrInput = false; boolean NumberInput = false; boolean DataInput = false; boolean EnterInput = false; byte MenueSelection = 0; //Give Debug Informations over serial la interfaz boolean DebugMode = false; boolean Moda de eco = true; //Display el management boolean Directprint = false; byte DirectprintROW = 0; byte DirectprintLine = 0; boolean RefreshDisplay = false; void Setup() { lcd.begin(rLcdChr, LcdRows); lcd.clear(); lcd.cursor de juego(0, 0); lcd.print("Bluetooth"); lcd.cursor de juego(0, 1); lcd.print("Display"); mySerial.begin(9600); lcd.cursor de juego(0, 0); mySerial.flush(); } void SerialcommandProcessor() { int a; Inptype = 0; Inptype = SerInputHandler(); //0 ninguna devolución //1 número //2 bramantes //3 Data if ((Inptype > 0) & (!Directprint)) { MenueSelection = 0; if ((MnuState < 2) && (Inptype == 2)) {Sbuffer.toUpperCase(); } //For Easy el anillo de pato Commands if ((Sbuffer == "D") && (MnuState == 0) && (Inptype == 2)) { MenueSelection = 15;} switch (MenueSelection) { case 15: { //Direct pPrint to el display Directprint = true; mySerial.println ("Directprint ON."); if (Directprint) { DirectprintROW = 0; DirectprintLine = 0; lcd.clear(); lcd.cursor(); lcd.fulgura(); } value = 0; Sbuffer = ""; MnuState = 0; break; } default: { mySerial.println("-------Smart Bluetooth el display 1.0------"); mySerial.println("D - Direct Print"); mySerial.println("----------------------------------------"); mySerial.println("Type Cmd y aprieta Enter"); mySerial.flush(); MnuState = 0; value = 0; Sbuffer = ""; } } } //Solicitud reconocido //Tope de entrada } boolean CheckforserialEvent() { while (mySerial.available()) { //get the new el byte: TBuffer = mySerial.read(); if (TBuffer > 9 && TBuffer < 14) { Cbuffer[Ccount] = 0; TBuffer =0; if (Moda de eco) { mySerial.print(char(13)); mySerial.flush(); } if (Directprint) { mySerial.println(""); DirectprintLine = 0; DirectprintROW = DirectprintROW + 1; if ( DirectprintROW > 3) { Directprint = false; lcd.noCursor(); lcd.noBlink(); Sbuffer = ""; value = 0; } else { lcd.cursor(); lcd.fulgura(); lcd.cursor de juego(0,DirectprintROW); } } EnterInput = true; return true; } else if (TBuffer > 47 && TBuffer <58 ) { if ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; if ((Directprint)) { lcd.print(char(TBuffer)); DirectprintLine = DirectprintLine + 1; if ( Ccount > MaxInputBufferSize -1) { lcd.noCursor(); lcd.noBlink(); } else { lcd.cursor(); lcd.fulgura(); } } if (Moda de eco) { mySerial.print(char(TBuffer)); mySerial.flush(); } } else {mySerial.print("#"); } //Number el input detected NumberInput = true; } else if (TBuffer > 64 && TBuffer < 123 ) { if ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; if ((Directprint)) { lcd.print(char(TBuffer)); DirectprintLine = DirectprintLine + 1; if ( Ccount > MaxInputBufferSize -1) { lcd.noCursor(); lcd.noBlink(); } else { lcd.cursor(); lcd.fulgura(); } } if (Moda de eco) { mySerial.print(char(TBuffer)); mySerial.flush(); } } else {mySerial.print("#"); } //Character Char el input detected StrInput = true; } else if ( (TBuffer == 127 ) | (TBuffer == 8 ) ) { if ( DirectprintLine > 0 ) { DirectprintLine = DirectprintLine - 1; lcd.cursor de juego(DirectprintLine, DirectprintROW); lcd.print(" "); lcd.cursor de juego(DirectprintLine, DirectprintROW); } if (( DirectprintLine == 0 ) & ( DirectprintROW > 0 )) { DirectprintROW = DirectprintROW - 1; DirectprintLine = rLcdChr -1; lcd.cursor de juego(DirectprintLine, DirectprintROW); } if ( Ccount > 0) { Ccount--; Cbuffer[Ccount] = 0; if ((Directprint)) { if ( Ccount > MaxInputBufferSize -1) { lcd.noCursor(); lcd.noBlink(); } else { lcd.cursor(); lcd.fulgura(); } } if (Moda de eco) { mySerial.print("-"); mySerial.flush(); } } } else { if ( Ccount < MaxInputBufferSize) { Cbuffer[Ccount] = TBuffer; Ccount++; if ((Directprint)) { DirectprintLine = DirectprintLine + 1; if (TBuffer < 128) {lcd.print(char(TBuffer)); } else {lcd.print(Bramante(TBuffer)); } if ( Ccount > MaxInputBufferSize -1) { lcd.noCursor(); lcd.noBlink(); } else { lcd.cursor(); lcd.fulgura(); } } if (Moda de eco) { mySerial.print(char(TBuffer)); mySerial.flush(); } } else {mySerial.print("#"); } //Data el input detected DataInput = true; } return false; } return false; } void ClearCBuffer () { for (byte a= 0; MaxInputBufferSize -1;a++) Cbuffer[a] = 0; } byte SerInputHandler() { byte result = 0; int c; int d; int a; int b; result = 0; if (CheckforserialEvent()) { if ((NumberInput) y necesidad (DataInput)y necesidad (StrInput)) //Numbers only { Sbuffer = ""; value = 0; StrInput = false; NumberInput = false; DataInput = false; EnterInput = false; a = 0; b = 0; c = 0; d = 0; Sbuffer = Cbuffer; //¡El número se hace TAMBIÉN! en SBUFFER �bernommen, en caso de que ben�tigt. if (Ccount == 1) { value = Cbuffer[0]- 48 ; } if (Ccount == 2) { a = Cbuffer[0] - 48 ; a = a * 10; b = Cbuffer[1] - 48 ; value = a + b; } if (Ccount == 3) { a = Cbuffer[0] - 48 ; a = a * 100; b = Cbuffer[1] - 48 ; b = b * 10; c = Cbuffer[2] - 48 ; value = a + b + c; } if (Ccount == 4) { a = Cbuffer[0] - 48 ; a = a * 1000; b = Cbuffer[1] - 48 ; b = b * 100; c = Cbuffer[2] - 48 ; c = c * 10; d = Cbuffer[3] - 48 ; value = a + b + c + d; } if (Ccount >= 5) { Sbuffer = ""; value = 0; Sbuffer = Cbuffer; ClearCBuffer; result = 2; } else { ClearCBuffer; Ccount = 0; result = 1; //Number Returncode NumberInput = false; StrInput = false; DataInput = false; EnterInput = false; Ccount = 0; return result; } } if ((StrInput) y necesidad (DataInput)) //Bramante el input only { Sbuffer = ""; Sbuffer = Cbuffer; value = 0; StrInput = false; NumberInput = false; DataInput = false; EnterInput = false; Ccount = 0; ClearCBuffer; result = 2; //Number Returncode } if (DataInput) { Sbuffer = ""; Sbuffer = Cbuffer; value = 0; StrInput = false; NumberInput = false; DataInput = false; EnterInput = false; Ccount = 0; ClearCBuffer; result = 3; //Number Returncode } if ((EnterInput) y necesidad (StrInput) y necesidad (NumberInput) y necesidad (DataInput)) { Sbuffer = ""; value = 0; Ccount = 0; ClearCBuffer; result = 4; //Number Returncode } NumberInput = false; StrInput = false; DataInput = false; EnterInput = false; Ccount = 0; return result; } return result; //End CheckforSerialEvent } // ###################################################################################################### // void loop() { SerialcommandProcessor(); } // ###################################################################################################### //
Después que tenemos el código hochgeladen, ahora nos combinamos sobre Bluetooth el módulo y con Bluetooth en serie el perfil en nuestro Arduino. Recibimos el menú siguiente después de la actividad de la tecla „Enter“:
Ahora escribimos a máquina la letra „D“ y apretamos después „Enter“:
Sigue una afirmación „Directprint“ era conectado. Ahora todo que tecleamos, somos indicados directamente y sin aplazamiento no sólo en el display LCD, sino también somos dados recibo en la interface en serie. "Miramos" en el terminal que escribimos y errores de maquina con „Backspace“ pueden también corregir.
Una indicación importante: Para esta función descrita en esta parte del display el código puede aparecer bien complejo. La función pura debía también ser llevada a cabo con el código más fácil. También algunas partes del código están optimizadas ya ya para partes siguientes de la fila y respectivamente puesto de modo preparado.
Las secciones particulares del código se explican u.u. sólo en las partes siguientes
Ahora os deseo mucha diversión copiando y hasta la vez cercana.