#define pin1 2 // motor #1 +
#define pin2 3 // motor #1 –
#define pw1 6 // motor #1 pwm
#define pin3 4 // motor #2 +
#define pin4 9 // motor #2 –
#define pw2 5 // motor #2 pwm
#define pin5 7 // motor #3 +
#define pin6 8 // motor #3 –
#define pw3 10 // motor #3 pwm
#define pin7 12 // motor #4 +
#define pin8 13 // motor #4 –
#define pw4 11 // motor #4 pwm
void setup() {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pw1, OUTPUT);
pinMode(pw2, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
pinMode(pw3, OUTPUT);
pinMode(pw4, OUTPUT);
Serial.begin(9600);
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
digitalWrite(pin5, LOW);
digitalWrite(pin6, LOW);
digitalWrite(pin7, LOW);
digitalWrite(pin8, LOW);
analogWrite(pw1, 50);
analogWrite(pw2, 50);
analogWrite(pw3, 50);
analogWrite(pw4, 50);
}
void loop() {
if (Serial.available() >= 2 )
{
unsigned int a = Serial.read();
unsigned int b = Serial.read();
unsigned int val = (b * 256) + a;
if (val == 50) // motor 1 reverse
{
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
}
else if (val == 100) // motor #1 stop
{
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
}
else if (val == 150) // motor #1 forward
{
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
}
else if (val == 200) // motor #2 reverse
{
digitalWrite(pin3, LOW);
digitalWrite(pin4, HIGH);
}
else if (val == 250) // motor #2 stop
{
digitalWrite(pin3, LOW);
digitalWrite(pin4, LOW);
}
else if (val == 300) // motor #2 forward
{
digitalWrite(pin3, HIGH);
digitalWrite(pin4, LOW);
}
else if (val == 350) // motor #3 reverse
{
digitalWrite(pin5, LOW);
digitalWrite(pin6, HIGH);
}
else if (val == 400) // motor #3 stop
{
digitalWrite(pin5, LOW);
digitalWrite(pin6, LOW);
}
else if (val == 450) // motor #3 forward
{
digitalWrite(pin5, HIGH);
digitalWrite(pin6, LOW);
}
else if (val == 500) // motor #4 reverse
{
digitalWrite(pin7, LOW);
digitalWrite(pin8, HIGH);
}
else if (val == 550) // motor #4 stop
{
digitalWrite(pin7, LOW);
digitalWrite(pin8, LOW);
}
else if (val == 600) // motor #4 forward
{
digitalWrite(pin7, HIGH);
digitalWrite(pin8, LOW);
}
else if (val >= 1000 && val <= 1255)
{
analogWrite (pw1, val - 1000);
}
else if (val >= 2000 && val <= 2255)
{
analogWrite (pw2, val - 2000);
}
else if (val >= 3000 && val <= 3255)
{
analogWrite (pw3, val - 3000);
}
else if (val >= 4000 && val <= 4255)
{
analogWrite (pw4, val - 4000);
}
}
}
Here is my code.
Some background. I have an made with MIT app inventor that assigned each motor with 1000x(motor 1 = 1000, motor 2 = 2000 etc. then each motor has a slider that gives a value between 0-255 which controls the speed. I have one major problem right now, Motor 1&2 get far more range and faster speed than motors 3 and 4. (it isnt the individual motors because I have switched them around. it seems like the rear two motors dont get power. Almost as if H-bridge 1(that controls motors 1&2) has first priority instead all 4 motors having equal priority.
Thanks