HeliPlane Arduino Code

//Welcome to HeliPlane code download
//Open Aruino software

//Copy/paste this code into software and upload to Arduino

 //  by Robert L. French jr.


#include <Servo.h>

byte ch2 = 2;                 // Servo 1                    out
byte ch3 = 3;                 // Mind            in
byte ch4 = 4;                // Servo 2                   out
byte ch5 = 5;                // Shift              in
byte ch6 = 6;                // M1                  in
byte ch7 = 7;                // Trainer          in
byte ch8 = 8;               // Servo 3                      out
byte ch9 = 9;               // M2                  in
byte ch10 = 10;           // M3                   in
byte ch11 = 11;             // M4                   in
byte ch12 = 12;           // Servo 4                       out

byte chA0 = A0;       // Motor 1                        out
byte chA1 = A1;         // Motor 2                       out
byte chA2 = A2;       // Motor 3                       out
byte chA3 = A3;       // Motor 4                       out

int val3;                      // Mind               in
int val5;                     // Shift                in
int val6;                     // M1                    in
int val7;                     // Trainer           in
int val9;                    // M2                    in
int val10;                  // M3                    in
int val11;                   // M4                    in

int ser1;
int ser2;
int ser3;
int ser4;

int SpeedAverage;     // (M1+M2+M3+M4)/4

Servo myservo2;         // Servo 1                    out
Servo myservo4;        // Servo 2                    out
Servo myservo8;        // Servo 3                    out
Servo myservo12;       // Servo 4                   out

Servo myservoA0;      // ESC 4                      out
Servo myservoA1;       // ESC 3                      out
Servo myservoA2;      // ESC 4                      out
Servo myservoA3;      // ESC 4                      out

 

void setup() {
  
  pinMode(ch2, OUTPUT);
  pinMode(ch3, INPUT);
  pinMode(ch4, OUTPUT);
  pinMode(ch5, INPUT);
  pinMode(ch6, INPUT);
  pinMode(ch7, INPUT);                         
  pinMode(ch8, OUTPUT);                         
  pinMode(ch9, INPUT);
  pinMode(ch10, INPUT);
  pinMode(ch11, INPUT);
  pinMode(ch12, OUTPUT);

  pinMode(chA0, OUTPUT);
  pinMode(chA1, OUTPUT);
  pinMode(chA2, OUTPUT);
  pinMode(chA3, OUTPUT);
  
   myservo2.attach(2); 
   myservo4.attach(4);
   myservo8.attach(8);                       
   myservo12.attach(12);
    
   myservoA0.attach(A0);
   myservoA1.attach(A1);
   myservoA2.attach(A2);
   myservoA3.attach(A3);

   Serial.begin(9600);
}
 
void loop() 

 {
  
  val7 = pulseIn(ch7, HIGH);              // Trainer         IN                      SWITCH

  val6 = pulseIn(ch6, HIGH);              // M1                 IN
  val9 = pulseIn(ch9, HIGH);              // M2                IN                      KK READ
  val10 = pulseIn(ch10, HIGH);           // M3                IN      
  val11 = pulseIn(ch11, HIGH);              // M4               IN
              
   if (val7 < 1500)
   {
       val5 = pulseIn(ch5, HIGH);          // Shift             IN                      SHIFT READ
              Serial.println(val5);               // Print
               
         if (val5 < 1600)                           // SHIFT will enable servo vector and change throttle
          {      
             myservo2.write(val5);            // Servo 1                      OUT
             myservo4.write(val5);            // Servo 2                     OUT         SERVO SHIFT
             myservo8.write(val5);            // Servo 3                     OUT         less than 1600
             myservo12.write(val5);           // Servo 4                     OUT

             myservoA0.write(val6);          // ESC 1                       OUT
             myservoA1.write(val9);            // ESC 2                      OUT         MOTOR HELI
             myservoA2.write(val10);          // ESC 3                      OUT         less than 1600
             myservoA3.write(val11);           // ESC 4                      OUT

  
          }else
          {
             ser1 = (((val9-val6)/2) + val5);
             ser2 = (((val6-val9)/2) + val5);      

             myservo2.write(ser1);               // Servo 1                     OUT
             myservo4.write(ser2);               // Servo 2                   OUT         SERVO VECTOR
             myservo8.write(val5);               // Servo 3                    OUT         greater than 1600
             myservo12.write(val5);              // Servo 4                    OUT
             

             SpeedAverage = ((val6 + val9 + val10 + val11) / 4);
            
             myservoA0.write(SpeedAverage);      // ESC 1             OUT
             myservoA1.write(SpeedAverage);      // ESC 2              OUT         MOTOR PLANE
             myservoA2.write(SpeedAverage);      // ESC 3              OUT         greater than 1600
             myservoA3.write(SpeedAverage);      // ESC 4              OUT
          }
          

    
    }else
    {
       val3 = pulseIn(ch3, HIGH);                // MIND          IN                        MIND READ
           Serial.println(val3);                         // Print
      
         if (val3 < 1600)                                  // MIND will enable servo vector and change throttle
          {      
             myservo2.write(val3);               // Servo 1                     OUT
             myservo4.write(val3);               // Servo 2                     OUT         SERVO SHIFT
             myservo8.write(val3);               // Servo 3                     OUT
             myservo12.write(val3);              // Servo 4                     OUT

             myservoA0.write(val6);              // ESC 1                       OUT
             myservoA1.write(val9);              // ESC 2                        OUT         MOTOR HELI
             myservoA2.write(val10);            // ESC 3                       OUT         less than 1600
             myservoA3.write(val11);             // ESC 4                       OUT

  
          }else
          {
             ser1 = (((val9-val6)/2) + val3);
             ser2 = (((val6-val9)/2) + val3);      

             myservo2.write(ser1);               // Servo 1                     OUT
             myservo4.write(ser2);               // Servo 2                    OUT         SERVO VECTOR
             myservo8.write(val3);               // Servo 3                    OUT         greater than 1600
             myservo12.write(val3);              // Servo 4                    OUT
             

             SpeedAverage = ((val6 + val9 + val10 + val11) / 4);
            
             myservoA0.write(SpeedAverage);      // ESC 1                       OUT
             myservoA1.write(SpeedAverage);      // ESC 2                       OUT         MOTOR PLANE
             myservoA2.write(SpeedAverage);      // ESC 3                       OUT         greater than 1600
             myservoA3.write(SpeedAverage);      // ESC 4                       OUT
         }
     }    
  }