• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Podział projektu na pliki - problem z LCD_I2C
#1
Witam serdecznie,
Bardzo proszę o pomoc przy podziale projektu na pliki. Działający kod bez podziału na pliki wygląda tak:

Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);
void lcd_splash(void);


void setup() {
 lcd.init();
 lcd.backlight(); //podswietlenie ON
 
 lcd_splash();
}

void loop() {
}

void lcd_splash(void)
[size=small][font=Monaco, Consolas, Courier, monospace]{[/font][/size]
[size=small][font=Monaco, Consolas, Courier, monospace]  lcd.setCursor(0, 0);[/font][/size]
[size=small][font=Monaco, Consolas, Courier, monospace]  lcd.print("Testowo = ");[/font][/size]
}

Zależy mi na tym, aby deklaracja i definicja funkcji lcd_splash() znalazła się w oddzielnym pliku, a wywołanie w programie głównym. Robię zatem tak:

Zmieniam kod głównego programu na taki:
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "additives.h"

//LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
 lcd.init();
 lcd.backlight(); //podswietlenie ON
 
 lcd_splash();

}


void loop() {

}



Tworzę plik additives.h, w którym umieszczam kod:
Kod:
// additives.h
#ifndef _ADDITIVES_h
#define _ADDITIVES_h

#if defined(ARDUINO) && ARDUINO >= 100
 #include "arduino.h"
#else
 #include "WProgram.h"
#endif

extern LiquidCrystal_I2C lcd(0x27, 20, 4);
void lcd_splash(void);

#endif

Następnie tworzę plik additives.cpp:
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "additives.h"


//LiquidCrystal_I2C lcd(0x27, 20, 4);
void lcd_splash(void)
{
 lcd.setCursor(0, 0);
 lcd.print("Testowo = ");
}

Niestety, kompilacja nie przebiega pomyślnie. Wszelkie manipulacja z tworzeniem obiektu lcd w różnych miejscach nie przynoszą efektów. Czy może ktoś podpowiedzieć, gdzie popełniam błąd i jak to naprawić?
Z góry dziękuję za odpowiedź.

Pozdrawiam
 
Odpowiedź
#2
A gdzie w pliku masz zalaczona biblioteke do lcd? Zreszta czytaj co pisze po kompilacji, na samej gorze jest blad.

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#3
(10-03-2019, 16:01)wchpikus napisał(a): A gdzie w pliku masz zalaczona biblioteke do lcd? Zreszta czytaj co pisze po kompilacji, na samej gorze jest blad.

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Biblioteka do LCD jest załączona przez:
#include <Wire.h> //obsluga i2c
#include <LiquidCrystal_I2C.h> // obsluga LCD I2C

To jest kod, który działa poprawnie:
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//#include "additives.h"

LiquidCrystal_I2C lcd(0x27, 20, 4);
void lcd_splash(void);


void setup() {
 lcd.init();
 lcd.backlight(); //podswietlenie ON
 
 lcd_splash();

}


void loop() {

}

void lcd_splash(void)
{
 lcd.setCursor(0, 0);
 lcd.print("Testowo = ");
}
W poprzednim poście kod popsuło formatowanie strony.

I teraz jak funkcję lcd_splash() przenieść do oddzielnego pliku, żeby nie zaśmiecać programu głównego.

Pozdrawiam...
 
Odpowiedź
#4
A jaki masz blad kompilacji?

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#5
(10-03-2019, 17:42)wchpikus napisał(a): A jaki masz blad kompilacji?

Wysłane z mojego SM-G950F przy użyciu Tapatalka

sketch\additives.cpp.o (symbol from plugin): In function `lcd':

(.text+0x0): multiple definition of `lcd'

sketch\_08_LCD.ino.cpp.o (symbol from plugin)Sad.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Błąd kompilacji dla płytki Arduino Leonardo.
 
Odpowiedź
#6
No to widac co masz zle

multiple definition of `lcd'.


Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#7
Zatem co jest źle?
 
Odpowiedź
#8
W pliku głównym dołączasz bibliotekę LiquidCrystal_I2C.h, oraz w pliku additives.cpp też ją dołączasz.
A kompilator Cię o tym fakcie informuje. Nie rozumiem, czego nie rozumiesz?
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości