Проблемы с автомобильным проектом 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 ИК A2
Сонар NewPing(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Сервопривод myservo;
Струнный голос;
недействительная установка() { Серийный.начать(9600); myservo.attach(8); myservo.write(90); pinMode (ИК, ВХОД); pinMode(12, ВЫХОД); pinMode(11, ВЫХОД); pinMode(10, ВЫХОД); pinMode(9, ВЫВОД);
void loop() { int расстояние = sonar.ping_cm();
если (Серийный.доступный() > 0) { голос = ""; задержка (2); голос = Serial.readString(); задержка (2); Serial.println(голос);
if (voice == "turn left") {
left();
} else if (voice == "left") {
left();
} else if (voice == "turn right") {
} else if (voice == "right") {
}
} в то время как (голос == "двигаться вперед") { вперед(); } в то время как (голос == "переместиться назад") { назад(); }
пусто вперед() { int расстояние = sonar.ping_cm();
если (расстояние <10) { цифровая запись (12, НИЗКИЙ); цифровая запись (11, НИЗКИЙ); цифровая запись (10, НИЗКИЙ); цифровая запись (9, НИЗКИЙ); голос = ""; } еще { цифровая запись (12, ВЫСОКИЙ); цифровая запись (10, ВЫСОКИЙ); } } недействительным назад () { int IR_Sensor = цифровое чтение (ИК); если (IR_Sensor == 0) { цифровая запись (12, НИЗКИЙ); цифровая запись (11, НИЗКИЙ); цифровая запись (10, НИЗКИЙ); цифровая запись (9, НИЗКИЙ); голос = ""; } еще { цифровая запись (11, ВЫСОКИЙ); цифровая запись (9, ВЫСОКИЙ); } } пустота слева () { myservo.write(180); delay(500); myservo.write(90); delay(500); int расстояние = sonar.ping_cm();
если (расстояние <10) { цифровая запись (12, НИЗКИЙ); цифровая запись (11, НИЗКИЙ); цифровая запись (10, НИЗКИЙ); цифровая запись (9, НИЗКИЙ); голос = ""; } еще { цифровая запись (12, ВЫСОКИЙ); delay(700); цифровая запись (12, НИЗКИЙ); цифровая запись (11, НИЗКИЙ); цифровая запись (10, НИЗКИЙ); digitalWrite(9, НИЗКИЙ);
}
пустое право() { myservo.write(0); delay(500); myservo.write(90); delay(500); { int расстояние = 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);
}
пусто Stop() { цифровая запись (12, НИЗКИЙ); цифровая запись (11, НИЗКИЙ); цифровая запись (10, НИЗКИЙ); цифровая запись (9, НИЗКИЙ); }'''
@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?
- L298N Dual Motor Controller Enable Pin имеет питание, но двигатели не работают
- Как питать Arduino Uno от терминала 5v драйвера двигателя L298N?
- Модуль Bluetooth HC-05 возвращает закодированные данные
- L298N, HC-05 Простой автомобиль с дистанционным управлением через Bluetooth, не работающий в Arduino
- Мой модуль Bluetooth HC-05 не работает
начните с самого начала... напишите скетч, который запускает один двигатель в одном направлении в течение одной секунды, останавливает двигатель на одну секунду, затем повторяется, @jsotola