/* BORRADOR
Construcción de marquesinas desde cero IV
Written in 2004 by raphik
1. Sacar un texto fijo por pantalla es interesante. Pero tal vez sea
de mayor utilidad poder cambiarlo dinámicamente. Para ello el texto
estará contenido en la variable global tipo String msg. La longitud
del texto es 6 * msg.length(). El nuevo mensaje se queda a la espera
hasta que el anterior termine.
Ver la función mostrarMensaje().
*/
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
uint32_t crono = millis();
boolean hayMensaje = false;
String msgL = "Este mensaje preliminar se queda hasta que llegue otro por consola.";
String msgR = msgL;
void prepararPantalla(void) {
// preparando la pantalla para su primer uso
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE, BLACK);
display.setTextSize(1);
display.setCursor(0,0);
display.print(F("Marquesinas IV"));
display.display();
}
void mostrarMensaje(void) {
static int columna = SCREEN_WIDTH -1;
int blankGap = 25;
display.setTextWrap(false);
int msgLen = 6 * msgL.length();
display.setTextSize(1);
if ( msgL != msgR && columna < 0 && columna >= -msgLen+SCREEN_WIDTH-blankGap ) {
hayMensaje = true;
}
display.setCursor(columna,10);
display.print(msgL);
// la distancia a la siguiente repetición es msgLen + BlankGap
display.setCursor(columna+msgLen+blankGap,10);
if (hayMensaje) {
display.print(msgR);
} else {
display.print(msgL);
}
display.display();
columna--;
// cuando el texto desaparece por la izquierda, el siguiente
// está a una distancia blankGap por detrás
if (columna < -msgLen-blankGap) {
if (hayMensaje) {
msgL = msgR;
hayMensaje = false;
}
columna = 0;
}
}
void setup() {
Serial.begin(9600);
Serial.println("Introduzca mensaje");
prepararPantalla();
}
void loop() {
if (Serial.available()) {
msgR = Serial.readString();
}
mostrarMensaje();
delay(10);
}