Ошибка при компиляции void setup

Тема в разделе "Arduino & Shields", создана пользователем FunApple, 16 июн 2015.

  1. FunApple

    FunApple Нуб

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

    пытаюсь завести аналогичный экранчик. Заканчивается все тем что данный код не компилируется
    Код (Text):
    #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() {
    }
     
    И вылезают следующие ошибки:

    Код (Text):
    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. geher

    geher Гуру

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

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

    FunApple Нуб

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


    Код (Text):
    D:\Arduino\Scetches\libraries\Adafruit_SSD1306\Adafruit_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:\Arduino\Scetches\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:28:0:
    D:\Arduino\Scetches\libraries\Adafruit_SSD1306\Adafruit_SSD1306.h:152:8: error: candidate is: void Adafruit_SSD1306::dim(uint8_t)
      void dim(uint8_t contrast);
            ^
    Ошибка компиляции.
     
    Эх, не получается у меня что-либо сделать без проблем..
     
  4. geher

    geher Гуру

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

    FunApple Нуб

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