Bluetooth Display - Teil 5 - AZ-Delivery

Bienvenido a la quinta y penúltima parte de la serie de pantallas Bluetooth.

En la parte de hoy se me ocurrió algo especial. La idea se me ocurrió en un mercado de pulgas donde quería vender algunas cosas viejas. Pensé que sería una buena idea no poder usar la pantalla en casa, sino usar la pantalla como un "centro de atención" en un mercado de pulgas. Después de todo, no todos tienen tal cosa, y tampoco he encontrado una pantalla similar en el comercio regular. Pero, ¿qué debo mostrar en la pantalla en un mercado de pulgas?

¡Lo mejor es una pegatina de ventas! Qué tal mensajes como: Cada CD solo xx euros, seguido de otro mensaje como: Cada DVD xx euros. Todo se ve mejor como ticker ticker, por lo que las letras individuales se acumulan lentamente de izquierda a derecha hasta que todo el mensaje sea legible. ¡Un verdadero punto de atracción para cada mercado de pulgas! Para implementar esta función, ahora estamos expandiendo nuestro código para incluir la función "Publicidad".


Por lo tanto, primero cargamos el código extendido por la función "Publicidad" a nuestra plataforma de hardware:

 

 

#include <SPI.h>
#include <Alambre.h>
#include <Software Serial.h>
#include <EEPROM.h>
#include <Cristal líquido.h>
#include <avr/dormir.h>


#definir MaxInputBufferSize 20 // adapta un máximo de 255 caracteres a vlcdr
#definir EEpromSize 990

#definir rLcdChr 20
#definir LcdRows 4
#definir intervalo 1000
#definir Luz de fondo 5 // LED de retroiluminación del puerto 5
#definir SwitchPin 2 // Selección del mensaje del botón del puerto 12

// Direcciones de celda de memoria EEprom para configuración
#definir EEFadeSeconds  993
#definir EEAdvertsecdelay 994
#definir EEAdvertMsg 995
#definir EEPINA 996
#definir EEPINC 997
#definir EEPINDD 998


Software Serial mySerial(7, 6); // RX, TX
Cristal líquido lcd(8, 13, 12, 11, 10, 9);


// variables
byte DisplayBankContent = 0;

// Manejo de entrada en serie
char TBuffer;
char Cbuffer[MaxInputBufferSize + 1];     // búfer de entrada de código USB
Cadena Sbuffer = "";                      // búfer de entrada de cadena USB
int valor;                                // búfer de entrada numérica USB
byte Cuenta = 0;                          // Número de caracteres recibidos
byte Intype = 0;
booleano StrInput = falso;
booleano NumberInput = falso;
booleano DataInput = falso;
booleano EnterInput = falso;
byte MenueSelection = 0;

// control de botón
booleano Switchstate = cierto;
booleano SwitchstateBuffer = cierto;
byte SelectedMsg = 0;

// Proporcione información de depuración a través de la interfaz serial
booleano DebugMode = falso;
booleano EchoMode = cierto;

// EEPROM
int dirección;                 // puntero de dirección EEPROM
byte EEPromBanks = 0;          // Utilizado para calcular los bancos EEPROM
// SerMnueControl
byte MnuState = 0;            // Profundidad máxima del menú 255 icl sub
byte Banco seleccionado = 0;

// reloj en tiempo real
largo anteriorMillis = 0;       // almacenará la última vez que se midió
largo anteriorMillisB = 0;       // almacenará la última vez que se midió

// Gestión de pantallas
booleano DisplayLock = falso;
booleano Directprint = falso;
byte DirectprintROW = 0;
byte DirectprintLine = 0;

booleano ActualizarDisplay = falso;
byte FRMCheck = 0; // Se utiliza para escribir operaciones en eeprom, así que guarde los ciclos de host
// monitoreo de la batería
flotar Voltaje;
booleano PowersaveMode = falso;

// control de luz PWM

byte Brillo actual = 0;
byte Brillo objetivo = 0;
byte FadeSeconds = 0; // estándar = 3

// Visualización automática, por ejemplo, con fines publicitarios

booleano Publicidad = falso;
byte AdvertMsg = 1; // mínimo 1
byte Advertsecdelay = 0; // estándar = 6
byte Advertseccounter = 0;


nulo configuración()
{   EEPromBanks = EEpromSize / ((rLcdChr) * LcdRows);   lcd.comenzar(rLcdChr, LcdRows);   lcd.claro();   lcd.setCursor(0, 0);   lcd.imprimir("Bluetooth");   lcd.setCursor(0, 1);   lcd.imprimir("Pantalla");   mySerial.comenzar(9600);   pinMode(SwitchPin, INPUT_PULLUP); // Taster Auswahl Text aus EEprom   pinMode(Luz de fondo, SALIDA); // Displaybeleuchtung / Display AN / AUS   digitalWrite(Luz de fondo, BAJO);   // leer Config   FadeSeconds = EEPROM.leer(EEFadeSeconds);   Advertsecdelay = EEPROM.leer(EEAdvertsecdelay);   AdvertMsg = EEPROM.leer(EEAdvertMsg);   Brillo actual = 0;   Brillo objetivo = 0;   lcd.setCursor(0, 4);   Si (DisplayLock) {     lcd.impresión("Sistema gesperrt");   }   // Más rutinas de configuración / inicialización   lcd.setCursor(0, 0);   Brillo objetivo = 255;   mySerial.rubor();
}



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

vacío lazo()

{   SerialcommandProcessor();   runrealTimeClock();   Procesador de pantalla();   SwitchProcessor();   // Powermgmt ();   // Fin del bucle principal
}

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


vacío TextHeader(byte Rowm)
{   mySerial.println("Texto para el banco" + Cuerda( Banco seleccionado) + " FILA " + Cuerda (Rowm) + ":");
}

vacío SerialcommandProcessor()
{   En t un;   Intype = 0;   Intype = SerInputHandler();   // 0 keine Rückgabe   // 1 Nummer   // 2 cuerdas   // 3 datos   Si ((Intype > 0) & (!Directprint))   {     MenueSelection = 0;     Si (Publicidad)     {       lcd.claro();       Publicidad = falso;       mySerial.impresión("Publicidad");       mySerial.println(" APAGADO.");     }     Si ((MnuState < 2) && (Intype == 2)) {       Sbuffer.toUpperCase();  // Para comandos de ingreso fácil     }     Si ((Sbuffer == "DEPURAR") && (MnuState == 0) && (Intype == 2))   {       MenueSelection = 1;     }     Si ((Sbuffer == "ECO") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 2;     }     Si ((Sbuffer == "S") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 3;     }     // Borrar TODO el contenido de EEprom     Si ((Sbuffer == "MI") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 4;     }     Si ((Sbuffer == "SI") && (MnuState == 1) && (Intype == 2))      {       MenueSelection = 5;     }     Si ((Sbuffer != "SI") && (MnuState == 1) && (Intype == 2))     {       MenueSelection = 6;     }     // Editar contenido seleccionado     Si ((Sbuffer == "W") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 7;     }     Si ((MnuState == 2) && (valor  < EEPromBanks) && (Intype == 1)) {       MenueSelection = 8;     }     Si (MnuState == 3)                                               {       MenueSelection = 9;     }     Si (MnuState == 4)                                               {       MenueSelection = 10;     }     // Mostrar contenido seleccionado     Si ((Sbuffer == "PAG") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 11;     }     Si ((MnuState == 5) && (Intype == 1))                           {       MenueSelection = 12;     }     Si ((Sbuffer == "R") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 13;     }     Si ((MnuState == 6) && (Intype == 1))                           {       MenueSelection = 14;     }     Si ((Sbuffer == "RE") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 15;     }     Si ((Sbuffer == "Z") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 16;     }     Si ((Sbuffer == "SI") && (MnuState == 0) && (Intype == 2))       {       MenueSelection = 17;     }     Si ((MnuState == 7) && (Intype == 1))                           {       MenueSelection = 18;     }     Si ((Sbuffer == "DESVANECERSE") && (MnuState == 0) && (Intype == 2))     {       MenueSelection = 19;     }     Si (MnuState == 9)                                               {       MenueSelection = 20;     }     Si (MnuState == 10)                                              {       MenueSelection = 21;     }     Si ((Sbuffer == "PROPAGANDA") && (MnuState == 0) && (Intype == 2))  {       MenueSelection = 23;     }     Si (MnuState == 11)                                              {       MenueSelection = 24;     }     Si (MnuState == 12)                                              {       MenueSelection = 25;     }     Si ((Sbuffer == "ADSEC") && (MnuState == 0) && (Intype == 2))   {       MenueSelection = 26;     }     Si (MnuState == 13)                                              {       MenueSelection = 27;     }     Si ((Sbuffer == "ADMSG") && (MnuState == 0) && (Intype == 2))   {       MenueSelection = 28;     }     Si (MnuState == 14)                                              {       MenueSelection = 29;     }     cambiar (MenueSelection)     {       caso 1:         {           mySerial.impresión("Depurar");           Modo de depuración = !Modo de depuración;           Si (Modo de depuración) {             mySerial.println(" EN.");             EchoMode = falso;           } más           {             mySerial.println(" APAGADO.");             EchoMode = cierto;           }           mySerial.println("");           mySerial.rubor();           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       caso 2:         {           mySerial.impresión("Eco ");           EchoMode = !EchoMode;           Si (EchoMode) {             mySerial.println(" EN.");             Modo de depuración = falso;           } más           {             mySerial.println(" APAGADO.");           }           mySerial.println("");           mySerial.rubor();           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       caso 3:         {           mySerial.println("Leer contenido de EEEPROM:" );           mySerial.rubor();           para (En t un = 0; un < EEPromBanks; un++)           {             mySerial.println("Banco de memoria EEPROM:" + Cuerda(un) );             mySerial.rubor();             para (En t si = 1; si <= LcdRows; si++)             {               mySerial.impresión("Fila " + Cuerda(si) + ": ");               mySerial.rubor();               para (En t C = 0; C < rLcdChr; C++)               {                 dirección = 0;                 dirección = (un * (rLcdChr) * LcdRows) + ((rLcdChr) * si) + C;                 valor = EEPROM.leer(dirección);                 mySerial.impresión(carbonizarse(valor));                 mySerial.rubor();               }               mySerial.println(" ");               mySerial.rubor();             }           }           Sbuffer = "";           mySerial.println("No más bancos EEPROM disponibles".);           mySerial.rubor();           descanso;         }       caso 4:         {           valor = 0;           mySerial.impresión("Borrando EEPROM");           mySerial.println("SÍ NO:");           mySerial.rubor();           MnuState = 1;           Sbuffer = "";           descanso;         }       caso 5:         {           valor = 0;           mySerial.impresión("Borrando EEPROM");           mySerial.println("Colocarse.");           mySerial.rubor();           para (En t un = 0; un < EEPromBanks; un++)           {             // Banco de memoria a             mySerial.println("Clear Bank:" + Cuerda(un));             para (En t si = 1; si <= LcdRows; si++)             {               para (En t C = 0; C < rLcdChr; C++)               {                 dirección = 0;                 dirección = (un * (rLcdChr) * LcdRows) + ((rLcdChr ) * si) + C;                 FRMCheck = EEPROM.leer(dirección);                 Si (FRMCheck > 0)                 {                   EEPROM.escribir(dirección, 00); // Formatierung                   mySerial.impresión(".");                   valor++;                   retrasar(30);                   mySerial.rubor();                 }               }             }             mySerial.println("");             mySerial.rubor();           }           mySerial.println("");           mySerial.println("Terminado. " + Cuerda(valor) + "Bytes borrados");           mySerial.println("");           mySerial.rubor();           Sbuffer = "";           MnuState = 0;           descanso;         }       caso 6:         {           valor = 0;           Sbuffer = "";           MnuState = 0;           mySerial.println("OP abortar".);           mySerial.rubor();           descanso;         }       caso 7:         {           mySerial.println("Número de banco EEPPROM (0-" + Cuerda(EEPromBanks - 1) + "):");           mySerial.rubor();           MnuState = 2;           valor = 0;           Sbuffer = "";           descanso;         }       caso 8:         {           Banco seleccionado = valor;           TextHeader(1);           MnuState = 3;           Sbuffer = "";           valor = 0;           descanso;         }       caso 9:         {           WriteEEPROM(Banco seleccionado, 1);           TextHeader(2);           valor = 0;           MnuState = 4;           Sbuffer = "";           descanso;         }       caso 10:         {           WriteEEPROM(Banco seleccionado, 2);           valor = 0;           MnuState = 0;           Sbuffer = "";           TextHeader(3);           mySerial.rubor();           valor = 0;           MnuState = 9;           Sbuffer = "";           descanso;         }       caso 11:         {           valor = 0;           mySerial.println("Número de banco EEPPROM (0-" + Cuerda(EEPromBanks - 1) + "):");           MnuState = 5;           Sbuffer = "";           mySerial.rubor();           descanso;         }       caso 12:         {           SelectedMsg = valor;           DisplayBank(valor);           descanso;         }       caso 13:         {           valor = 0;           mySerial.println("Número de banco EEPPROM (0-" + Cuerda(EEPromBanks - 1) + "):");           MnuState = 6;           Sbuffer = "";           mySerial.rubor();           descanso;         }       caso 14:         {           un = valor;           Si ( un < EEPromBanks)           {             mySerial.println("Banco de memoria: " + Cuerda(un) );             mySerial.rubor();             para (En t si = 1; si <= LcdRows; si++)             {               mySerial.impresión("Fila " + Cuerda(si) + ": ");               mySerial.rubor();               para (En t C = 0; C < rLcdChr; C++)               {                 dirección = 0;                 dirección = (un * (rLcdChr) * LcdRows) + ((rLcdChr) * si) + C;                 valor = EEPROM.leer(dirección);                 mySerial.impresión(carbonizarse(valor));                 mySerial.rubor();               }               mySerial.println(" ");               mySerial.rubor();             }           } más           {             mySerial.println("Valor fuera de rango.");           }           valor = 0;           Sbuffer = "";           MnuState = 0;           descanso;         }       caso 15:         {           // pPrint directo para mostrar           Directprint = cierto;           mySerial.println ("Directprint activado".);           Si (Directprint)           {             DirectprintROW = 0;             DirectprintLine = 0;             lcd.claro();             lcd.cursor();             lcd.parpadeo();           }           valor = 0;           Sbuffer = "";           MnuState = 0;           descanso;         }       caso 16:         {           valor = 0;           Sbuffer = "";           MnuState = 0;           descanso;         }       caso 17:         {           mySerial.println("Brillo de pantalla: (máx. 255)");           MnuState = 7;           valor = 0;           Sbuffer = "";           descanso;         }       caso 18:         {           Si ((valor < 256))           {             Brillo objetivo = valor;             mySerial.println("Brillo:" + Cuerda (Brillo objetivo) + "Set");           } más           {             mySerial.println("Valor fuera de rango.");           }           MnuState = 0;           valor = 0;           Sbuffer = "";           descanso;         }       caso 19:         {           mySerial.println("Retraso de desvanecimiento: (máx. 255 segundos)");           MnuState = 12;           valor = 0;           Sbuffer = "";           descanso;         }       caso 20:         {           WriteEEPROM(Banco seleccionado, 3);           valor = 0;           MnuState = 0;           Sbuffer = "";           TextHeader(4);           mySerial.rubor();           valor = 0;           MnuState = 10;           Sbuffer = "";           descanso;         }       caso 21:         {           WriteEEPROM(Banco seleccionado, 4);           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       caso 23:         {           Publicidad  = !Publicidad;           mySerial.impresión("Publicidad");           Si (Publicidad)           {             mySerial.println(" EN.");           } más  {             mySerial.println(" APAGADO.");           }           mySerial.rubor();           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       caso 25:         {           Si ((valor > 0) & (valor < 251))           {             FadeSeconds = valor;             EEPROM.escribir(EEFadeSeconds, FadeSeconds);             mySerial.println("Valor" + Cuerda (valor) + "conjunto");           } más           {             valor = 0;             Sbuffer = "";             mySerial.println("Valor fuera de rango.");           }           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       caso 26:         {           mySerial.println("ADverDelay: (máximo 255 segundos)");           MnuState = 13;           valor = 0;           Sbuffer = "";           descanso;         }       caso 27:         {           Si ((valor > 0) & (valor < 256))           {             Advertsecdelay = valor;             EEPROM.escribir(EEAdvertsecdelay, Advertsecdelay);             mySerial.println("Valor" + Cuerda (valor) + "conjunto");           } más           {             valor = 0;             Sbuffer = "";             mySerial.println("Valor fuera de rango.");           }           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       caso 28:         {           mySerial.println("ADMsgs: (max" + Cuerda (EEPromBanks) + ")");           MnuState = 14;           valor = 0;           Sbuffer = "";           descanso;         }       caso 29:         {           Si ((valor > 0) & (valor < EEPromBanks + 1))           {             AdvertMsg = valor;             EEPROM.escribir(EEAdvertMsg, AdvertMsg);             mySerial.println("Valor" + Cuerda (valor) + "conjunto");           } más           {             valor = 0;             Sbuffer = "";             mySerial.println("Valor fuera de rango.");           }           valor = 0;           MnuState = 0;           Sbuffer = "";           descanso;         }       defecto:         {           Si (DisplayLock)           {             lcd.claro();             DisplayLock = falso;           }           mySerial.println("------- Pantalla inteligente Bluetooth 1.1 ------");           mySerial.println("S - Leer TODOS los bancos EEPROM");           mySerial.println("E - Borrar TODOS los bancos EEPROM");           mySerial.println("W - Escribir sel. EEPROM Bank");           mySerial.println("R - Leer sel. EEPROM Bank");           mySerial.println("P - Imprimir banco EEPROM en pantalla");           mySerial.println("----------------------------------------");           mySerial.println("D - Impresión directa");           mySerial.println("B - Valor actual del brillo de la pantalla:" + Cuerda (Brillo actual));           mySerial.println("----------------------------------------");           mySerial.println("Otros: ADVERT, ADSEC, ADMSG, ECHO");           mySerial.println("----------------------------------------");           mySerial.println("Escriba Cmd y presione Entrar");           mySerial.rubor();           MnuState = 0;           valor = 0;           Sbuffer = "";         }     }   } // Eingabe erkannt
}



vacío WriteEEPROM(byte FBank, byte Fow)
{   byte Contador de escritura;   Contador de escritura = 0;   mySerial.impresión("Ahorrando");   para (En t C = 0; C < rLcdChr; C++)   {     dirección = 0;     dirección = (FBank * (rLcdChr) * LcdRows) + ((rLcdChr) * Fow) + C;     valor = EEPROM.leer(dirección);     Si (Sbuffer[C] != valor)     {       EEPROM.escribir(dirección, Sbuffer[C]);       mySerial.impresión(".");       Contador de escritura++;     }   }   mySerial.println(" " + Cuerda (Contador de escritura) + "Bytes escritos".);

}


vacío ClearCBuffer ()

{   para (byte un = 0; MaxInputBufferSize - 1; un++)     Cbuffer[un] = 0;
}


byte SerInputHandler()

{   byte resultado = 0;   En t C;   En t re;   En t un;   En t si;   resultado = 0;   Si (CheckforserialEvent())   {     Si ((NumberInput) y no (Entrada de datos) y no (StrInput))    //Solo numeros     {       Sbuffer = "";       valor = 0;       StrInput = falso;       NumberInput = falso;       Entrada de datos = falso;       EnterInput = falso;       un = 0;       si = 0;       C = 0;       re = 0;       Sbuffer = Cbuffer; // ¡Zahl wird AUCH! en SBUFFER übernommen, cae benötigt.       Si (Cuenta == 1) {         valor  = Cbuffer[0] - 48 ;       }       Si (Cuenta == 2) {         un = Cbuffer[0] - 48 ;         un = un * 10;         si = Cbuffer[1] - 48 ;         valor = un + si;       }       Si (Cuenta == 3) {         un = Cbuffer[0] - 48 ;         un = un * 100;         si = Cbuffer[1] - 48 ;         si = si * 10;         C = Cbuffer[2] - 48 ;         valor = un + si + C;       }       Si (Cuenta == 4) {         un = Cbuffer[0] - 48 ;         un = un * 1000;         si = Cbuffer[1] - 48 ;         si = si * 100;         C = Cbuffer[2] - 48 ;         C = C * 10;         re = Cbuffer[3] - 48 ;         valor = un + si + C + re;       }       Si (Cuenta >= 5)       {         Sbuffer = "";         valor = 0;         Sbuffer = Cbuffer;         ClearCBuffer;         resultado = 2;       } más       {         ClearCBuffer;         Cuenta = 0;         resultado = 1;                                                // Número Código de retorno         NumberInput = falso;         StrInput = falso;         Entrada de datos = falso;         EnterInput = falso;         Cuenta = 0;         regreso resultado;       }     }     Si ((StrInput) y no (Entrada de datos))                          // Solo entrada de cadena     {       Sbuffer = "";       Sbuffer = Cbuffer;       valor = 0;       StrInput = falso;       NumberInput = falso;       Entrada de datos = falso;       EnterInput = falso;       Cuenta = 0;       ClearCBuffer;       resultado = 2;                                                 // Número Código de retorno     }     Si (Entrada de datos) {       Sbuffer = "";       Sbuffer = Cbuffer;       valor = 0;       StrInput = falso;       NumberInput = falso;       Entrada de datos = falso;       EnterInput = falso;       Cuenta = 0;       ClearCBuffer;       resultado = 3;                                               // Número Código de retorno     }     Si ((EnterInput) y no (StrInput) y no (NumberInput) y no (Entrada de datos))     {       Sbuffer = "";       valor = 0;       Uenta = 0;       ClearCBuffer;       resultado = 4;                                               //Número de Returncode     }     NumberInput = falso;     StrInput = falso;     DataInput = falso;     EnterInput = falso;     Uenta = 0;     volver resultado;   }   de devolución de resultados;   //Fin CheckforSerialEvent
}



// Eingabebuffer


booleano CheckforserialEvent()
{   mientras (mySerial.disponible()) {     // obtener el byte nuevo:     TBuffer = mySerial.leer();     si (TBuffer > 9 && TBuffer < 14)     {       Cbuffer[Uenta] = 0;       TBuffer = 0;       si (EchoMode)       {         mySerial.de impresión(char(13));         mySerial.ras();       }       si (Directprint)       {         mySerial.println("");         DirectprintLine = 0;         DirectprintROW = DirectprintROW + 1;         si ( DirectprintROW > 3)         {           Directprint = falso;           lcd.noCursor();           lcd.noBlink();           Sbuffer = "";           valor de = 0;         } más         {           de lcd.cursor de la();           pantalla lcd.parpadea();           lcd.setCursor(0, DirectprintROW);         }       }       EnterInput = true;       return true;     } else si (TBuffer > 47 && TBuffer < 58 )     {       si ( Uenta < MaxInputBufferSize)       {         Cbuffer[Uenta] = TBuffer;         Uenta++;         si ((Directprint))         {           lcd.de impresión(char(TBuffer));           DirectprintLine = DirectprintLine + 1;           si ( Uenta > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } demás {             lcd.cursor de la();             pantalla lcd.parpadea();           }         }         si (EchoMode) {           mySerial.de impresión(char(TBuffer));           mySerial.ras();         }       } más {         mySerial.de impresión("#");       }       //Ingresar el número de detectado       NumberInput = cierto;     }     otra cosa si (TBuffer > 64 && TBuffer < 123 )     {       si ( Uenta < MaxInputBufferSize)       {         Cbuffer[Uenta] = TBuffer;         Uenta++;         si ((Directprint))         {           lcd.de impresión(char(TBuffer));           DirectprintLine = DirectprintLine + 1;           si ( Uenta > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } demás {             lcd.cursor de la();             pantalla lcd.parpadea();           }         }         si (EchoMode) {           mySerial.de impresión(char(TBuffer));           mySerial.ras();         }       } más {         mySerial.de impresión("#");       }       //Carácter Char Entrada detectado       StrInput = cierto;     }     otra cosa si ( (TBuffer == 127 )  |  (TBuffer == 8 ) )     {       si ( DirectprintLine > 0 )       {         DirectprintLine = DirectprintLine - 1;         lcd.setCursor(DirectprintLine, DirectprintROW);         lcd.de impresión(" ");         lcd.setCursor(DirectprintLine, DirectprintROW);       }       si (( DirectprintLine == 0 ) & ( DirectprintROW > 0 ))       {         DirectprintROW = DirectprintROW - 1;         DirectprintLine = rLcdChr - 1;         lcd.setCursor(DirectprintLine, DirectprintROW);       }       si ( Uenta > 0)       {         Uenta--;         Cbuffer[Uenta] = 0;         si ((Directprint))         {           si ( Uenta > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } demás {             lcd.cursor();             pantalla lcd.parpadea();           }         }         si (EchoMode) {           mySerial.de impresión("-");           mySerial.ras();         }       }     }     más     {       si ( Uenta < MaxInputBufferSize)       {         Cbuffer[Uenta] = TBuffer;         Uenta++;         si ((Directprint))         {           DirectprintLine = DirectprintLine + 1;           si (TBuffer < 128) {             lcd.de impresión(char(TBuffer));           } otro  {             lcd.de impresión(de la Cadena de(TBuffer));           }           si ( Uenta > MaxInputBufferSize - 1)           {             lcd.noCursor();             lcd.noBlink();           } demás {             lcd.cursor de la();             pantalla lcd.parpadea();           }         }         si (EchoMode) {           mySerial.de impresión(char(TBuffer));           mySerial.ras();         }       } más {         mySerial.de impresión("#");       }       //Entrada de Datos detectados       DataInput = true;     }     return false;   }   return false;
}

vacío Displayprocessor()  // Bei Blauem Pantalla wird auf Scrollfunktion verzichtet, da das nur "schmiert"
{   si (RefreshDisplay)   {     lcd.clara();     RefreshDisplay = falsa;     para (int b = 1; b <= LcdRows; b++)     {       lcd.setCursor(0, b - 1);       si (!la Publicidad) {         mySerial.de impresión("Fila " + de la Cadena(b) + ": ");       }       de (int c = 0; c < rLcdChr; c++)       {         eeaddress = 0;         eeaddress = (DisplayBankContent * (rLcdChr) * LcdRows) + ((rLcdChr) * b) + c;         valor = 0;         valor = de la EEPROM.de lectura(eeaddress);         si (el valor de > 31) // Sonderzeichen nicht anzeigen         {           si (!la Publicidad) {             mySerial.de impresión(char(valor));           } más {             demora(100);           }           lcd.de impresión(char(valor de));         } más         {           de lcd.de impresión(char(32));         }       }       si (!la Publicidad) {         mySerial.println();       }     }   }
}

vacío runrealTimeClock()    //TIEMPO
{   // Reloj de Tiempo Real & la cuenta atrás   // largo previousMillis = 0; // almacenará la última vez que se midió   // byte SecDivider = 0;   unsigned long currentMillis = millis();   int StepValue = 0;   // PWM Pantalla Steuerung   StepValue = 4 * FadeSeconds;   si (currentMillis - previousMillis > StepValue)   {     previousMillis = currentMillis;     si (Currentbrightness < Targetbrightness        )     {       Currentbrightness = Currentbrightness + 1;       analogWrite (BackgroundLight, Currentbrightness);     } más si (Currentbrightness > Targetbrightness)     {       Currentbrightness = Currentbrightness - 1;       analogWrite (BackgroundLight, Currentbrightness);     }   }   si (currentMillis - previousMillisB > 1000)   {     // sekundentakt     previousMillisB = currentMillis;     // La publicidad     si (la Publicidad)     {       si (Advertseccounter >  Advertsecdelay)       {         Advertseccounter = 0;         DisplayBankContent = DisplayBankContent + 1;         si (DisplayBankContent > AdvertMsg - 1) {           DisplayBankContent = 0;         }         RefreshDisplay = verdadera;       } persona {         Advertseccounter = Advertseccounter + 1;       }     }   }
}

vacío DisplayBank ( byte cobank)
{   si (cobank  < EEPromBanks )   {     RefreshDisplay = true;   // Iniciar la Salida de Pantalla de     DisplayBankContent = cobank;     mySerial.println("Banco " + de la Cadena de(cobank) + " se muestra en la pantalla LCD");     MnuState = 0;     Sbuffer = "";     valor = 0;     mySerial.ras();   } más   {     mySerial.println("El banco no está disponible.");     valor = 0;     MnuState = 0;     Sbuffer = "";     mySerial.ras();   }
}

vacío SwitchProcessor()
{   Switchstate = digitalRead(Pinconmutacion);   si ((!Switchstate) && (SwitchstateBuffer) && (no DisplayLock))// Abfrage Schalter   {     SwitchstateBuffer = falsa;     Publicidad = falsa;     Directprint = falso;     lcd.noCursor();     lcd.noBlink();     SelectedMsg = SelectedMsg + 1;     si (SelectedMsg >  EEPromBanks - 1 )     {       SelectedMsg = 0;     }     lcd.clear();     lcd.setCursor(0, 0);     lcd.de impresión("del Banco: " + Cadena de(SelectedMsg) + " seleccionado");     retraso(10);     valor = 50000;     mientras (digitalRead(Pinconmutacion) == 0)     {       demora(1);       si (el valor de > 0) {         valor de = valor de - 1;       };       lcd.setCursor(0, 3);       si (el valor de > 0) {         lcd.de impresión("Power off: " + Cadena de(valor / 100) + " sec ");       };     }     DisplayBank(SelectedMsg);   }   si (Switchstate)   {     SwitchstateBuffer = true;     // delay(10);   }
}

 

Ab jetzt ist das Menü um 3 weitere Optionen reicher: ANUNCIO, el ADSEC, und ADMSG. Diese zeigt unser Menü unter "Otros" una:

Menú de salida en el teléfono inteligente

 

Ela Handyapp empfehle ich zur Bedienung morir App "BlueTerm" morir es gratis aus dem Tienda de Google zu laden gibt. Um monja morir Nachrichten nacheinander automatisch anzeigen zu lassen, ist wie folgt vorzugehen:

Ela ersten setzen wir mit dem Befehl ADMSG morir Anzahl un Nachrichten von 0 zählend, morir nacheinander angezeigt werden sollen. Beispiel: Wir haben en el foso de Bänken 0-2 insges. 3 Nachrichten gespeichert, morir angezeigt werden sollen.

Dann geben wir nach dem Befehl ADMSG die Zahl 4 ein. Ela Quittierung bekommen wir die Ausgabe: "Valor 2 set".

Danach geben wir den Befehl "el ADSEC" ein gefolgt von einer Zahl entre 1 y 255. Dabei steht morir eingegebene für die Zahl Anzahl un Sekunden, bis die angezeigte aktuelle que el mensaje durch die nächste konfigurierte que el mensaje ersetzt wird. Als Beispiel geben wir hier "5" ein. Ela Quittierung bekommen wir auch hier wieder morir Ausgabe: "Valor " 5".

Ela letzten Schritt geben wir monja den Befehl "ANUNCIO" ein. Nach der Quittierung des Befehls durch "la Publicidad En" wird monja immer im Wechsel automatisch morir Nachrichten aus den Bänken 0-2 hintereinander anzeigt. Ausschalten lässt sich die Automatik durch erneute Eingabe des Befehls ANUNCIO oder durch einen druck auf den Nachrichtenwahltaster.



Ich wünsche viel Spaß beim Nachbauen und wie immer bis zum su Mal.

 

DisplaysFür arduinoProjekte für fortgeschrittene

Deja un comentario

Todos los comentarios son moderados antes de ser publicados