Leer puerto serie y almacenar en variable

Por favor, ¿alguien que me pueda ayudar?
Estoy completamente bloqueado y no se como continuar.
Gracias

Hace 2 dias te dieron una respuesta, debes aprender a ser paciente!!

De reojo observé lo siguiente: en el loop he notado que está lo de elevar y bajar; y además lo del joystick y puerto serial, todo en un mismo lugar.

Quizá deberías separar, en funciones, algunas partes del loop; así se te hará la vida más fácil en condicionar qué debería ejecutarse y qué no, en dado momento.

Gracias Lucario por tu respuesta, aun trabajando con funciones el problema no lo conseguia solucionar por falta de conceptos en programación.
Finalmente lo he solucionado, no como me gustaria, pero al menos funciona correctamente.

¿Porque se desactivan los reles cuando sale del bucle de lectura?
Es porque al poder trabajar e modo manual, si no muevo el joystick en ninguna posición los relés están relajados. En el bucle de lectura de puerto serie el relé se activaba, pero al pasar por la lectura de la posición del joystick se desactivaba al estar este en el centro.

¿Como lo he solucionado?
Mediante un switch que me permita seleccionar si opero en forma manual o a través de los datos del PC.
Creando una bandera que me indique si estoy en manual o automático, hago que la lectura del joystick desactive o no los relés.
Esto seria el código en modo "control por PC"

//************************LECTURA PUERTO SERIE***********************


if (analogRead(SW_SERIE)<=50) (flag3=flag3+1),delay(100); //Paso a modo control por PC
if (flag3>1) flag3=0;

if ((Serial.available()>0)&&(flag3==1))
 {  
  while (Serial.read() != 'W'); // Buscar el inicio de la trama

  n[Serial.readBytesUntil(' ', n, sizeof(n) - 1)] = 0; // Leo la primera cifra. Datos orientacion
  int horizontal = atoi(n); // Conversión de texto a valor
 
  serie_ori=horizontal;

  n[Serial.readBytesUntil('\r', n, sizeof(n) - 1)] = 0; // Leo la segunda cifra. Datos elevacion
  int vertical = atoi(n); // Conversión de texto a valor

  serie_elev=vertical;
  lcd.setCursor(7,1);
  lcd.print("RX");
 
  delay(30);
  }
  
  if ((serie_ori==ORI)&&(flag3==1)) digitalWrite(LEFT,LOW),digitalWrite(RIGHT,LOW);
  if ((serie_ori>ORI)&&(flag3==1)) digitalWrite(LEFT, LOW),digitalWrite(RIGHT, HIGH);
  if ((serie_ori<ORI)&&(flag3==1)) digitalWrite(RIGHT, LOW),digitalWrite(LEFT, HIGH);

  if ((serie_elev==ELEV)&&(flag3==1)) digitalWrite(UP,LOW),digitalWrite(DOWN,LOW);
  if ((serie_elev>ELEV)&&(flag3==1)) digitalWrite(DOWN,LOW),digitalWrite(UP, HIGH);
  if ((serie_elev<ELEV)&&(flag3==1)) digitalWrite(UP,LOW),digitalWrite(DOWN,HIGH);

Este seria el código para operación mediante el joystick, Pongo solo el movimiento vertical.

//***********LECTURA DEL JOYSTICK Y ACTIVACION DE RELES*************
VERTICAL=analogRead(POT2);
HORIZONTAL=analogRead(POT3);

if((VERTICAL >= 750)&&(flag3==0))  //Solo activa reles desde el joystick, si está en modo manual y no control por puerto serie (flag3=0)
  {
    digitalWrite (UP, HIGH);
    U=1;
  }
if ((VERTICAL<=749)&&(VERTICAL >=251)&&(flag==0)&&(flag3==0))//Comprueba si el Joystick esta en el centro, si el pulsador de llamada de memoria esta relajado y si esta en modo manual(flag3).

    {                                                        //  Tienen que darse las tres condiciones. Esto evita que se desactive el rele cuando se activa desde el puerto serie.
     digitalWrite (UP, LOW);
     U=0;
    }

if((VERTICAL <= 250)&&(flag3==0))
  {
    digitalWrite (DOWN, HIGH);
    D=1;
  }
if ((VERTICAL<=749)&&(VERTICAL >=251)&&(flag==0)&&(flag3==0))
    {
    digitalWrite (DOWN, LOW);
    D=0;
    }

No se si lo considerareis una solución "chapuza", pero ya funciona todo perfecto, aunque ahora tengo que seguir puliendo el hardware.
Cuando se activan los relés, a veces el display se vuelve loco. He probado con una red snubber en paralelo con los contactos del rele, y reduce el problema, pero no lo elimina del todo.
Voy a activar los motores mediante triacs que creo que funcionará mejor

Mil gracias a todos los que habéis contribuido en que aprenda un poquito mas de este apasionante mundo.

ea7ln:
¿Porque se desactivan los reles cuando sale del bucle de lectura?
Es porque al poder trabajar e modo manual, si no muevo el joystick en ninguna posición los relés están relajados. En el bucle de lectura de puerto serie el relé se activaba, pero al pasar por la lectura de la posición del joystick se desactivaba al estar este en el centro.

Justo lo que pensaba: tenía sospecha de que todo se ejecutaba sin importar si la situación lo amerita.