Ошибка компиляции для платы Arduino Nano при использовании Adafruit GFX

Почему это происходит со мной?? Я должен уложиться в крайний срок, пожалуйста, помогите!! Вот мой код.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Ширина OLED-дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота OLED-дисплея, в пикселях

// Декларация для дисплея SSD1306, подключенного с помощью программного SPI (случай по умолчанию):
#define OLED_MOSI   11
#define OLED_CLK   12
#define OLED_DC    9
#define OLED_CS    8
#define OLED_RESET 10
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);
void setup() 
{
  Serial.begin(9600);

  // SSD1306_SWITCHCAPVCC = генерировать внутреннее напряжение дисплея от 3,3 В
  if(!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Не продолжайте, цикл бесконечен
}


 
  display.display();
  delay(2000); 

  
  display.clearDisplay();

  
  display.drawPixel(10, 10, SSD1306_WHITE);

  
  display.display();
  delay(2000);
  display.invertDisplay(true);
  delay(1000);
  display.invertDisplay(false);
  delay(1000);
  
  
  }
void loop()
{
drawLine(20,60,5,50,256);


  
}

Ошибка

C:\Users\hp\AppData\Local\Temp\ccyB6dO1.ltrans0.ltrans.o: В функции петля': C:\Users\hp\Desktop\Sunfox\Sunfox\BP_Plus_ECG\February_11\OLED_Testing_w_Adafruit\Test_2\Test_2/Test_2.ino:51: неопределенная ссылка на DrawLine(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int)' collect2.exe: ошибка: ld вернул 1 статус выхода статус выхода 1 Ошибка компиляции для платы Arduino Nano.

, 👍0

Обсуждение

Добрый сэр @MichelKeijzers что это вообще значит?, @Shridhar Sharma

Я дам ответ., @Michel Keijzers

@MichelKeijzers Но я использую Adafruits, встроенный в библиотеку. Я думал, что они сделали бы это для меня., @Shridhar Sharma

Сначала я думал, что вы хотите создать свою собственную функцию, но я сделал ответ, чтобы использовать библиотеку вместо вашей собственной функции., @Michel Keijzers


1 ответ


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

1

В настоящее время вы определили прямое объявление для DrawLine, однако я предполагаю, что вы хотите вызвать метод (функцию) внутри display.

Так что меняйся

drawLine(20,60,5,50,256);

в

display.drawLine(20,60,5,50,256);

И вы можете удалить прямое объявление, потому что этот метод уже определен в библиотеке.

void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color);

Обратите внимание, что если вы вызываете DrawLine без экземпляра (который является display), то компоновщик пытается найти функцию DrawLine, которую он не может найти, поэтому вы получаете ошибку компоновщика (см. ld, возвращенный в вашей ошибке, вместе с неопределенной ссылкой).

,