Hello
Here I am again with the car, but now there is no problem with control
. I just added an ultrasonic sensor to the front of the car, with the fact that if the distance is less than 20 cm, it should stop. When the car is running, it works once or twice, but on the third attempt, the car won't move in any direction and it has to be restarted. If anyone knows where the problem could be hiding, I will be very happy.
Here is the code:
(The sensor is attached to the servo motor due to the fact that if the car goes to the left, for example, the sensor turns to the left, but when it stops, it returns to its original position.)
Here I am again with the car, but now there is no problem with control
Here is the code:
(The sensor is attached to the servo motor due to the fact that if the car goes to the left, for example, the sensor turns to the left, but when it stops, it returns to its original position.)
Code:
#include <AFMotor.h>
#include <SoftwareSerial.h>
#include <Servo.h>
#define trigPin 2
#define echoPin 13
#define maxDistance 20
AF_DCMotor motor_1(1); //lavy predny
AF_DCMotor motor_2(2); //lavy zadny
AF_DCMotor motor_3(3); //predny pravy
AF_DCMotor motor_4(4); //zadny pravy
Servo servo;
SoftwareSerial bluetoothSerial(0, 1); // RX, TX
const int ledPin = 7;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
bluetoothSerial.begin(9600);
motor_1.setSpeed(150);
motor_2.setSpeed(150);
motor_3.setSpeed(150);
motor_4.setSpeed(150);
pinMode(ledPin, OUTPUT);
servo.attach(10);
}
void loop() {
if (bluetoothSerial.available()) { // ak je k dispozícii niečo na bluetoothSerial
char znak_citany = bluetoothSerial.read();
switch (znak_citany) {
case 'F':
motor_1.run(FORWARD);
motor_2.run(FORWARD);
motor_3.run(FORWARD);
motor_4.run(FORWARD);
break;
case 'B':
motor_1.run(BACKWARD);
motor_2.run(BACKWARD);
motor_3.run(BACKWARD);
motor_4.run(BACKWARD);
break;
case 'L':
motor_1.run(BACKWARD);
motor_2.run(FORWARD);
motor_3.run(BACKWARD);
motor_4.run(FORWARD);
servo.write(120);
delay(50);
break;
case 'R':
motor_1.run(FORWARD);
motor_2.run(BACKWARD);
motor_3.run(FORWARD);
motor_4.run(BACKWARD);
servo.write(60);
delay(50);
break;
case 'A':
motor_1.run(FORWARD);
motor_3.run(FORWARD);
servo.write(120);
delay(50);
break;
case 'C':
motor_2.run(FORWARD);
motor_4.run(FORWARD);
servo.write(60);
delay(50);
break;
case 'E':
motor_2.run(BACKWARD);
motor_4.run(BACKWARD);
break;
case 'G':
motor_1.run(BACKWARD);
motor_3.run(BACKWARD);
break;
case 'H':
motor_1.run(BACKWARD);
motor_2.run(FORWARD);
motor_3.run(BACKWARD);
motor_4.run(BACKWARD);
break;
case 'I':
motor_1.run(BACKWARD);
motor_2.run(BACKWARD);
motor_3.run(FORWARD);
motor_4.run(FORWARD);
break;
case 'U':
digitalWrite(ledPin, LOW);
break;
case 'D' :
digitalWrite(ledPin, HIGH);
break;
case 'S':
motor_1.run(RELEASE);
motor_2.run(RELEASE);
motor_3.run(RELEASE);
motor_4.run(RELEASE);
servo.write(90);
delay(50);
break;
}
}
long duration, distance;
digitalWrite(trigPin, LOW); // vyslanie trig signálu
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // meranie času odozvy echo signálu
distance = duration / 58.2; // výpočet vzdialenosti z echo signálu
if (distance < maxDistance && distance > 0) { // ak je vzdialenosť od objektu menšia ako maxDistance
motor_1.run(RELEASE);
motor_2.run(RELEASE);
motor_3.run(RELEASE);
motor_4.run(RELEASE);
}
}