update
after lots of playing around i got it working
using 2x L298N driver boards, 1 for tracks, 1 for turret and speaker
track kit
http://www.ebay.com/itm/272134426526?_trksid=p2060353.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
turret was from an old wird tank and 8ohm speaker
just need to hardwire it and stuff all the components into the tank chassis and get the battery for the tank
and added low voltage alarm for 2cell lipo
using 2x 100k resistors
+battery == 100k resistor == pin a0 == 100k resistor == gnd
#include <PCM.h>
const unsigned char gun[] PROGMEM = {
// gun
130, 126, 136, 135 // snip
};
const unsigned char cannon[] PROGMEM = {
// cannon
117, 126, 140, 151, // snip
};
const unsigned char dead[] PROGMEM = {
// dead
119, 105, 88, 88, // snip
};
byte PWM_PIN2 = A2; // ch1 radio steer
byte PWM_PIN3 = A3; // ch2 radio throttle
byte PWM_PIN4 = A4; // ch3 radio switch
int left_speed = 0;
int right_speed = 0;
int turret_speed = 0;
int right_dir = 0;
int left_dir = 0;
int turret_dir = 0;
int steer_rate = 60; // in %
int throttle_rate = 117; // in %
int turret_rate = 125; // in %
int pwm_value0 = 0;
int pwm_value1 = 0;
int pwm_value2 = 0;
int trackmla = 3; // forward
int trackmlb = 4; // back
int trackmls = 5; // pwm 5,6
int trackmra = 8; // forward
int trackmrb = 7; // back
int trackmrs = 6; // pwm
int turretma = 9; // left
int turretmb = 10; // right
int turretms = 6; // pwm
int bvoltain = 0; // reading
int bvolt0d = 0; // value for 0v
int bvolt5d = 1023; // value for 5v
float bvolt5v = 4.98; // measured voltage from arduino regulator
float bvoltmin = 3.20; // volts
int bvoltinmin = ((bvolt5d-bvolt0d) * (float) bvoltmin/bvolt5v)+bvolt0d;
void setup() {
Serial.begin(250000);
pinMode(PWM_PIN2, INPUT); // ch1 radio
pinMode(PWM_PIN3, INPUT); // ch2 radio
pinMode(PWM_PIN4, INPUT); // ch3 radio
pinMode (trackmla, OUTPUT); // forward
pinMode (trackmlb, OUTPUT); // back
pinMode (trackmls, OUTPUT); // pwm
pinMode (trackmra, OUTPUT); // forward
pinMode (trackmrb, OUTPUT); // back
pinMode (trackmrs, OUTPUT); // pwm
pinMode (turretma, OUTPUT); // left
pinMode (turretmb, OUTPUT); // right
pinMode (turretms, OUTPUT); // pwm
}
void loop() {
pwm_value0 = pulseIn(PWM_PIN2, HIGH) ;
pwm_value1 = pulseIn(PWM_PIN3, HIGH) ;
pwm_value2 = pulseIn(PWM_PIN4, HIGH) ;
bvoltain = analogRead(A0);
Serial.print("min voltage value ");
Serial.print(bvoltinmin);
Serial.print(", voltage reading ");
Serial.println(bvoltain);
if (pwm_value2 < 50 || pwm_value1 < 50 || pwm_value0 < 50 || bvoltain <= bvoltinmin ) // check for low radio values and voltage
{
digitalWrite (trackmla, HIGH); // forward
digitalWrite (trackmlb, HIGH); // back
digitalWrite (trackmls, LOW); // pwm
digitalWrite (trackmra, HIGH); // forward
digitalWrite (trackmrb, HIGH); // back
digitalWrite (trackmrs, LOW); // pwm
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (turretms, LOW); // pwm
if (bvoltain <= bvoltinmin ) // check for low radio values and voltage
{
Serial.println("low voltage");
startPlayback(dead, sizeof(dead));
delay(1000); // 500
}
else
{
Serial.println("controller off");
}
}
else if (pwm_value2 > 1550) // begin steer and throttle control
{
// controller on
left_speed = ((pwm_value1 - 1500) / 2 * ((float)throttle_rate / 100)) - ((pwm_value0 - 1500) / 2 * ((float)steer_rate / 100));
right_speed = ((pwm_value1 - 1500) / 2 * ((float)throttle_rate / 100)) + ((pwm_value0 - 1500) / 2 * ((float)steer_rate / 100));
if (left_speed > 255) left_speed = 255;
if (left_speed < -255) left_speed = -255;
if (right_speed > 255) right_speed = 255;
if (right_speed < -255) right_speed = -255;
// Serial.print("left track ");
// Serial.print(left_speed);
// Serial.print(", right track ");
// Serial.print(right_speed);
// Serial.println();
if (left_speed < -25) // Left move check
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (trackmla, LOW); // forward
digitalWrite (trackmlb, HIGH); // back
analogWrite (trackmls, -left_speed); // pwm
Serial.print("left track forward ");
Serial.print(left_speed);
}
else if (left_speed > 25)
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (trackmla, HIGH); // forward
digitalWrite (trackmlb, LOW); // back
analogWrite (trackmls, left_speed); // pwm
Serial.print("left track reverse ");
Serial.print(left_speed);
}
else
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (trackmla, HIGH); // forward
digitalWrite (trackmlb, HIGH); // back
digitalWrite (trackmls, LOW); // pwm
Serial.print("left track stop ");
Serial.print(left_speed);
}
if (right_speed < -25) // right move check
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (trackmra, LOW); // forward
digitalWrite (trackmrb, HIGH); // back
analogWrite (trackmrs, -right_speed); // pwm
Serial.print(", right track forward ");
Serial.println(right_speed);
}
else if (right_speed > 25)
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (trackmra, HIGH); // forward
digitalWrite (trackmrb, LOW); // back
analogWrite (trackmrs, right_speed); // pwm
Serial.print(", right track reverse ");
Serial.println(right_speed);
}
else
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (trackmra, HIGH); // forward
digitalWrite (trackmrb, HIGH); // back
digitalWrite (trackmrs, LOW); // pwm
Serial.print(", right track stop ");
Serial.println(right_speed);
}
} // end steer and throttle control
else // begin shoot and turret commands
{
// digitalWrite(led5, HIGH); // power on
// digitalWrite(led12, LOW); // ch3 low stop tracks
digitalWrite (trackmra, HIGH); // forward
digitalWrite (trackmrb, HIGH); // back
//digitalWrite (trackmrs, LOW); // pwm
digitalWrite (trackmla, HIGH); // forward
digitalWrite (trackmlb, HIGH); // back
digitalWrite (trackmls, LOW); // pwm
turret_speed = (pwm_value0 - 1500) / 2 * ((float)turret_rate / 100);
if (turret_speed > 255) turret_speed = 255;
if (turret_speed < -255) turret_speed = -255;
if (pwm_value1 < 1400) // sound check
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (turretms, LOW); // pwm
Serial.print ("Machinegun Sound ");
Serial.println (pwm_value1);
startPlayback(gun, sizeof(gun));
delay(490); //236
}
else if (pwm_value1 > 1600)
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (turretms, LOW); // pwm
Serial.print ("Cannon Sound ");
Serial.println (pwm_value1);
startPlayback(cannon, sizeof(cannon));
delay(1950); // 1925-1935
}
else
{
// no sounds check for turret move
if (turret_speed < -25) // turret move check
{
digitalWrite (turretma, LOW); // left
digitalWrite (turretmb, HIGH); // right
analogWrite (turretms, -turret_speed); // pwm
Serial.print("turret turn left ");
Serial.println(turret_speed);
}
else if (turret_speed > 25)
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, LOW); // right
analogWrite (turretms, turret_speed); // pwm
Serial.print("turret turn right ");
Serial.println(turret_speed);
}
else
{
digitalWrite (turretma, HIGH); // left
digitalWrite (turretmb, HIGH); // right
digitalWrite (turretms, LOW); // pwm
Serial.print("turret stop ");
Serial.println(turret_speed);
}
}
} // end shoot and turret commands
} // end void loop