Использовать внешнюю библиотеку в моей библиотеке Arduino - PullRequest
0 голосов
/ 27 июня 2018

Я хотел бы создать личную библиотеку, где я использую другую. В своем коде я объявил и инициализировал библиотеку в приватной части.

Но у меня есть ошибка '((LCD*)this)->LCD::lcd' does not have class type.

Я написал несколько версий, но ничего не изменилось. В лучшем случае я могу отобразить print Test01 и test02.

.h

#ifndef LCD_h
#define LCD_h

#include <LiquidCrystal_I2C.h>

class LCD{
  public:
    LCD();
    void firstLine();
    void secondLine(float tempInCelsius);

  private:
    LiquidCrystal_I2C lcd(0x27, 16, 2);
};

#endif

.cpp

#include "LCD.h"
#include <LiquidCrystal_I2C.h>

LCD::LCD(){
    Serial.begin(9600);
    Serial.println("Test 01");
    lcd.init();
    lcd.backlight();
    lcd.setCursor(0, 0);
}

void LCD::secondLine(float tempInCelsius){
    Serial.println("Test 03");
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("T = ");
    lcd.print(tempInCelsius);
}

.ino

#include "LCD.h"


LCD CrystalLCD();

void setup(void)
{
    Serial.begin(9600);
    Serial.println("Test 02");
}

void loop(void)
{
    CrystalLCD.secondLine(1.40);
}

Я дам вам также полное сообщение об ошибке.

[Starting] Verify sketch - arduino.ino
Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
In file included from /Users/WorkSpace/Make/RucheChaufante/ino/LCD.cpp:1:0:
LCD.h:13: error: expected identifier before numeric constant
     LiquidCrystal_I2C lcd(0x27, 16, 2);
                           ^
LCD.h:13: error: expected ',' or '...' before numeric constant
/Users/WorkSpace/Make/RucheChaufante/ino/arduino.ino: In constructor 'LCD::LCD()':
arduino:9: error: '((LCD*)this)->LCD::lcd' does not have class type
     Serial.println("Test 02");
     ^
arduino:10: error: '((LCD*)this)->LCD::lcd' does not have class type
 }
     ^
arduino:11: error: '((LCD*)this)->LCD::lcd' does not have class type

     ^
/Users/WorkSpace/Make/RucheChaufante/ino/arduino.ino: In member function 'void LCD::secondLine(float)':
arduino:16: error: '((LCD*)this)->LCD::lcd' does not have class type
arduino:17: error: '((LCD*)this)->LCD::lcd' does not have class type
arduino:18: error: '((LCD*)this)->LCD::lcd' does not have class type
arduino:19: error: '((LCD*)this)->LCD::lcd' does not have class type
/Users/WorkSpace/Make/RucheChaufante/ino/arduino.ino: In function 'void loop()':
arduino:14: error: request for member 'secondLine' in 'CrystalLCD', which is of non-class type 'LCD()'
     CrystalLCD.secondLine(1.40);
                ^
exit status 1
[Error] Exit with code=1

1 Ответ

0 голосов
/ 27 июня 2018

Вы не можете инициализировать членов в объявлении класса. Попробуйте с:

class LCD
{   
  public:
    LCD();
    void firstLine();
    void secondLine(float tempInCelsius);

  private:
    LiquidCrystal_I2C lcd; 
};

Но вы можете инициализировать такие члены ( должны , если они не предоставляют конструктор по умолчанию) в конструкторе (ах). Попробуйте с:

LCD::LCD() : lcd(0x27, 16, 2) {
    Serial.begin(9600);
    Serial.println("Test 01");
    lcd.init();
    lcd.backlight();
    lcd.setCursor(0, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...