HeliPlane Arduino Code

//Welcome to dragonflyRC.com code download

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

#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);                           //  HeliPlane code
  pinMode(ch8, OUTPUT);                        //  Robert L. French jr.
  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 output
          {      
             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 > 1500)                        //
          {      
             myservo2.write(1500);               // Servo 1                     OUT
             myservo4.write(1500);               // Servo 2                     OUT         SERVO SHIFT
             myservo8.write(1500);               // Servo 3                     OUT         HOLD 45deg
             myservo12.write(1500);              // Servo 4                     OUT
  
          }else
          {
             myservo2.write(val3);               // Servo 1                     OUT
             myservo4.write(val3);               // Servo 2                     OUT         SERVO SHIFT   
             myservo8.write(val3);               // Servo 3                     OUT         RANGE 0 - 45deg
             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         
             myservoA3.write(val11);             // ESC 4                       OUT

           
     }    
  }

 

This is the TERMS OF USE  for the pieces designed and pictures associated with dragonflyRC.com

Everything associated with dragonflyRC.com can be used freely but, under Creative Commons please make sure a link references dragonflyRC.com, thanks!