Poner 3 programas en uno solo

Hola tengo 3 programas de Arduino para controlar un robot submarino que tiene dos motores de avance y retroceso y un motor de subir y bajar, con puente en H pero los tengo independientes y tengo que ponerlos en unos solo ¿Cómo lo puedo hacer?

Les pongo a continuación los 3 programas:
El primero es:

int b;
void setup() {
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 Serial.begin(9600);
}

void loop() {
 b = analogRead(A2);
 Serial.println(b);
 
 if (analogRead(A2) < 400) {
   digitalWrite(8, LOW);
   digitalWrite(9, HIGH);
 }
 else if (analogRead(A2) > 600) {
   digitalWrite(8, HIGH);
   digitalWrite(9, LOW);
 }
 else {
   digitalWrite(8, LOW);
   digitalWrite(9, LOW);
 }
}

El segundo es:

// Joystick analógico XY con pulsador

void setup() {
 Serial.begin(9600);
}

void loop() {
 Serial.print("Eje X: ");
 Serial.print(analogRead(A0));
 Serial.print(" Eje Y: ");
 Serial.println(analogRead(A1));
 delay(500);
}

y el tercero es:

// Joystick con dos motores y 4 direcciones.

void setup() {
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
}

void loop() {
 if (analogRead(A1) > 400 && analogRead(A1) < 600) {
   if (analogRead(A0) < 400) {
     digitalWrite(2, LOW);
     digitalWrite(3, HIGH);
     digitalWrite(4, LOW);
     digitalWrite(5, HIGH);
   }
   else if (analogRead(A0) > 600) {
     digitalWrite(2, HIGH);
     digitalWrite(3, LOW);
     digitalWrite(4, HIGH);
     digitalWrite(5, LOW);
   }
   else {
     digitalWrite(2, LOW);
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
   }
 }

 if(analogRead(A0) > 400 && analogRead(A0) < 600) {
   if (analogRead(A1) < 400) {
     digitalWrite(2, LOW);
     digitalWrite(3, HIGH);
     digitalWrite(4, HIGH);
     digitalWrite(5, LOW);
   }
   else if (analogRead(A1) > 600) {
     digitalWrite(2, HIGH);
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, HIGH);
   }
   else {
     digitalWrite(2, LOW);
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
   }
 }
}

Moderador: Código editado con etiquetas

Aca tienes un video de como combinar códigos.

Diría que haría un mismo programa con tres funciones que hacen de tres programas en uno.

Utiliza FreeRTOS

Te quedaría el programa así:

#if defined ARDUINO_SAM_DUE
#include <FreeRTOS_ARM.h>
#else
#include <FreeRTOS_AVR.h>
#endif

//Variables
TaskHandle_t xHandle_1, xHandle_2,xHandle_3;
int b;
void vPeriodicTask1();
void vPeriodicTask2();
void vPeriodicTask3();

void setup() {
 
 pinMode(8, OUTPUT);
 pinMode(9, OUTPUT);
 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 Serial.begin(9600);
   
 //FreeRTOS
 if (xTaskCreate(vPeriodicTask1, "primero", 300, NULL, tskIDLE_PRIORITY + 1, &xHandle_1) == pdPASS) { NULL; }
 if (xTaskCreate(vPeriodicTask2, "segundo", 300, NULL, tskIDLE_PRIORITY + 1, &xHandle_2) == pdPASS) { NULL; }
 if (xTaskCreate(vPeriodicTask3, "tercero", 300, NULL, tskIDLE_PRIORITY + 1, &xHandle_2) == pdPASS) { NULL; }

 vTaskStartScheduler();

 for (;;);

}

// Tarea 1
void vPeriodicTask1(void *pvParameters)
{
 static char sString[80];

 TickType_t xLastWakeTime = xTaskGetTickCount();

 for (;;)
 {

     b = analogRead(A2);
 Serial.println(b);
 
 if (analogRead(A2) < 400) {
   digitalWrite(8, LOW);
   digitalWrite(9, HIGH);
 }
 else if (analogRead(A2) > 600) {
   digitalWrite(8, HIGH);
   digitalWrite(9, LOW);
 }
 else {
   digitalWrite(8, LOW);
   digitalWrite(9, LOW);
 }
       
       vTaskDelayUntil(&xLastWakeTime, (50 / portTICK_PERIOD_MS));
     }
}

// Tarea 2
void vPeriodicTask2(void *pvParameters)
{
 static char sString[80];

 TickType_t xLastWakeTime = xTaskGetTickCount();

 for (;;)
 {
     Serial.print("Eje X: ");
 Serial.print(analogRead(A0));
 Serial.print(" Eje Y: ");
 Serial.println(analogRead(A1));
 delay(500);
       
       vTaskDelayUntil(&xLastWakeTime, (50 / portTICK_PERIOD_MS));
     }
}

// Tarea 3
void vPeriodicTask3(void *pvParameters)
{

 TickType_t xLastWakeTime = xTaskGetTickCount();

 for (;;)
 {
    if (analogRead(A1) > 400 && analogRead(A1) < 600) {
   if (analogRead(A0) < 400) {
     digitalWrite(2, LOW);
     digitalWrite(3, HIGH);
     digitalWrite(4, LOW);
     digitalWrite(5, HIGH);
   }
   else if (analogRead(A0) > 600) {
     digitalWrite(2, HIGH);
     digitalWrite(3, LOW);
     digitalWrite(4, HIGH);
     digitalWrite(5, LOW);
   }
   else {
     digitalWrite(2, LOW);
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
   }
 }

 if(analogRead(A0) > 400 && analogRead(A0) < 600) {
   if (analogRead(A1) < 400) {
     digitalWrite(2, LOW);
     digitalWrite(3, HIGH);
     digitalWrite(4, HIGH);
     digitalWrite(5, LOW);
   }
   else if (analogRead(A1) > 600) {
     digitalWrite(2, HIGH);
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, HIGH);
   }
   else {
     digitalWrite(2, LOW);
     digitalWrite(3, LOW);
     digitalWrite(4, LOW);
     digitalWrite(5, LOW);
   }
 }
       
       vTaskDelayUntil(&xLastWakeTime, (50 / portTICK_PERIOD_MS));
     }
}

void loop() {}

Moderador: Código editado con etiquetas

He visto respuestas de todo tipo pero a alguien que no puede poner 3 sketchs juntos le recomiendas usar FreeRTOS?

Perdona pero no me parece una sugerencia para un novato.