int fr; int lr; //output left and right track int lto; int rto; int frrlo; //forward reverse relay int frrro; //forward reverse relay void setup() { // put your setup code here, to run once: pinMode(A0, INPUT); //forward/reverse pinMode(A1, INPUT); //left/right pinMode(5, OUTPUT); //left track pinMode(6, OUTPUT); //right track pinMode(7, OUTPUT); //left track pinMode(8, OUTPUT); //right track setPwmFrequency(6, 256); setPwmFrequency(5, 256); } void loop() { // combine flightsticks signals to motor controlers, reverse using relays // chan 1 forward/reverse // chan 2 left/right // chan 3 cam left right // chan 4 // chan 5 lights? // chan 6 //read inputs fr=analogRead(A0); lr=analogRead(A1); //calculate lto=map(fr,0,1023,-255,255); rto=map(fr,0,1023,-255,255); lto=lto+map(lr,0,1023,-255,255); rto=rto-map(lr,0,1023,-255,255); lto=constrain(lto,-255,255); rto=constrain(rto,-255,255); if (lto>0) { frrlo=LOW; } else { frrlo=HIGH; lto=lto*-1; } if (rto>0) { frrro=LOW; } else { frrro=HIGH; rto=rto*-1; } //center deadzone //set outputs digitalWrite(7,frrlo); digitalWrite(8,frrro); analogWrite(5, lto); analogWrite(6, rto); } void setPwmFrequency(int pin, int divisor) { byte mode; if(pin == 5 || pin == 6 || pin == 9 || pin == 10) { switch(divisor) { case 1: mode = 0x01; break; case 8: mode = 0x02; break; case 64: mode = 0x03; break; case 256: mode = 0x04; break; case 1024: mode = 0x05; break; default: return; } if(pin == 5 || pin == 6) { TCCR0B = TCCR0B & 0b11111000 | mode; } else { TCCR1B = TCCR1B & 0b11111000 | mode; } } else if(pin == 3 || pin == 11) { switch(divisor) { case 1: mode = 0x01; break; case 8: mode = 0x02; break; case 32: mode = 0x03; break; case 64: mode = 0x04; break; case 128: mode = 0x05; break; case 256: mode = 0x06; break; case 1024: mode = 0x07; break; default: return; } TCCR2B = TCCR2B & 0b11111000 | mode; } }