проблема в коде с вездеходом с эхолокатором

dzrigor
Offline
Зарегистрирован: 17.05.2017

скетч для самодвижущего танка не работает 

int L_A_IA = 2;
int L_A_IB = 3;
int R_B_IA = 4;
int R_B_IB = 5;
int frontL = 9;
int frontR = 10;
int backL = 11;
int backR = 12;
int echoPin = 6;
int trigPin = 7;
 
int isLeft = 0;
long distance;
 
void setup() {
  pinMode(L_A_IA, OUTPUT);
  pinMode(L_A_IB, OUTPUT);
  pinMode(R_B_IA, OUTPUT);
  pinMode(R_B_IB, OUTPUT);
  pinMode(frontL, OUTPUT);
  pinMode(frontR, OUTPUT);
  pinMode(backL, OUTPUT);
  pinMode(backR, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, OUTPUT);
}
 
void loop() {
      distance = getDistance();
      if (distance >= 20 {
        digitalWrite(frontL, LOW);
        digitalWrite(frontR, LOW);
        go_forward();
      }
      else {
          stop_robot();
          digitalWrite(frontL, HIGH);
          digitalWrite(frontR, HIGH);
          delay(10);
          isLeft = random(0, 2);
          if (isLeft < 1) {
            go_right();
          }
          else {
            go_left();
          }
      }
      delay(50);
}
 
void go_farward() {
  digitalWrite(L_A_IA, HIGH);
  digitalWrite(L_A_IB, LOW);
  digitalWrite(R_B_IA, LOW);
  digitalWrite(R_B_IB, HIGH);
  digitalWrite(backL, LOW);
  digitalWrite(backR, LOW);
}
 
void go_back() {
  digitalWrite(L_A_IA, LOW);
  digitalWrite(L_A_IB, HIGH);
  digitalWrite(R_B_IA, HIGH);
  digitalWrite(R_B_IB, LOW);
  digitalWrite(backL, HIGH);
  digitalWrite(backR, HIGH);
}
 
void go_right() {
  digitalWrite(R_B_IA, HIGH);
  digitalWrite(R_B_IB, LOW);
  digitalWrite(L_A_IA, HIGH);
  digitalWrite(L_A_IB, LOW);
  digitalWrite(backR, HIGH);
  digitalWrite(backL, LOW);
}
         
void go_left() {
  digitalWrite(R_B_IA, LOW);
  digitalWrite(R_B_IB, HIGH);
  digitalWrite(L_A_IA, LOW);
  digitalWrite(L_A_IB, HIGH);
  digitalWrite(backL, HIGH);
  digitalWrite(backR, LOW);
}
 
void stop_robot() {
  digitalWrite(L_A_IA, LOW);
  digitalWrite(L_A_IB, LOW);
  digitalWrite(R_B_IA, LOW);
  digitalWrite(R_B_IB, LOW);
  digitalWrite(backL, HIGH);
  digitalWrite(backR, HIGH);
  delay(100);
  digitalWrite(backL, LOW);
  digitalWrite(backR, LOW);
}
 
long getEchoTining() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  return duration;
}
 
 
 
 
Arduino: 1.8.2 (Windows 10), Плата:"Arduino/Genuino Uno"
 
C:\Users\Thrower.thrower-pc\Downloads\sketch_may17a\sketch_may17a.ino: In function 'void loop()':
 
sketch_may17a:29: error: 'getDistance' was not declared in this scope
 
       distance = getDistance();
 
                              ^
 
sketch_may17a:30: error: expected ')' before '{' token
 
       if (distance >= 20 {
 
                          ^
 
C:\Users\Thrower.thrower-pc\Downloads\sketch_may17a\sketch_may17a.ino: In function 'long int getEchoTining()':
 
sketch_may17a:100: error: 'tringPin' was not declared in this scope
 
   digitalWrite(tringPin, LOW);
 
                ^
 
exit status 1
'getDistance' was not declared in this scope
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 

подскажите , как исправить пожалуйста !

JasKo
Offline
Зарегистрирован: 21.11.2015

dzrigor пишет:

подскажите , как исправить пожалуйста !

Написать функцию getDistance()

добавить завершающую скобку в строке if (distance >= 20

и объявить переменную tringPin

и тогда возможно случится чудо и будет Вам счастье.

dzrigor
Offline
Зарегистрирован: 17.05.2017
void loop() {
      distance = getDistance();
      if (distance >= 20) {
        digitalWrite(frontL, LOW);
        digitalWrite(frontR, LOW);
        go_forward();
      }
 
getDistance  у меня прописан , 
 
exit status 1
'getDistance' was not declared in this scope   , пишет такую ошибку
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

dzrigor пишет:

getDistance  у меня прописан , 
 
 
Нет. Ты пытаешся вызвать функцию getDistance() и присвоить результат её выполнения переменной distance. Это сделать невозможно, т.к. сама функция getDistance() нигде не объявлена и не написана.
 
Там ещё косяк с функцией go_forward(), она объявлена как go_farward()
 
P.S. Код на форум нужно вставлять так: Вставка программного кода в тему/комментарий
dzrigor
Offline
Зарегистрирован: 17.05.2017

 не подскажите тогда , пожалуйста , как можно это исправить ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Выше уже ответили - написать функцию getDistance().

Возможно не хватает какой-нибудь библиотеки, содержащей эту функцию. Тогда спрашивайте там, где взяли этот код.