Может ли кто-нибудь помочь мне изменить код, чтобы он работал быстрее?
Это программа для системы обнаружения слепых зон с использованием 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 ...... ");
}
}
1 ответ
Возможно, вы захотите проверить техническое описание ваших датчиков эхолота, чтобы узнать, что
рекомендуемая длительность импульса запуска. На типичном HC-SR04 это десять
микросекунды, а не миллисекунды. Поэтому используйте delayMicro Seconds(10);
.
Если ваша программа работает очень медленно, скорее всего, виновата
pulseIn()
. Эта функция будет ждать входящего импульса и, если он есть
нет входящего импульса, он ждет одну полную секунду, прежде чем истечет время ожидания. Этот
можно просто исправить, предоставив третий аргумент pulseIn()
, который
— желаемое время ожидания в микросекундах. Установите его на что-то разумное,
возможно, около 25 000 мкс для максимальной дальности обнаружения 4 м.
- avrdude ser_open() can't set com-state
- Float печатается только 2 десятичных знака после запятой
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Печать массива байтов на экране последовательного монитора Arduino IDE
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Arduino IDE Отказано В Разрешении На Загрузку, Ubuntu
- Нет заголовочных файлов (.h) в Documents\Arduino\libraries\arduino_144469 с демонстрационным кодом
- Связь Arduino master/slave с использованием RS485
Убрать задержки...?, @Majenko
@Маженко, эти задержки предназначены для генерации импульсов для ультразвуковых датчиков., @Maheepathy Hruday Teja
подсказка: посмотрите на результат этих двух команд, чтобы иметь представление о том, как сократить все блоки
else if
......lcd.print("abc"); lcd.print("123");
, @jsotola