В чём ошибка?

King_Sombra
Offline
Зарегистрирован: 15.02.2019

Ошибка ------  a function-definition is not allowed here before '{' token

Выделяет строчку Void loop() {

Как решить ошибку?

код


//Глаза
//Левый
#define left_trig  2;//левый выход
#define left_echo  3;//левый вход
//Правый
#define right_trig  4;//правый выход
#define right_echo  5;//правый вход
//Двигатель
//Левый
#define ENA 6
#define IN1 7
#define IN2 8
//Правый
#define ENB 9
#define IN3 10
#define IN4 11
//переменные для расчётов
  unsigned int impulseTime_left=0;//Имульс левого глаза
  unsigned int impulseTime_right=0;//Импульс правого глаза
  unsigned int distance_left_cm=0;//дистанция с левого глаза
  unsigned int distance_right_cm=0;//дистанция с правого глаза 
  unsigned int cm1=0;
  unsigned int cm2=0;
  unsigned int obo=73;
  
void setup() {
  //Назначение пинов
  pinMode(2,OUTPUT);//левый выход
  pinMode(4,OUTPUT);//правый выход
  pinMode(3,INPUT);//левый вход
  pinMode(5,INPUT);//правый вход
  pinMode(6,OUTPUT);//обороты левого
  pinMode(9,OUTPUT);//обороты правого
  pinMode(7,OUTPUT);//двигатель
  pinMode(8,OUTPUT);//двигатель
  pinMode(10,OUTPUT);//двигатель
  pinMode(11,OUTPUT);//двигатель
  Serial.begin(9600);
  
}
void w(){      //вперёд
   digitalWrite(7, LOW);
   digitalWrite(8, HIGH);
   digitalWrite(10, HIGH);
   digitalWrite(11, LOW);
   analogWrite(6, obo);
   analogWrite(9, obo);
}
void a(){      //налево
   digitalWrite(7, LOW);
   digitalWrite(8, HIGH);
   digitalWrite(10, LOW);
   digitalWrite(11, HIGH);
   analogWrite(6, obo);
   analogWrite(9, obo);   
}
void d(){      //направо
   digitalWrite(7, HIGH);
   digitalWrite(8, LOW);
   digitalWrite(10, HIGH);
   digitalWrite(11, LOW);
   analogWrite(6, obo);
   analogWrite(9, obo);
}
void s(){
   digitalWrite(7, HIGH);
   digitalWrite(8, LOW);
   digitalWrite(10, LOW);
   digitalWrite(11, HIGH);
   analogWrite(6, obo);
   analogWrite(9, obo);
  }
void az(){
     digitalWrite(7, LOW);
   digitalWrite(8, HIGH);
   digitalWrite(10, LOW);
   digitalWrite(11, HIGH);
   analogWrite(6, obo);
   analogWrite(9, obo);   
   delay(3000);
  }
void dz(){
     digitalWrite(7, HIGH);
   digitalWrite(8, LOW);
   digitalWrite(10, HIGH);
   digitalWrite(11, LOW);
   analogWrite(6, obo);
   analogWrite(9, obo);
   delay(3000);
   }
void z(){
 {if
     (random(0,100)%2
       )
       
       {az();}
      else{dz();}   
       
       }  

                                    
//Бесконечный цикл
void loop() { 
  //Глаза смотрят/проверяют
  //Левый глаз
  digitalWrite(2, LOW);
  delayMicroseconds(2);
  digitalWrite(2, HIGH);
  delayMicroseconds(10);
  digitalWrite(2, LOW);
  impulseTime_left=pulseIn(3, HIGH);//приёмник вкл
  distance_left_cm=impulseTime_left/58; //перевод дистаниции в см
  cm1=distance_left_cm;
  delay(100);// минус помехи
  delay(200);//на всякий случай
  digitalWrite(4, LOW);
  delayMicroseconds(2);
  digitalWrite(4, HIGH);
  delayMicroseconds(10);
  digitalWrite(4, LOW);
  impulseTime_right=pulseIn(5, HIGH);//приёмник вкл
  distance_right_cm=impulseTime_right/58; //перевод дистаниции в см
  cm2=distance_right_cm;
  if (cm1 >= 200){cm1 = 0;}
  delay(100);//минус помехи
  Serial.println(cm1);
  Serial.println(cm2);
//Направление движения
if (cm1 >= 25 && cm1 < 200 && cm2 >= 25){w();}
if (cm1 <  20 && cm2 <  20){s();}
if (cm1 >  20 && cm1 <  25){z();}
if (cm2 >  20 && cm2 <  25){z();}

}

                               

  
  


 

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

Фигурные скобки считайте {}. В 92-й строке перед if лишняя наверное.

vvadim
Offline
Зарегистрирован: 23.05.2012

если аглицкого не знаете, то воспользоваться переводчиком и узнать что за ошибка.

а переводчик вам скажет , что у вас в коде проблемка со скобками.

пройдитесь по коду и проверьте - открывающих и закрывающих должно быть одинаковое число.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

King_Sombr,

Есть такая волшебная комбинация клавиш - Ctrl+T

Она полезна всегда. Например, если Вы собрались вставить код на форум, то воспользоваться ею - это просто вежливость - людям так легче читать.

Но, главное, что если ею пользоваться, то некоторые ошибки (типа Вашей нынешней) проявляются сразу. Вот я применил эти клавиши, посмотрите на код. Ошибка совершенно очевидна.

//Глаза
//Левый
#define left_trig  2;//левый выход
#define left_echo  3;//левый вход
//Правый
#define right_trig  4;//правый выход
#define right_echo  5;//правый вход
//Двигатель
//Левый
#define ENA 6
#define IN1 7
#define IN2 8
//Правый
#define ENB 9
#define IN3 10
#define IN4 11
//переменные для расчётов
unsigned int impulseTime_left = 0; //Имульс левого глаза
unsigned int impulseTime_right = 0; //Импульс правого глаза
unsigned int distance_left_cm = 0; //дистанция с левого глаза
unsigned int distance_right_cm = 0; //дистанция с правого глаза
unsigned int cm1 = 0;
unsigned int cm2 = 0;
unsigned int obo = 73;

void setup() {
  //Назначение пинов
  pinMode(2, OUTPUT); //левый выход
  pinMode(4, OUTPUT); //правый выход
  pinMode(3, INPUT); //левый вход
  pinMode(5, INPUT); //правый вход
  pinMode(6, OUTPUT); //обороты левого
  pinMode(9, OUTPUT); //обороты правого
  pinMode(7, OUTPUT); //двигатель
  pinMode(8, OUTPUT); //двигатель
  pinMode(10, OUTPUT); //двигатель
  pinMode(11, OUTPUT); //двигатель
  Serial.begin(9600);

}
void w() {     //вперёд
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  analogWrite(6, obo);
  analogWrite(9, obo);
}
void a() {     //налево
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  analogWrite(6, obo);
  analogWrite(9, obo);
}
void d() {     //направо
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  analogWrite(6, obo);
  analogWrite(9, obo);
}
void s() {
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  analogWrite(6, obo);
  analogWrite(9, obo);
}
void az() {
  digitalWrite(7, LOW);
  digitalWrite(8, HIGH);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  analogWrite(6, obo);
  analogWrite(9, obo);
  delay(3000);
}
void dz() {
  digitalWrite(7, HIGH);
  digitalWrite(8, LOW);
  digitalWrite(10, HIGH);
  digitalWrite(11, LOW);
  analogWrite(6, obo);
  analogWrite(9, obo);
  delay(3000);
}
void z() {
  { if
    (random(0, 100) % 2
    )

    {
      az();
    }
    else {
      dz();
    }

  }


  //Бесконечный цикл
  void loop() {
    //Глаза смотрят/проверяют
    //Левый глаз
    digitalWrite(2, LOW);
    delayMicroseconds(2);
    digitalWrite(2, HIGH);
    delayMicroseconds(10);
    digitalWrite(2, LOW);
    impulseTime_left = pulseIn(3, HIGH); //приёмник вкл
    distance_left_cm = impulseTime_left / 58; //перевод дистаниции в см
    cm1 = distance_left_cm;
    delay(100);// минус помехи
    delay(200);//на всякий случай
    digitalWrite(4, LOW);
    delayMicroseconds(2);
    digitalWrite(4, HIGH);
    delayMicroseconds(10);
    digitalWrite(4, LOW);
    impulseTime_right = pulseIn(5, HIGH); //приёмник вкл
    distance_right_cm = impulseTime_right / 58; //перевод дистаниции в см
    cm2 = distance_right_cm;
    if (cm1 >= 200) {
      cm1 = 0;
    }
    delay(100);//минус помехи
    Serial.println(cm1);
    Serial.println(cm2);
    //Направление движения
    if (cm1 >= 25 && cm1 < 200 && cm2 >= 25) {
      w();
    }
    if (cm1 <  20 && cm2 <  20) {
      s();
    }
    if (cm1 >  20 && cm1 <  25) {
      z();
    }
    if (cm2 >  20 && cm2 <  25) {
      z();
    }

  }

И, да, впредь всегда копипастите сообщения об ошиках целиком. В нём, например, был номер строки, а Вы выложили без него. Зачем? Чтонам сложности создать?

bwn
Offline
Зарегистрирован: 25.08.2014

ЕвгенийП пишет:

Есть такая волшебная комбинация клавиш - Ctrl+T

Но, главное, что если ею пользоваться, то некоторые ошибки (типа Вашей нынешней) проявляются сразу. Вот я применил эти клавиши, посмотрите на код. Ошибка совершенно очевидна.

Ууууу, хитренький. Я ее в таком ракурсе и не рассматривал. Спасибо.))))

Emer
Offline
Зарегистрирован: 02.11.2016

King_Sombra пишет:

if (cm2 > 20 && cm2 < 25){z();}

Просто маленький совет. Чтоб не плодить лишние скобки в коде и не путаться в них, если после IF идет простое действие в одну строчку, то скобки не нуны.

if (cm2 >  20 && cm2 <  25)z();

мне так удобнее.