Created
March 23, 2023 22:45
-
-
Save CodeNextAdmin/cf63ca0278d9d7552302dd4d7e77f171 to your computer and use it in GitHub Desktop.
Control your Arduino car with an Android Bluetooth app
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Code Next Arduino Robot club | |
* HC-06 Bluetooth drive control with mobile app | |
* Downoload an Android Bluetooth HC-06 app and | |
* set commands to match f (forward), r (reverse) | |
* l (left) , r (right) | |
* TODO: modify this code to improve remote driveing performance | |
*/ | |
#include <SoftwareSerial.h> | |
//motor 1 | |
#define enA 9 | |
#define in1 6 | |
#define in2 7 | |
////motor 2 | |
#define in3 5 | |
#define in4 4 | |
#define enB 3 //pwm for motor 2 | |
#define buzzer 12 | |
#define led 13 | |
SoftwareSerial BTserial(10, 11); // RX | TX | |
void setup() { | |
Serial.begin(9600); | |
BTserial.begin(9600); | |
pinMode(led, OUTPUT); | |
pinMode(enA, OUTPUT); | |
pinMode(enB, OUTPUT); | |
pinMode(in1, OUTPUT); | |
pinMode(in2, OUTPUT); | |
pinMode(in3, OUTPUT); | |
pinMode(in4, OUTPUT); | |
wakeUp(); | |
} | |
void loop() { | |
analogWrite(enA, 255); //full power - no more potentiometer | |
analogWrite(enB, 255); | |
while (BTserial.available()>0) | |
{ | |
char c = BTserial.read(); | |
if (c == 'f'){ | |
tone(buzzer, 1000); | |
digitalWrite(led, HIGH); | |
delay(80); | |
noTone(buzzer); | |
forward(); //move forward | |
} else if (c == 'b'){ | |
tone(buzzer, 800); | |
digitalWrite(led, HIGH); | |
delay(80); | |
noTone(buzzer); | |
reverse(); | |
} else if (c == 'l'){ | |
//turn left | |
tone(buzzer, 800); | |
digitalWrite(led, HIGH); | |
delay(80); | |
noTone(buzzer); | |
turnLeft(); | |
} else if (c == 'r'){ | |
tone(buzzer, 800); | |
digitalWrite(led, HIGH); | |
delay(80); | |
noTone(buzzer); | |
turnRight(); | |
} | |
else { | |
Serial.println("Enter f, b, r, l"); | |
} | |
delay(10); | |
} | |
// Keep reading from Arduino Serial Monitor and send to HC-06 | |
while (Serial.available()>0) | |
{ | |
//This runs while the communication is coming from the Serial USB | |
BTserial.write(Serial.read()); | |
} | |
} | |
void forward(){ | |
//motor 1 | |
digitalWrite(in1, HIGH); | |
digitalWrite(in2, LOW); | |
digitalWrite(in3, HIGH); | |
digitalWrite(in4, LOW); | |
} | |
void reverse(){ | |
digitalWrite(in1, LOW); | |
digitalWrite(in2, HIGH); | |
digitalWrite(in3, LOW); | |
digitalWrite(in4, HIGH); | |
} | |
void turnRight(){ | |
digitalWrite(in1, HIGH); | |
digitalWrite(in2, LOW); | |
digitalWrite(in3, LOW); | |
digitalWrite(in4, HIGH); | |
} | |
void turnLeft(){ | |
digitalWrite(in1, LOW); | |
digitalWrite(in2, HIGH); | |
digitalWrite(in3, HIGH); | |
digitalWrite(in4, LOW); | |
} | |
void wakeUp(){ | |
tone(buzzer, 1000); // Send 1KHz sound signal... | |
digitalWrite(led, HIGH); | |
delay(80); //play for 20 milliseconds | |
noTone(buzzer); //turn off sound | |
digitalWrite(led, LOW); | |
delay(120); //wait for a bit more | |
tone(buzzer, 720); | |
digitalWrite(led, HIGH); | |
delay(120); | |
noTone(buzzer); | |
digitalWrite(led, LOW); | |
delay(100); | |
tone(buzzer, 1000); | |
digitalWrite(led, HIGH); | |
delay(300); | |
noTone(buzzer); | |
digitalWrite(led, LOW); | |
delay(20); | |
tone(buzzer, 2000); | |
digitalWrite(led, HIGH); | |
delay(200); | |
noTone(buzzer); | |
delay(1000); | |
digitalWrite(led, LOW); | |
} | |
void playForwardChime(){ | |
tone(buzzer, 1000); // Send 1KHz sound signal... | |
delay(80); //play for 20 milliseconds | |
noTone(buzzer); //turn off sound | |
delay(80); //wait for a bit more | |
tone(buzzer, 1200); | |
delay(120); | |
noTone(buzzer); | |
delay(100); | |
tone(buzzer, 1000); | |
delay(90); | |
noTone(buzzer); | |
delay(20); | |
tone(buzzer, 2400); | |
delay(120); | |
noTone(buzzer); | |
delay(0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment