ARDUINO Код автоматического робота работает не корректно

chelovek

✩✩✩✩✩✩✩
12 Авг 2020
13
3
17
Есть вот такая программа чтобы управлять роботом и она работает, но тут такая проблема инструкция авто вождения выполняется только один раз. То есть он едет в перёд реагирует на препятствия, а потом не реагирует. Может нужна отдельная функция, или 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);}

}}
 
Изменено: