Проблемы с автомобильным проектом arduino bluetooth (с драйвером двигателя L298n)
Итак, сценарий таков: я делаю автомобиль, управляемый Bluetooth (голосовое управление) + функция предотвращения препятствий. Я использую Arduino Uno с драйвером двигателя L298n и модуль HC-05 BT в датчиках. Я использую ультразвуковой датчик и ИК-датчик для спины и серводвигатель также используются для вращения ультразвукового датчика. Поэтому проблема заключается в том, что когда я отправляю команду «повернуть налево» сервопривод движется влево, и ничего не происходит, а другая команда, например, повернуть направо, двигаться назад, двигаться вперед, вообще не работает.
схема и код даны, пожалуйста, ребята, подскажите, где чего не хватает, если я сделал что-то не так с кодом, или драйвер двигателя или проводка создают проблему
КОД:
#include <NewPing.h>
#include<Servo.h>
#define TRIGGER_PIN A1
#define ECHO_PIN A0
#define MAX_DISTANCE 300
#define IR A2
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;
String voice;
void setup() {
Serial.begin(9600);
myservo.attach(8);
myservo.write(90);
pinMode(IR, INPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode( 9, OUTPUT);
}
void loop() {
int distance = sonar.ping_cm();
if (Serial.available() > 0) {
voice = "";
delay(2);
voice = Serial.readString();
delay(2);
Serial.println(voice);
if (voice == "turn left") {
left();
} else if (voice == "left") {
left();
} else if (voice == "turn right") {
} else if (voice == "right") {
}
}
while (voice == "move forward") {
forward();
}
while (voice == "move backward") {
backward();
}
}
void forward() {
int distance = sonar.ping_cm();
if (distance < 10) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
voice = "";
} else {
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
}
}
void backward() {
int IR_Sensor = digitalRead(IR);
if (IR_Sensor == 0) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
voice = "";
} else {
digitalWrite(11, HIGH);
digitalWrite( 9, HIGH);
}
}
void left() {
myservo.write(180);
delay(500);
myservo.write(90);
delay(500);
int distance = sonar.ping_cm();
if (distance < 10) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
voice = "";
} else {
digitalWrite(12, HIGH);
delay(700);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
}
}
void right() {
myservo.write(0);
delay(500);
myservo.write(90);
delay(500); {
int distance = sonar.ping_cm();
if (distance < 10) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
voice = "";
} else {
digitalWrite(10, HIGH);
}
delay(700);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
}
}
void Stop() {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite( 9, LOW);
}
@Hassan Akram, 👍1
Обсуждение1 ответ
Кажется, в коде отсутствует несколько логических строк. Вот исправленная версия, насколько я понимаю.
#include <NewPing.h>
#include<Servo.h>
#define TRIGGER_PIN A1
#define ECHO_PIN A0
#define MAX_DISTANCE 300
#define IR A2
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;
String voice;
void setup() {
Serial.begin(9600);
myservo.attach(8);
myservo.write(90);
pinMode(IR, INPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
}
void loop() {
int distance = sonar.ping_cm();
if (Serial.available() > 0) {
voice = "";
delay(2);
voice = Serial.readString();
delay(2);
Serial.println(voice);
if (voice == "turn left") {
left();
} else if (voice == "left") {
left();
} else if (voice == "turn right") {
right();
} else if (voice == "right") {
right();
} else if(voice == "move forward"){
forward();
} else if(voice == "move backward"){
backward();
}
}
}
void forward() {
int distance = sonar.ping_cm();
if (distance < 10) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
voice = "";
} else {
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
}
}
void backward() {
int IR_Sensor = digitalRead(IR);
if (IR_Sensor == 0) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
voice = "";
} else {
digitalWrite(11, HIGH);
digitalWrite(9, HIGH);
}
}
void left() {
myservo.write(180);
delay(500);
myservo.write(90);
delay(500);
int distance = sonar.ping_cm();
if (distance < 10) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
voice = "";
} else {
digitalWrite(12, HIGH);
delay(700);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
}
}
void right() {
myservo.write(0);
delay(500);
myservo.write(90);
delay(500); {
int distance = sonar.ping_cm();
if (distance < 10) {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
voice = "";
} else {
digitalWrite(10, HIGH);
}
delay(700);
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
}
}
void Stop() {
digitalWrite(12, LOW);
digitalWrite(11, LOW);
digitalWrite(10, LOW);
digitalWrite(9, LOW);
}
- Можно ли измерить скорость акселерометром? Насколько точно?
- Модуль Bluetooth HC-05 мигает красным светом - Arduino Uno
- Как установить связь между веб-камерой и Arduino UNO и получать прямую трансляцию на мобильном телефоне с помощью ESP8266?
- Сканирование Bluetooth-устройств с помощью HC-05
- Как питать Arduino Uno от терминала 5v драйвера двигателя L298N?
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
- Модуль Bluetooth HC-05 возвращает закодированные данные
- L298N, HC-05 Простой автомобиль с дистанционным управлением через Bluetooth, не работающий в Arduino
начните с самого начала... напишите скетч, который запускает один двигатель в одном направлении в течение одной секунды, останавливает двигатель на одну секунду, затем повторяется, @jsotola