Сообщение об ошибке: "expected initializer before 'digitalWrite'"

Должен отметить, что я не писал этот код, а взял его с ЗДЕСЬ.

#include<Servo.h>
Servo myservo; // создаем сервообъект
int redled=13; // объявляем контакты
int greenled=12;

int servopin=9;
int trigpin=6;
int echopin=5;
float distance;
float duration;
int datapin=7;
int clockpin=8;
int latchpin=3;

void setup(){
  Serial.begin(9600); 
  pinMode(redled,OUTPUT); // объявляем пин-режим
  pinMode(greenled,OUTPUT);

  pinMode(servopin,OUTPUT);
  pinMode(trigpin,OUTPUT);
  pinMode(echopin,INPUT);
  pinMode(datapin,OUTPUT);
  pinMode(clockpin,OUTPUT);
  pinMode(latchpin,OUTPUT);
  myservo.attach(servopin); // объявляем, что объект сервопривода подключен к выводу сервопривода

}

int ping() // создаем функцию {
  digitalWrite(trigpin,LOW);
  delayMicroseconds(10);

  digitalWrite(trigpin,HIGH);
  delayMicroseconds(20);
  digitalWrite(trigpin,LOW);

  duration= pulseIn(echopin,HIGH);
  distance= duration*0.034/2; // расстояние в см
  return(distance);
  }

void loop() { 
  myservo.write(90); // устанавливаем сервопривод под углом 90 градусов
  float value;
  value=ping(); // вызываем функцию ping
  Serial.println(value);
  delay(100);
  if(value>20) {
      digitalWrite(redled,LOW);
      digitalWrite(greenled,HIGH);

      digitalWrite(latchpin,LOW);
      shiftOut(datapin,clockpin,LSBFIRST,B01010000); // двигаем машину вперед
      digitalWrite(latchpin,HIGH);
  }
  if(value<20&& value>15) {
      digitalWrite(redled,HIGH);
      digitalWrite(greenled,HIGH);

      digitalWrite(latchpin,LOW);
      shiftOut(datapin,clockpin,LSBFIRST,B01010000);
      digitalWrite(latchpin,HIGH);
  }
    if(value<15) {
      digitalWrite(latchpin,LOW);
      shiftOut(datapin,clockpin,LSBFIRST,B00000000); // Останови машину
      digitalWrite(latchpin,HIGH);
      delay(1000);
      digitalWrite(latchpin,LOW);
      shiftOut(datapin,clockpin,LSBFIRST,B00101000); // сначала возвращаем робот-машину
      digitalWrite(latchpin,HIGH);
      delay(1000);
      digitalWrite(latchpin,LOW);
      shiftOut(datapin,clockpin,LSBFIRST,B00000000); // затем снова стоп
      digitalWrite(latchpin,HIGH);
      delay(100);

      go(); // вызываем функцию go
      delay(2000);
  }

  myservo.write(90);

}

void go() {
  int a;
  int b;
  myservo.write(0);
  delay(1000);
  a=ping();
  myservo.write(180);
  delay(1000);
  b=ping();

  if(a>b) {
   digitalWrite(redled,HIGH);
   digitalWrite(greenled,LOW);

   digitalWrite(latchpin,LOW);
   shiftOut(datapin,clockpin,LSBFIRST,B00010000); // переходим в правую сторону
   digitalWrite(latchpin,HIGH);    
} else if(a<b) {
    digitalWrite(redled,HIGH);
    digitalWrite(greenled,LOW);

    digitalWrite(latchpin,LOW);
    shiftOut(datapin,clockpin,LSBFIRST,B01000000); // переходим в левую сторону
    digitalWrite(latchpin,HIGH);     
} else if(a=b) {
    digitalWrite(redled,HIGH);
    digitalWrite(greenled,LOW);

    digitalWrite(latchpin,LOW);
    shiftOut(datapin,clockpin,LSBFIRST,B00101000); // сначала возвращаем робот-машину
    digitalWrite(latchpin,HIGH);
    delay(4000); // ждем 4 секунды
    digitalWrite(latchpin,LOW);
    shiftOut(datapin,clockpin,LSBFIRST,B01000000); // затем двигаемся в правильном направлении
    digitalWrite(latchpin,HIGH);
    delay(2000); 
  }
}

Полная ошибка:

sketch_may02a:31:3: error: expected initializer before 'digitalWrite'

   digitalWrite(trigpin,LOW);

   ^

sketch_may02a:32:20: error: expected constructor, destructor, or type conversion before '(' token

   delayMicroseconds(10);

                    ^

sketch_may02a:34:15: error: expected constructor, destructor, or type conversion before '(' token

   digitalWrite(trigpin,HIGH);

               ^

sketch_may02a:35:20: error: expected constructor, destructor, or type conversion before '(' token

   delayMicroseconds(20);

                    ^

sketch_may02a:36:15: error: expected constructor, destructor, or type conversion before '(' token

   digitalWrite(trigpin,LOW);

               ^

sketch_may02a:38:3: error: 'duration' does not name a type

   duration= pulseIn(echopin,HIGH);

   ^

sketch_may02a:39:3: error: 'distance' does not name a type

   distance= duration*0.034/2; // distance is in cm

   ^

sketch_may02a:40:3: error: expected unqualified-id before 'return'

   return(distance);

   ^

sketch_may02a:41:3: error: expected declaration before '}' token

   }

   ^

exit status 1
expected initializer before 'digitalWrite'

, 👍0

Обсуждение

Кроме того, почему ваша функция ping объявлена с возвращаемым типом int? Похоже, вы намеревались вернуть значение float. Хотя в своем коде вы постоянно ходите туда-сюда по этому поводу., @AnT

**примечание:** у вас есть повторяющийся код в блоках if функции go()..... первые три строки каждого блока if одинаковы.... переместите эти три строки в перед первым оператором if и удалите их из трех блоков if., @jsotola


1 ответ


Лучший ответ:

5

Начинается определение функции:

int ping() // создаем функцию {

Обратите внимание, что комментарий вставляется перед открывающей фигурной скобкой. Это означает, что фигурная скобка закомментирована. Переместите комментарий в конец строки или переместите фигурную скобку на отдельную строку.

,

Хороший улов. Я посмотрел на этот код и увидел то, что ожидал увидеть, а не то, что там. (проголосовали), @Duncan C