Skip to content

Instantly share code, notes, and snippets.

@pknowledge
Created June 7, 2020 21:21
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save pknowledge/3b670515435e3dffaaef901469506a84 to your computer and use it in GitHub Desktop.
Save pknowledge/3b670515435e3dffaaef901469506a84 to your computer and use it in GitHub Desktop.
create a car is controlled from Bluetooth via Android SmartPhone
#include <SoftwareSerial.h> // Import Soft Uart library
#include <Servo.h> // Import Servo library
// Bluetooth communication pins
#define TX 2
#define RX 4
// L298N communication pins
#define IN1 3
#define IN2 5
#define IN3 6
#define IN4 7
// Servo communication pins
#define Servo_Pin 9
// Speed value
#define MAX_SPEED 255
#define MIN_SPEED 155
// Servo angle
#define pos 85
// Init
SoftwareSerial blue(RX, TX);
Servo servo;
// Init bluetooth speed
void Blue_Init(){
blue.begin(9600); // Bluetooth use baudrate 9600
}
// Init L298N pins
void Motor_Init(){
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
// Init servo
void Servo_Init(){
servo.attach(Servo_Pin);
// Set servo at "pos" angle (straight forward - default)
servo.write(pos);
}
// Stop function
void Stop(){
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
servo.write(pos);
}
// Back function
void Back(int speed){
// Speed
speed = constrain(speed, MIN_SPEED, MAX_SPEED);
digitalWrite(IN2, HIGH);
analogWrite(IN1, 255 - speed);
analogWrite(IN3, speed);
digitalWrite(IN4, LOW);
}
// Forward function
void Forward(int speed){
speed = constrain(speed, MIN_SPEED, MAX_SPEED);
digitalWrite(IN2, LOW);
analogWrite(IN1, speed);
analogWrite(IN3, 255 - speed);
digitalWrite(IN4, HIGH);
}
// Turn servo left
void Turn_Left(){
servo.write(pos - 35);
}
// Turn servo right
void Turn_Right(){
servo.write(pos + 35);
}
void setup() {
Serial.begin(9600);
Blue_Init();
Motor_Init();
Servo_Init();
}
void loop() {
char _read;
int speed = MIN_SPEED;
//Serial.println(servo.read());
if (blue.available()){ // If receive signal from Bluetooth
_read = blue.read(); // Get the data and assign to "_read" variable
// Speed level from 0 -> 9, respectively
if (_read >= '0' && _read <= '9'){
if (_read == '0') // If press '0' -> MIN SPEED
speed = MIN_SPEED;
else
speed += (int(_read) - 48)*10;
}
// If press 'q' -> MAX SPEED
if (_read == 'q')
speed = MAX_SPEED;
Serial.println(_read);
// If system receive one of data below
// System will invoke corresponding functions above
switch (_read){
case 'S':{
Stop();
Serial.println("STOP");
break;
}
case 'F':{
Forward(speed);
Serial.println("Forward");
break;
}
case 'B':{
Back(speed);
Serial.println("BACK");
break;
}
case 'L':{
Turn_Left();
Serial.println("LEFT");
break;
}
case 'R':{
Turn_Right();
Serial.println("RIGHT");
break;
}
case 'G':{
Turn_Left();
delay(10);
Forward(speed);
Serial.println("FL");
break;
}
case 'I':{
Turn_Right();
delay(10);
Forward(speed);
Serial.println("FR");
break;
}
case 'H':{
Turn_Left();
delay(10);
Back(speed);
Serial.println("BL");
break;
}
case 'J':{
Turn_Right();
delay(10);
Back(speed);
Serial.println("BR");
break;
}
}
}
delay(100);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment