Есть вот такая программа чтобы управлять роботом и она работает, но тут такая проблема инструкция авто вождения выполняется только один раз. То есть он едет в перёд реагирует на препятствия, а потом не реагирует. Может нужна отдельная функция, или endif, или цикл While. Может кто-то такое встречал?
C:
#define Trig 8
#define Echo 12
#include <Servo.h> // подключаем библиотеку для работы с сервоприводом
Servo servo1;
byte Blu;
byte GAZ = 127;//при включении газ установлен на 50%
void setup() {
Serial.begin(9600);
pinMode(Trig, OUTPUT); // выход
pinMode(Echo, INPUT); // вход
pinMode(3, OUTPUT); // Левые моторы
pinMode(5, OUTPUT); // Левые моторы
pinMode(6, OUTPUT); // Правые моторы
pinMode(11, OUTPUT); // Правые моторы
pinMode(4, OUTPUT);
servo1.attach(13);
servo1.write(0);
} // Фара
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop() {
if (Serial.available() > 0) {Blu = Serial.read();
if (Blu==101){
servo1.write(80);
delay(700);
servo1.write(0);
} // управляем фарой
if (Blu>=0&&Blu<=100){GAZ=map(Blu, 0, 100, 0, 255);} // Указываем значение газа
if (Blu==108){//типо авто вождение
digitalWrite(Trig, HIGH);
delayMicroseconds(10); // 10 микросекунд
digitalWrite(Trig, LOW);
impulseTime=pulseIn(Echo, HIGH); // замеряем длину импульса
distance_sm=impulseTime/58; // переводим в сантиметры
if (distance_sm>25) // если расстояние более 25 сантиметров
{
analogWrite(3, GAZ);
digitalWrite(5,0);
analogWrite(6, GAZ);
digitalWrite(11,0);
}
else
{
analogWrite(3, GAZ);
digitalWrite(5,0);
analogWrite(11, GAZ);
digitalWrite(6,0);
}
}
if (Blu==106){ // тормозим
digitalWrite(3,0);
digitalWrite(5,0);
digitalWrite(6,0);
digitalWrite(11,0);}
if (Blu==102){ // вперёд
analogWrite(3, GAZ);
digitalWrite(5,0);
analogWrite(6, GAZ);
digitalWrite(11,0);
Serial.print("kek");}
if (Blu==103){ // назад
analogWrite(5, GAZ);
digitalWrite(3,0);
analogWrite(11, GAZ);
digitalWrite(6,0);}
if (Blu==104){ // влево
analogWrite(3, GAZ);
digitalWrite(5,0);
analogWrite(11, GAZ);
digitalWrite(6,0);}
if (Blu==105){ // вправо
analogWrite(5, GAZ);
digitalWrite(3,0);
analogWrite(6, GAZ);
digitalWrite(11,0);}
}}
Изменено: