Gracias por responder.
Lo que no funciona es simple. A cada pulsacion de un pulsador, se resta 1 en un contador. Este contador determina la velocidad de giro de un motor, y debe de visualizarse en el lcd para saber como estamos trabajando. En este caso es un contador regresivo, de 10 a 0.
Adjunto codigo. Basicamente es el if que controla la variable velocidad. Al pulsar ese pulsador, lo que hay dentro del if se ejecuta correctamente, el motor remoto actua en consecuencia, la salida serial si la activo muestra el valor correcto, pero la pantalla LCD queda con el mensaje que adquirio en la primera llamada que hace el void_setup a LCD().
#include <FS.h> .
#include <SPI.h>
#include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino
#include <WiFiUdp.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h> //https://github.com/tzapu/WiFiManager
#include <ArduinoJson.h> //https://github.com/bblanchon/ArduinoJson
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
// Direccion ip del motor y puerto donde enviar datos
byte ipmotor[4] = {192, 168, 1, 201};
unsigned int port = 8888; // puerto destino
LiquidCrystal_I2C lcd(0x27,16,2);
const byte Izquierda = D9;
const byte Derecha = D13;
const byte Velocidad = D5;
const byte Auto = D8;
const byte Modo = D7;
char MensajeaMotor[20]; //cadena que se enviara
int velocidad=10;
int modo=1;
void setup() {
Wire.begin();
lcd.begin ();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Control Loop"); //presentacion
lcd.setCursor(3,1);
lcd.print("by me");
delay(3000);
LCD();
pinMode(D9, INPUT);//giro izquiera
pinMode(D13, INPUT);//giro derecha
pinMode(D5, INPUT);//boton velocidad
pinMode(D7, INPUT);//boton cambio modo de funcionamiento
pinMode(D8, INPUT);//boton auto
Serial.begin(115200);
Serial.println();
}
void LCD (){
lcd.begin ();
delay(100);
lcd.setCursor(0,0);
lcd.printf("Modo Manual");
lcd.setCursor(0,1);
lcd.print (String("Velocidad ") + String(velocidad));
}
void loop() {
if (digitalRead(Izquierda) == LOW){ //Boton izquierda
int valorPot = 1;
sprintf(MensajeaMotor, "ValPot:%i", valorPot);
udp.beginPacket(ipmotor, port);
udp.write(MensajeaMotor);
udp.endPacket();
digitalWrite(Izquierda,HIGH);
delay(250);
}
if (digitalRead(Derecha) == LOW){ //Boton derecha
int valorPot = 2;
sprintf(MensajeaMotor, "ValPot:%i", valorPot);
udp.beginPacket(ipmotor, port);
udp.write(MensajeaMotor);
udp.endPacket();
digitalWrite(Izquierda,HIGH);
delay(250);
}
if (digitalRead(Velocidad) == LOW){ //Boton velocidad
int valorPot = 3;
sprintf(MensajeaMotor, "ValPot:%i", valorPot);
udp.beginPacket(ipmotor, port);
udp.write(MensajeaMotor);
udp.endPacket();
digitalWrite(Izquierda,HIGH);
delay(250);
if (velocidad == 0){
velocidad=10;}
else {
velocidad=velocidad -1;}
LCD(); // ESTO ES LO QUE NO SE EJECUTA, Y SI ES QUE LO HACE NO SE VISUALIZA
// EL RESTO DEL SKETCH FUNCIONA BIEN
}
if (digitalRead(Auto) == LOW){ //Boton auto
int valorPot = 4;
sprintf(MensajeaMotor, "ValPot:%i", valorPot);
udp.beginPacket(ipmotor, port);
udp.write(MensajeaMotor);
udp.endPacket();
digitalWrite(Izquierda,HIGH);
delay(250);
// LCD();
}
if (digitalRead(Modo) == LOW){ //Boton modo
int valorPot = 5;
sprintf(MensajeaMotor, "ValPot:%i", valorPot);
udp.beginPacket(ipmotor, port);
udp.write(MensajeaMotor);
udp.endPacket();
digitalWrite(Izquierda,HIGH);
delay(250);
if (modo == 4){
modo=1;}
else {
modo=modo+1;}
}
}
Aunque el codigo envia datos udp, en este caso el lcd esta en local, es parte de un mando de control que se comunica con un motor y mas adelante con un medidor que hara a su vez de control de motor.
Pero por ahora es lo mas basico, visualizar la informacion en el lcd.