Может ли кто-нибудь помочь мне изменить код, чтобы он работал быстрее?

Это программа для системы обнаружения слепых зон с использованием 4 ультразвуковых и 2 ИК датчиков. может ли кто-нибудь помочь мне изменить код, чтобы он работал быстрее?

#include<LiquidCrystal.h> 
#define trigbl 14
#define echobl 15
#define trigbr 16
#define echobr 17
#define trigfl 18
#define echofl 19
#define trigfr 8
#define echofr 9
#define bl 10
#define br 11
long durationbl;
long durationbr;
long durationfl;
long durationfr;
int distancebl;
int distancebr;
int distancefl;
int distancefr;
int irr;
int irl;
int a;
int b;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void setup()
{
  lcd.begin(16, 2);
  pinMode(trigbl, OUTPUT);
  pinMode(echobl, INPUT);
  pinMode(trigbr, OUTPUT);
  pinMode(echobr, INPUT);
  pinMode(trigfl, OUTPUT);
  pinMode(echofl, INPUT);
  pinMode(trigfr, OUTPUT);
  pinMode(echofr, INPUT);
  pinMode(bl, INPUT_PULLUP);
  pinMode(br, INPUT_PULLUP);
}
void loop()
{
  digitalWrite(trigbl, LOW);
  delay(2);
  digitalWrite(trigbl, HIGH);
  delay(10);
  digitalWrite(trigbl, LOW);
  durationbl = pulseIn(echobl, HIGH);
  distancebl = durationbl * 0.034 / 2;
  int a1=distancebl;
  digitalWrite(trigbr, LOW);
  delay(2);
  digitalWrite(trigbr, HIGH);
  delay(10);
  digitalWrite(trigbr, LOW);
   durationbr = pulseIn(echobr, HIGH);
   distancebr = durationbr * 0.034 / 2;
  int a2=distancebr;
  digitalWrite(trigfl, LOW);
  delay(2);
  digitalWrite(trigfl, HIGH);
  delay(10);
  digitalWrite(trigfl, LOW);
  durationfl = pulseIn(echofl, HIGH);
  distancefl = durationfl * 0.034 / 2;
  int a3=distancefl;
  digitalWrite(trigfr, LOW);
  delay(2);
  digitalWrite(trigfr, HIGH);
  delay(10);
  digitalWrite(trigfr, LOW);
  durationfr = pulseIn(echofr, HIGH);
  distancefr = durationfr * 0.034 / 2;
  int a4=distancefr;
  irl =digitalRead(bl);
  irr =digitalRead(br);
  lcd.setCursor(1, 0);          
  lcd.print("RL  RR  FL  FR");
  if (a1<30 && irl==0)
  {
  a=0;
  }
  else
  {
    a=1;
  }
   if (a2<30 || irr==0)
  {
  b=0;
  }
  else
  {
    b=1;
  }
   if  (a==1 && b==1 && a3>30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("No Obstacle    ");
  }
  else if ( a==0 && b==1 && a3>30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX            ");
  }
  else if ( a==1 && b==0 && a3>30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("    XX        ");
  }  
  else if ( a==1 && b==1 && a3<30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("        XX    ");
  }  
   else if ( a==1 && b==1 && a3>30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("            XX");
  }  
  else if ( a==0 && b==0 && a3>30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX  XX        ");
  }  
  else if ( a==1 && b==0 && a3<30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("    XX  XX    ");
  }  

  else if ( a==0 && b==1 && a3<30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX      XX    ");
  }
  else if ( a==0 && b==1 && a3>30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX          XX");
   }
  else if ( a==1 && b==0 && a3>30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("    XX      XX");
  }    
  else if ( a==0 && b==0 && a3<30 && a4>30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX  XX  XX    "); 
  }
  else if ( a==1 && b==1 && a3<30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("        XX  XX");
  }      
  else if ( a==1 && b==1 && a3>30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX  XX      XX");
  }  
  else if ( a==1 && b==0 && a3<30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("XX      XX  XX");
   }  
  else if ( a==1 && b==0 && a3<30 && a4<30)
  {
    lcd.setCursor(1, 1);
    lcd.print("    XX  XX  XX");
  }  
  else if ( a==0 && b==0 && a3<30 && a4<30)
  {
        lcd.setCursor(1, 1);
        lcd.print("Call Help ......  ");
  }  
}

, 👍0

Обсуждение

Убрать задержки...?, @Majenko

@Маженко, эти задержки предназначены для генерации импульсов для ультразвуковых датчиков., @Maheepathy Hruday Teja

подсказка: посмотрите на результат этих двух команд, чтобы иметь представление о том, как сократить все блоки else if ...... lcd.print("abc"); lcd.print("123");, @jsotola


1 ответ


6

Возможно, вы захотите проверить техническое описание ваших датчиков эхолота, чтобы узнать, что рекомендуемая длительность импульса запуска. На типичном HC-SR04 это десять микросекунды, а не миллисекунды. Поэтому используйте delayMicro Seconds(10);.

Если ваша программа работает очень медленно, скорее всего, виновата pulseIn(). Эта функция будет ждать входящего импульса и, если он есть нет входящего импульса, он ждет одну полную секунду, прежде чем истечет время ожидания. Этот можно просто исправить, предоставив третий аргумент pulseIn(), который — желаемое время ожидания в микросекундах. Установите его на что-то разумное, возможно, около 25 000 мкс для максимальной дальности обнаружения 4 м.

,