In the code (well one of the variations I had worked on), I added this last line to take all the single characters and merge them into a full string…
u8g2.print(char(ch)); // Add character to OLED buffer
Serial.print(char(ch)); // Repeat all character output to Serial monitor
termString = termString + char(ch); // Add character to Terminal Widget buffer
Which I then dumped to the terminal Widget every 1/4 second with a timer…
1.- No muestres tu blynk_auth a todo el mundo… alguien podría usarlo para gastarte bromas… cuanto menos.
2.- Olvídate de usar los delays…
3.- El loop debería estar mucho mas limpio… básicamente usando sólo el Blynk.run() y algo como task.loop()/timer.run() (esto es lo que se usa en lugar de los delays)
Imagino que tu sketch es para una máquina automática de llenado de botellas como no indicas mucha información de su uso imaginaremos que dispone de un botón de encendido del sistema, un rele para iniciar/parar la banda transportadora, un rele para iniciar/parar el rellenado de las botellas y un sensor para detectar la posición de las botellas debajo de las válvulas de rellenado…
Yo usaré el módulo tasker para el control de tiempos…
Debes tener un widget terminal conectado al pin V1 en tu app
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Tasker.h>
WidgetTerminal terminal(V1);
Tasker Task(true);
char auth[] = "******";
char ssid[] = "******";
char pass[] = "******";
#define BotonEncendido 1 //cambia estos valores por D0...D6 o lo que necesites
#define BandaTransportadora 2
#define ValvulasRellenadoras 3
#define BotellasPosicionadas 4
byte EstacionActual=0; //indica el estado actual de proceso de la máquina rellenadora
bool EstadoBanda=false; //para guardar el estado de la banda transportadora, debes saber que false=LOW=0 y true=HIGH=1
bool Procesado=false; //para guardar si ya se ha procesado el estado actual o no.
String SMS;
void IncEstadoActual()
{
EstacionActual++;
Procesado=false;
}
void HacerCosas()
{
if (digitalRead(BotonEncendido))
{
switch (EstacionActual)
{
case 0: //inicio del proceso
if (!Procesado)
{
Procesado=true;
digitalWrite(BandaTransportadora,HIGH); //iniciamos la banda transportadora para posicionar las botellas debajo de las valvulas de rellenado y retirar las botellas rellenadas en el ciclo anterior si existiesen
SMS="Banda Transportadora Activada - Botellas en movimiento";
terminal.println(SMS);
Serial.println(SMS);
Task.setRepeated(IncEstadoActual, 1000, 1); //ejecuta IncEstadoActual tras 1 segundo una sola vez
}
break;
case 1: // botellas en movimiento a la espera de detectar que se han posicionado correctamente debajo de las valvulas de rellenado
if (digitalRead(BotellasPosicionadas))
{
if (!Procesado)
{
Procesado=true;
digitalWrite(BandaTransportadora,LOW);
SMS="Banda Transportadora Desactivada - Botellas Posicionadas";
terminal.println(SMS);
Serial.println(SMS);
Task.setRepeated(IncEstadoActual, 100, 1); //ejecuta IncEstadoActual tras 0,1 segundos una sola vez
}
}
break;
case 2: //inicio del proceso de rellenado, aquí lo haremos por tiempo pero podría realizarse con un sensor de rellenado...
if (!Procesado)
{
Procesado=true;
digitalWrite(ValvulasRellenadoras,HIGH);
SMS="Inicio del rellenado de las botellas";
terminal.println(SMS);
Serial.println(SMS);
Task.setRepeated(IncEstadoActual, 5000, 1); //ejecuta IncEstadoActual tras 5 segundos una sola vez
}
break;
case 3: //fin del proceso de rellenado
digitalWrite(ValvulasRellenadoras,LOW);
SMS="Botellas llenas - Proceso Finalizado";
terminal.println(SMS);
Serial.println(SMS);
EstacionActual=0;
break;
}
}
else
{
if (digitalRead(BandaTransportadora) !=digitalRead(BotonEncendido)) digitalWrite(BandaTransportadora,false);
}
}
void setup()
{
pinMode(BandaTransportadora,OUTPUT);
pinMode(ValvulasRellenadoras,OUTPUT);
pinMode(BotonEncendido,INPUT); // en tu codigo usas prendido apagado para leer y lo configurabas como salida en vez de entrada...
pinMode(BotellasPosicionadas,INPUT);
Serial.begin(115200);
Blynk.config(Blynk_auth);
Blynk.connectWiFi(ssid, pass);
}
void loop()
{
Blynk.run();
Task.loop();
HacerCosas();
}