I used the Arduino Uno R3 board. When it receives a Bluetooth signal, it can move forward, reverse, left, or right. The forward and reverse work well. The turn left and right only work when I plug it into PC.
forward and reverse make two DC motors work. turn left and right make one work. So I think there is no matter about power. Here's my code.
#include <Servo.h>
Servo sm = Servo();
#include <Ultrasonic.h>
Ultrasonic u = Ultrasonic(11, 12); //trig,echo
void setup() {
// put your setup code here, to run once:
pinMode(3, OUTPUT); //ENA 0-255(speed)
pinMode(4, OUTPUT); //IN1
pinMode(5, OUTPUT); //IN2
analogWrite(3 , 250);
pinMode(6, OUTPUT); //ENB 0-255(speed)
pinMode(9, OUTPUT); //IN3
pinMode(8, OUTPUT); //IN4
analogWrite(6 , 250);
pinMode(7, OUTPUT);//LED
sm.attach(2);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
int x = Serial.read();
//FORWARD
if (x == '1') {
sm.write(90);
delay(300);
int d = u.read();
if (d > 15) {
digitalWrite(7, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(300);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
if (d < 15) {
digitalWrite(7, HIGH);
}
}
//REVERSE
if (x == '2') {
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(9, LOW);
digitalWrite(8, HIGH);
delay(300);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
//TURN RIGHT
if (x == '3') {
sm.write(30);
delay(300);
int d = u.read();
if (d > 15) {
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(9, HIGH);
digitalWrite(8, LOW);
delay(300);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
if (d < 15) {
digitalWrite(7, HIGH);
}
sm.write(90);
}
//TURN LEFT
if (x == '4') {
sm.write(120);
delay(300);
int d = u.read();
if (d > 15) {
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
delay(300);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(8, LOW);
}
if (d < 15) {
digitalWrite(7, HIGH);
}
sm.write(90);
}
}