@yiosef
Ante todo agradecerte tu respuestas y tus consejos.
He intentado en ocasiones usar Shitch-Case pero he tenido malas experiencias. Reconociendo que es una función simple, no consigo que me funcione. De hecho, lo he implementado en el código como me indicas, y no lee el puerto serie.
En cuanto a tu comentario sobre el uso de ELSE, no deberían de pulsarse los dos botones a la vez, aunque por seguridad, tendré en cuenta tu comentario.
Por último, la opción de comunicación inalámbrica estaba pensada, pero si o si, tengo que subier un cable de alimentación para la electrónica que se aloja en la azotea, por eso no lo hice así. Incluso pense aprovechar los tonos DTMF que generan los equipos de radio que tengo, para realizar los movimientos, pero al final tengo que subir un cable.
Si puedes detectar porqué no funciona el Case, me seria útil para el futuro.
Como no puedo poner los dos códigos, pongo en del master modificado y en otro post pongo el del remoto.
Muchas gracias
CODIGO MASTER
/*
11/02/2021
Mando de control para selector remoto de antena.
al pulsar un boton envio por serie el caracter u para subir una posicion la antena
y el d para bajar.
14/02/2021
Incorporo leds para confirmar que hay comunicacion serie
*/
const int sw_up = 2; // Pulsador giro derecha al pin 2
const int sw_down = 3; //Pulsador giro izquierda al pin 3
const int ReDePin = 4; // MAX 485 (HIGH = TX / LOW = RX)
const int led_rx = 13;
const int led_tx = 12;
int leo_sw_up = 0; //Valor del pulsador giro derecha
int leo_sw_down = 0; //Valor del pulsador giro down
int dato_serie;
unsigned long tiempo1=0;
unsigned long tiempo2=0;
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7); // DIR, E, RW, RS, D4, D5, D6, D7
void setup()
{
Serial.begin(9600); // inicializa comunicacion por monitor serie a 9600 bps
Serial.setTimeout(100);
lcd.begin(16, 2);
lcd.setBacklightPin(3,POSITIVE); // puerto P3 de PCF8574 como positivo
lcd.setBacklight(HIGH);
pinMode(sw_up, INPUT);
pinMode(sw_down, INPUT);
pinMode(led_rx, OUTPUT);
pinMode(led_tx, OUTPUT);
pinMode(ReDePin, OUTPUT);
tiempo1=millis(); //Tiempo que transcurre desde que se inicia arduino
}
/////////////////// SUBRUTINAS ///////////////
//Leo el puerto serie para ver el feedback del remoto
void leo_serie()
{
if (Serial.available()>=0) //Si hay datos los leemos
{
digitalWrite (led_rx, HIGH);
dato_serie = Serial.read(); //leo el dato recibido y lo guardo en la variable
switch(dato_serie)
{
case 1:
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("V2000");
break;
case 2:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("DIPOLO CRUZADO");
break;
case 3:
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("DIRECTIVA");
break;
case 4:
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("RESERVA");
break;
case 5:
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("INICIANDO");
break;
}
digitalWrite (led_rx, LOW);
}
}
void loop()
{
tiempo2 = millis();
if(tiempo2 > (tiempo1+500))
{
tiempo1 = millis(); //Actualiza el tiempo actual
digitalWrite(ReDePin, HIGH); //Modo TX MAX485
digitalWrite (led_tx, HIGH);
Serial.print("?");
delay(50);
digitalWrite (led_tx, LOW);
//delay(50); //Dejo respirara al puerto del remoto
//digitalWrite(ReDePin, LOW); //Modo RX MAX485
}
leo_serie();
leo_sw_up = digitalRead(sw_up); //Leo el pulsador para detectar si está pulsado
leo_sw_down = digitalRead(sw_down); //Leo el pulsador para detectar si está pulsado
if(leo_sw_up == HIGH)
{
digitalWrite(ReDePin, HIGH); //Modo TX MAX485
Serial.print("u");
//digitalWrite(ReDePin, LOW); //Modo RX MAX485
digitalWrite (led_tx, HIGH);
delay(250);
digitalWrite (led_tx, LOW);
}
if(leo_sw_down == HIGH)
{
digitalWrite(ReDePin, HIGH); //Modo TX MAX485
Serial.print("d");
//digitalWrite(ReDePin, LOW); //Modo RX MAX485
digitalWrite (led_tx, HIGH);
delay(250);
digitalWrite (led_tx, LOW);
}
delay(50);
}