Redefinition of void loop ошибка

Ошибка при компилировании (мой первый скетч)

Offline

Зарегистрирован: 07.06.2013

Всем привет Вот решил я связать два скетча в одну. IRremote и Ultrasonic

Немного изучив я всетаки написал код, но вот в компиляции выходит ошибка 

Robot_a1.ino: In function 'void loop()':

Robot_a1:52: error: redefinition of 'void loop()'
Robot_a1:23: error: 'void loop()' previously defined here
Robot_a1:55: error: 'getDistance' was not declared in this scope
Robot_a1:56: error: 'ledPin' was not declared in this scope
Robot_a1:57: error: 'ledPin' was not declared in this scope
Robot_a1:62: error: a function-definition is not allowed here before '{' token
Robot_a1:73: error: a function-definition is not allowed here before '{' token

А вот и сам отформатированный код:


#include <IRremote.h>
#include <IRremoteInt.h>
#include <Ultrasonic.h>

int RECV_PIN = 11;
int trigPin = 10;
int echoPin = 11;
long distance;
IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); 
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);   
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() //кнопки на пульте
{
  if (irrecv.decode(&results)) 
  {
    Serial.println(results.value);

    //вперед
    if (results.value!=16) 
    {
      digitalWrite(3,HIGH);
    }

    if (results.value!=2064)
    {
      digitalWrite(3,LOW);
    }

    // назад
    if (results.value!=1168)
    {
      digitalWrite(5, HIGH); 
    }
    if (results.value!=3216)
    {
      digitalWrite(5, LOW);
    }
  }
}

void loop() // дальномер
{
  {
    distance = getDistance();
    if (distance<=10) analogWrite(ledPin, 0);
    if (distance>10) analogWrite(ledPin, 255);
    delay(50);
  }

  long getEchoTiming() 
  {
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    long duration = pulseIn(echoPin,HIGH);
    return duration;
  } 

  long getDistance() 
  {
    long distacne_cm = getEchoTiming()/29/2;
    return distacne_cm;
  }
}

Ошибка выходт в строке void loop() // дальномер

Я уже читал п свю пу она заключалась в том что я пытаюсь определить функцию внутри фукции.

Уже не знаю что и делать.

С нетерпением жду ваших советов!

  1. Всем здрасьте.
    По вот этому гайду

    пытаюсь завести аналогичный экранчик. Заканчивается все тем что данный код не компилируется

    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h> // Скачанная библиотека для дисплея.
    #include <Adafruit_SSD1306.h> // Скачанная библиотека для дисплея. https://yadi.sk/d/9F_uW1wIZUDna
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    void setup(){// У дисплея нету строк и колонок, только Pixel / пиксели по горизонтали и вертикали, условно! назовем курсор / колонка.          
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the  0.96″ 128X64 OLED LCD Display)I2C АДРЕС.
      display.clearDisplay(); // Clear the buffer. / Очистить буфер.
      display.setTextColor(WHITE); // Цвет текста.
      display.setTextSize(1); // Размер текста (1).
      display.setCursor(0,0); // Устанавливаем курсор в колонку 0, строку 0. на самом деле это строка №1, т.к. нумерация начинается с 0.
      display.println(«Hello world! 11111111»); // Печатаем 1 строку.
      display.setCursor(0,10); // Устанавливаем курсор в колонку 0, строку 1.(строка №2 ).
      display.println(«Dmitry OSIPOV 2222222»); // Печатаем 2 строку.
      display.setTextSize(5); // Меняем размер текста (5).
      display.setCursor(0,20); // Устанавливаем курсор в колонку 0, строку 2.(строка №3 ).
      display.println(«Size»); // Печатаем 3 строку.
      display.display();  // Чтобы сделать символы видимыми на дисплее !.
    }
    void loop() {
    }
     

    И вылезают следующие ошибки:

    Arduino: 1.6.5 (Windows 8.1), Плата»Arduino Uno»

    ssd1306_128x64_i2c.ino: In function ‘void setup()’:
    ssd1306_128x64_i2c:9: error: redefinition of ‘void setup()’
    sketch_jun16b:1: error: ‘void setup()’ previously defined here
    ssd1306_128x64_i2c.ino: In function ‘void loop()’:
    ssd1306_128x64_i2c:23: error: redefinition of ‘void loop()’
    sketch_jun16b:6: error: ‘void loop()’ previously defined here
    redefinition of ‘void setup()’

    Можете подсказать, какие ошибки тут?

  2. Такое ощущение, что в один проект попало два файла с исходным текстом, в которых присутствуют функции setup и loop.
    Имеет смысл глянуть в папку со скетчем и посмотреть на предмет наличия в ней файлов
    ssd1306_128x64_i2c.ino
    и sketch_jun16b (расширение, скорее всего, тоже .ino).
    Следует посмотреть, какой из них содержит нужный код и выкинуть второй (переместить в другую папку, если он все-таки нужен).

    Теряюсь в догадках, как такого можно случайно достичь.

  3. Перезапустил программу, вбил код заново… и снова проблемы…

    D:ArduinoScetcheslibrariesAdafruit_SSD1306Adafruit_SSD1306.cpp:433:6: error: prototype for ‘void Adafruit_SSD1306::dim(boolean)’ does not match any in class ‘Adafruit_SSD1306’
    void Adafruit_SSD1306::dim(boolean dim) {
          ^
    In file included from D:ArduinoScetcheslibrariesAdafruit_SSD1306Adafruit_SSD1306.cpp:28:0:
    D:ArduinoScetcheslibrariesAdafruit_SSD1306Adafruit_SSD1306.h:152:8: error: candidate is: void Adafruit_SSD1306::dim(uint8_t)
      void dim(uint8_t contrast);
            ^
    Ошибка компиляции.
     

    Эх, не получается у меня что-либо сделать без проблем..

  4. Какое-то противоречие внутри библиотеки.
    Если я ничего не путаю, то в заголовочном файле библиотеки функция описана одним образом, а в cpp другим. В результате при компиляции библиотеки в одном месте оно ругается, что не может найти в описании класса ничего похожего на то, что пытается определить в реализации, а при компиляции включаемого заголовочного файла ругается на то, что не может найти реализацию заявленной в определении класса функции.
    А вся проблема в разном именовании типа параметра: boolean в одном месте и uint8_t в другом.
    Можно попробовать скорректировать библиотеку, приведя описание функции к общему знаменателю, но тут нужно видеть всю библиотеку, чтобы попытаться определить, какой именно тип из двух нужен, и поможет ли исправление.
    Возможно, более простым решением будет найти другую, рабочую библиотеку.

  5. Благодарю!
    Библия с этого гайда таки завела экран.
    А то я еще попробовал OzOLED библию, она вроде затекла на ардуину, но экран не включила. Уже подумал, что месяц с ебая ждал брак.
    Большое спасибо всем ответившим.

Синтаксические ошибки

Первые ошибки, которые определяются отладчиком – это синтаксические ошибки. Их же легче всего исправить. Неправильный синтаксис в Arduino IDE выделяется строкой, в которой допущена неточность. Нужно разобраться – это ошибка в написании служебного слова, случайно удалена важная функция, не хватает закрывающейся скобки или неправильно отделены комментарии.

Для определения ошибки внимательно просмотрите строку-подсказку и внесите необходимые изменения. Ниже мы приведем примеры наиболее часто встречающихся синтаксических ошибок компиляции кода:

  • Ошибка “expected initializer before ‘}’ token” говорит о том, что случайно удалена или не открыта фигурная скобка.
  • Ошибка “a function-definition is not allowed here before ‘{‘ token” – аналогичная предыдущей и указывает на отсутствие открывающейся скобки, например, открывающих скобок в скетче только 11, а закрывающих 12.
  • Уведомление об ошибке “undefined reference to “setup” получите в случае переименования или удаления функции “setup”.
  • Ошибка “undefined reference to “loop” – возникает в случае удаления функции loop. Без команд этой функции компилятор запустить программу не сможет. Для устранения надо вернуть каждую из команд на нужное место в скетче.
  • Ошибка “… was not declared in this scope” обозначает, что в программном коде обнаружены слова, которые написаны с ошибкой (например, которые обозначают какую-то функцию) или найдены необъявленные переменные, методы. Подобная ошибка возникает также в случае случайного удаления значка комментариев и текст, который не должен восприниматься как программа, читается IDE.

Ошибки компиляции и их решения, для плат Arduino, синтаксические ошибки картинка

Ошибки библиотек

Большое количество ошибок возникает на уровне подключения библиотек или неправильного их функционирования. Наиболее известные:

  • “fatal error: … No such file or directory”. Такое сообщение вы получите, если необходимую в скетче библиотеку вы не записали в папку libraries. Сообщение об ошибке в одном из подключенных файлов может означать, что вы используете библиотеку с ошибками или библиотеки не совместимы. Решение – обратиться к разработчику библиотеки или еще раз проверить правильность написанной вами структуры.
  • “redefinition of void setup” – сообщение возникает, если автор библиотеки объявил функции, которые используются и в вашем коде. Чтобы исправить – переименуйте свои методы или в библиотеке.

Ошибки компилятора

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

Ошибки компиляции при работе с разными платами — Uno, Mega и Nano

В Arduino можно писать программы под разные варианты микроконтроллеров. По умолчанию в меню выбрана плата Arduino/Genuino Uno. Если забудете о том что нужно указать нужную плату – в вашем коде будут ссылки на методы или переменные, не описанные в конфигурации “по умолчанию”.

Вы получите ошибку при компиляции “programmer is not responding”. Чтобы исправить ее – проверьте правильность написания кода в части выбора портов и вида платы. Для этого в Ардуино IDE в меню «Сервис» выберите плату. Аналогично укажите порт в меню “Сервис” – пункт «Последовательный порт».

Ошибка exit status 1

В среде разработки такое сообщение можно увидеть во многих случаях. И хотя в документации данная ошибка указывается как причина невозможности запуска IDE Аrduino в нужной конфигурации, на самом деле причины могут быть и другие. Для того, чтобы найти место, где скрывается эта ошибка можно “перелопатить” действительно много. Но все же стоит сначала проверить разрядность системы и доступные библиотеки.

Ошибки компиляции и их решения, для плат Arduino, Ошибка exit status 1

Обновления и исправления касательно версий инструкции и ПО

Взял отсюда: https://www.youtube.com/watch?v=biz3Fyo-b58
Вот этот скетч: https://drive.google.com/drive/folders/ … 3Clk1a6fz3
Получаю вот эту ошибку:
Arduino: 1.8.13 (Windows 10), Плата:»Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)»

C:UsersbarmaDownloads12 effects led chasersketch_dec31a212 effects led chaser.ino: In function ‘void setup()’:

12 effects led chaser:15:6: error: redefinition of ‘void setup()’

void setup() {

^~~~~

C:UsersbarmaDownloads12 effects led chasersketch_dec31a2sketch_dec31a2.ino:1:6: note: ‘void setup()’ previously defined here

void setup() {

^~~~~

C:UsersbarmaDownloads12 effects led chasersketch_dec31a212 effects led chaser.ino: In function ‘void loop()’:

12 effects led chaser:34:6: error: redefinition of ‘void loop()’

void loop()

^~~~

C:UsersbarmaDownloads12 effects led chasersketch_dec31a2sketch_dec31a2.ino:6:6: note: ‘void loop()’ previously defined here

void loop() {

^~~~

exit status 1

redefinition of ‘void setup()’

[/code]

Конфигурация: Программатор: Arduino uno , «arduino as ISP». Жертва: Arduino pro mini ATMega 328P 16mHz. Версия программы: 1.8.13 . Порт, программатор и плата, прописаны верно.

Примечания: Программатор и жертва работают. Бутлоадер прописался успешно . Функция на которую матюкается компилятор вроде как тоже правильно написана. В чем дело — не пойму.

Может подскажете что поправить надо?

I am extremely new to Arduino coding and have downloaded a sketch for the PCA9685 to use with model railroading and turnout control. When I verify the sketch I get several errors … I don’t even know how to resolve and could use some assistance. There are two sketches:

1:

    /***************************************************
  This sketch can be used to operate any number of turnouts on a
  Model Railroad. Code blocks can be added to accomodate any number
  of servos. This sketch uses only two servos for this demonstration.

  The pushbutton can be replaced with a SPST switch
  commonly used on a control panel. Three pin Bicolor LED can be used
  in place of two seperate LEDs in each circuit.

  10K Ohm pulldown resistor used on switch
  330 Ohm resistor used on LEDs. One per pair of LEDs

  Created 03/02/2019 by Tom Kvichak
  https://tomstrainsandthings.com/
  Additional Arduino Projects can be found at the above web address

 ****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

int buttonPin0 = 2;   // Can add as many buttons as needed
int ledPin0C = 3;     // C designates Closed position of turnout
int ledPin0T = 4;     // T designates Thrown position of turnout
int buttonState0 = 0;

int buttonPin1 = 5;
int ledPin1C = 6;
int ledPin1T = 7;
int buttonState1 = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("pca9685_TurnoutFinal!");
  pwm.begin();
  pwm.setPWMFreq(60);
  delay(30);

  pinMode(ledPin0C, OUTPUT);
  pinMode(ledPin0T, OUTPUT);
  pinMode(buttonPin0, INPUT);
  pinMode(ledPin1C, OUTPUT);
  pinMode(ledPin1T, OUTPUT);
  pinMode(buttonPin1, INPUT);
}

void loop() {
  ///////////
  buttonState0 = digitalRead(buttonPin0);
  if (buttonState0 == HIGH) {
    pwm.setPWM(0, 0, 370);
    digitalWrite(ledPin0T, LOW);
    digitalWrite(ledPin0C, HIGH);
  }
  else  {
    pwm.setPWM(0, 0, 285);
    digitalWrite(ledPin0C, LOW);
    digitalWrite(ledPin0T, HIGH);
  }
  //////////
  buttonState1 = digitalRead(buttonPin1);
  if (buttonState1 == HIGH) {
    pwm.setPWM(1, 0, 370);
    digitalWrite(ledPin1T, LOW);
    digitalWrite(ledPin1C, HIGH);
  }
  else  {
    pwm.setPWM(1, 0, 285);
    digitalWrite(ledPin1C, LOW);
    digitalWrite(ledPin1T, HIGH);
  }
  //////////
}

2:

    /*************************************************** 
  This is an example for our Adafruit 16-channel PWM & Servo driver
  Servo test - this will drive 8 servos, one after the other on the
  first 8 pins of the PCA9685

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/products/815

  These drivers use I2C to communicate, 2 pins are required to  
  interface.

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
//Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x41);

#define SERVOMIN  110 // this is the 'minimum' pulse length count (out of 4096)
#define SERVOMAX  510 // this is the 'maximum' pulse length count (out of 4096)

// May have to adjust values to match your servos
// Test your servo with the procedures below

// our servo # counter
uint8_t servonum = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("pca9685_TurnoutTest!");
  pwm.begin();
  pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
  delay(50);
}
///////////////////Functions//////////////////////

void driveMin() {
  pwm.setPWM(servonum, 0, SERVOMIN);    //Use to test low range
}
void driveMax() {
  pwm.setPWM(servonum, 0, SERVOMAX);    //Use to test high range
}
///////////////End Of Functions//////////////////

void loop() {

  for( int angle =0; angle<181; angle +=15){  // testing only right now
    delay(500);
    pwm.setPWM(1, 0, convert2angle(angle) );   // May only need this for sweeping the servo
  }

}
int convert2angle(int myang){
   int pulse = map(myang,0, 180, SERVOMIN,SERVOMAX);// map angle of 0 to 180 to Servo min and Servo max 
   Serial.print("Angle/Pulse: ");Serial.print(myang);
   Serial.print(" / "); Serial.println(pulse);
   return pulse;
}

ERROR MESSAGES:

pca9685_TurnoutTest:23:25: error: redefinition of 'Adafruit_PWMServoDriver pwm'

 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

                         ^

C:UserswdhenDocumentsArduinolibrariesAdafruit-PWM-Servo-Driver-Library-masterexamplespca9685_TurnoutFinalpca9685_TurnoutFinal.ino:21:25: note: 'Adafruit_PWMServoDriver pwm' previously declared here

 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

                         ^

C:UserswdhenDocumentsArduinolibrariesAdafruit-PWM-Servo-Driver-Library-masterexamplespca9685_TurnoutFinalpca9685_TurnoutTest.ino: In function 'void setup()':

pca9685_TurnoutTest:35:6: error: redefinition of 'void setup()'

 void setup() {

      ^

C:UserswdhenDocumentsArduinolibrariesAdafruit-PWM-Servo-Driver-Library-masterexamplespca9685_TurnoutFinalpca9685_TurnoutFinal.ino:33:6: note: 'void setup()' previously defined here

 void setup() {

      ^

C:UserswdhenDocumentsArduinolibrariesAdafruit-PWM-Servo-Driver-Library-masterexamplespca9685_TurnoutFinalpca9685_TurnoutTest.ino: In function 'void loop()':

pca9685_TurnoutTest:52:6: error: redefinition of 'void loop()'

 void loop() {

      ^

C:UserswdhenDocumentsArduinolibrariesAdafruit-PWM-Servo-Driver-Library-masterexamplespca9685_TurnoutFinalpca9685_TurnoutFinal.ino:48:6: note: 'void loop()' previously defined here

 void loop() {

      ^

Using library Wire at version 1.0 in folder: C:Program FilesWindowsAppsArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtthardwarearduinoavrlibrariesWire 
Using library Adafruit-PWM-Servo-Driver-Library-master at version 2.0.0 in folder: C:UserswdhenDocumentsArduinolibrariesAdafruit-PWM-Servo-Driver-Library-master 
exit status 1
redefinition of 'Adafruit_PWMServoDriver pwm'

  • Red alert 3 ошибка при запуске приложения 0xc000007b
  • Red dead redemption 2 ошибка err gfx init
  • Red alert 3 ошибка идет установка соединения 1 2
  • Red dead redemption 2 ошибка emp dll
  • Red alert 3 ошибка msvcr110 dll