В чём ошибка?
- Войдите на сайт для отправки комментариев
Пт, 15/02/2019 - 18:03
Ошибка ------ 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();}
}
Фигурные скобки считайте {}. В 92-й строке перед if лишняя наверное.
если аглицкого не знаете, то воспользоваться переводчиком и узнать что за ошибка.
а переводчик вам скажет , что у вас в коде проблемка со скобками.
пройдитесь по коду и проверьте - открывающих и закрывающих должно быть одинаковое число.
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(); } }И, да, впредь всегда копипастите сообщения об ошиках целиком. В нём, например, был номер строки, а Вы выложили без него. Зачем? Чтонам сложности создать?
Есть такая волшебная комбинация клавиш - Ctrl+T
Но, главное, что если ею пользоваться, то некоторые ошибки (типа Вашей нынешней) проявляются сразу. Вот я применил эти клавиши, посмотрите на код. Ошибка совершенно очевидна.
Ууууу, хитренький. Я ее в таком ракурсе и не рассматривал. Спасибо.))))
if (cm2 > 20 && cm2 < 25){z();}
Просто маленький совет. Чтоб не плодить лишние скобки в коде и не путаться в них, если после IF идет простое действие в одну строчку, то скобки не нуны.
if(cm2 > 20 && cm2 < 25)z();мне так удобнее.