logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino+LCD+I2C brak kompilacji

mossa125125 31 Sty 2017 19:01 6783 18
  • #1 16243096
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    Witam
    Po kilku dniach szukania po sieci konkretnego rozwiązania problemu postanowiłem poprosić o pomoc tu na forum.
    Do rzeczy, niedawno zakupiłem w celach edukacyjnych dla syna lat 12 płytkę arduino 2560 i kilka gadżetów. Wszystko szło dobrze w przerabianiu poszczególnych projektów, aż do momentu kiedy doszliśmy do wyświetlacza LCD 2x16, standardowy tylko, że zintegrowany z I2C. Podłaczenie jest banalnie proste. Następnie sprawdziłem jaki adres posiada I2C programem scanner. Wyszło na to że adres to 0x27. No i od tego momentu zaczęły się schody. Ściągnąłem odpowiednią bibliotekę, zainstalowałem według instrukcji, których jest sporo w necie i w żaden sposób nie mogę przejść przez kompilację kodu programu. Kodów używałem różnych i każda próba kompilacji kończy się poniższym komunikatem.
    W imieniu swoim i syna proszę o pomoc.


    Arduino:1.8.1 (Windows 7), Płytka:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    C:\Users\Krzyś\Desktop\Documents\Miki\arduino-1.8.1-windows\arduino-1.8.1\libraries\LiquidCrystal\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    compilation terminated.

    exit status 1
    Błąd kompilacji dla płytki Arduino/Genuino Mega or Mega 2560.
  • #2 16243317
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    Witam,
    z komunikatu, wynika, że nie może znaleźć biblioteki "Wire", pewnie nie ma jej tam, gdzie się jej spodziewa.

    Pozdrawiam
  • #3 16243319
    Slawek K.
    Poziom 35  
    Posty: 3020
    Pomógł: 259
    Ocena: 1303
    Pokaz kod który chcesz skompilować.

    Pozdr
  • #4 16243348
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    Oto przykładowy (jeden z wielu kodów) który próbowałem kompilować:

    #include <Wire.h>;
    #include <LiquidCrystal_I2C.h>;

    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Ustawienie adresu ukladu na 0x27
    void setup()
    {
    lcd.begin(16,2);

    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("Hello, world!"); // Tekst który będzie wyświetlany w pierwszej linijce wyświetlacza
    lcd.setCursor(0,1);
    lcd.print("homeguard24.pl"); // Tekst który będzie wyświetlany w drugiej linijce wyświetlacza

    }

    void loop()
    {
    lcd.setCursor(0,0);
    lcd.print("Hello, world!");
    lcd.setCursor(0,1);
    lcd.print("homeguard24.pl");
    }


    A co do biblioteki Wire to miałem takie podejrzenia że jej nie ma tam gdzie powinna być, tylko że w innych projektach które robiliśmy też było odniesienie do tej biblioteki i wszystko hulało. Ale warto chyba iść tym tropem.
  • #5 16243375
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    Czort wie, czy nie jest zbyt długa ścieżka dostępu ( to C:\users, itd.), niektóre programy gubią się przy zbyt długich ścieżkach dostępu (chociaż lojalnie o tym uprzedzają w dokumentacji).
    Spróbujcie może zainstalować w głównym katalogu dysku.

    Pozdrawiam
  • #6 16243379
    Slawek K.
    Poziom 35  
    Posty: 3020
    Pomógł: 259
    Ocena: 1303
    Na to wyglada, ze nie moze znaleźć biblioteki Wire. Nie trzeba średnikow bo dyrektywach #include

    Pozdr
  • #7 16243408
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    Teraz przy próbie kompilacji tego kodu:

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

    #define I2C_ADDR 0x27 // <<----- Add your address here. Find it from I2C Scanner
    #define BACKLIGHT_PIN 3;
    #define En_pin 2;
    #define Rw_pin 1;
    #define Rs_pin 0;
    #define D4_pin 4;
    #define D5_pin 5;
    #define D6_pin 6;
    #define D7_pin 7;

    int n = 1;

    LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

    void setup()
    {
    lcd.begin (16,2); // <<----- My LCD was 16x2


    // Switch on the backlight
    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
    lcd.setBacklight(HIGH);
    lcd.home (); // go home

    lcd.print("SainSmartI2C16x2");
    }

    void loop()
    {
    // Backlight on/off every 3 seconds
    lcd.setCursor (0,1); // go to start of 2nd line
    lcd.print(n++,DEC);
    lcd.setBacklight(LOW); // Backlight off
    delay(3000);
    lcd.setBacklight(HIGH); // Backlight on
    delay(3000);
    }


    Wyswietla taki błąd:

    C:\Users\KrzyĹ›\Desktop\Documents\Arduino\lcd2\lcd2.ino:21:29: fatal error: LiquidCrystal_I2C: No such file or directory

    compilation terminated.

    exit status 1
    Błąd kompilacji dla płytki Arduino/Genuino Mega or Mega 2560.
  • #8 16243426
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    Czyli brakuje ".h"
  • #9 16243452
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    A można dostać namiary na tę bibliotekę wire.h?
  • #10 16243469
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    Moim zdaniem zamiast:
    mossa125125 napisał:
    #include <LiquidCrystal_I2C>

    powinno być:
    ... LiquidCrystal_I2C.h
    bo tej biblioteki nie widzi.
  • #11 16243482
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    Taki plik w bibliotece mam tylko, że może nie w tym formacie co trzeba, to co mam to jest plik typu H
  • #12 16243529
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    Bardzo przepraszam, w ostatniej wersji programu, w trzeciej dyrektywie "include" brakuje po prostu ".h" w nazwie biblioteki, dlatego jej nie widzi, rozszerzenie nie jest domniemane, kompilator sam go nie dodaje.

    Dodano po 4 [minuty]:

    Te błędy biorą się z tego, że wpisujesz te linie ręcznie.
    O ile pamiętam, w Arduino jest jakiś mechanizm (guzik czy menu), który służy do importowania biblioteki, wybierasz, klikasz a potrzebne linie dodają się tak jak trzeba.
  • #13 16243566
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    Nic z tego, podmieniłem na jeszcze inny kod, przeniosłem cały program na dysk C żeby ścieżka była krótka a oto efekt:

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

    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Ustawienie adresu ukladu na 0x27

    void setup()
    {
    lcd.begin(16,2);
    lcd.backlight(); // zalaczenie podwietlenia
    lcd.setCursor(0,0);
    lcd.print("LCD & I2C");
    delay(500);
    lcd.setCursor(0,1);
    lcd.print("**********");
    }

    void loop()
    {
    lcd.backlight(); // zalaczenie podswietlenia
    delay(5000);
    lcd.noBacklight(); // wylaczenie podswietlenia
    delay(5000);
    }



    C:\arduino-1.8.1-windows\arduino-1.8.1\libraries\LiquidCrystal\I2CIO.cpp:35:26: fatal error: ../Wire/Wire.h: No such file or directory

    #include <../Wire/Wire.h>

    ^

    compilation terminated.

    exit status 1
    Błąd kompilacji dla płytki Arduino/Genuino Mega or Mega 2560.
  • Pomocny post
    #14 16243733
    Slawek K.
    Poziom 35  
    Posty: 3020
    Pomógł: 259
    Ocena: 1303
    Zainstaluj sobie wersję 1.0.6 i wszystko będzie działać jak należy, z tymi najnowszymi wersjami jest wiele kłopotów.
    https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

    Pozdr
  • Pomocny post
    #15 16244063
    adasikp
    Poziom 18  
    Posty: 285
    Pomógł: 24
    Ocena: 62
    A jakby tak w pliku I2CIO.cpp zamienić #include <../Wire/Wire.h> na #include <Wire.h> to co by się wtedy stało ? notabene linia 35
    Przecież pisze że na tej ścieżce "/Wire/Wire.h: No such file or directory" niema pliku Wire.h.
    Trzeba edytować plik biblioteki zmiana kodu nic tu nie da bo deklaracja jest w bibliotece .
    Wersja NewliquidCrystal ma warunek
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #16 16244140
    krzysiek_krm
    Poziom 40  
    Posty: 4612
    Pomógł: 716
    Ocena: 599
    adasikp napisał:
    A jakby tak w pliku I2CIO.cpp zamienić #include <../Wire/Wire.h> na #include <Wire.h> to co by się wtedy stało ? notabene linia 35
    Przecież pisze że na tej ścieżce "/Wire/Wire.h: No such file or directory" niema pliku Wire.h.
    Trzeba edytować plik biblioteki zmiana kodu nic tu nie da bo deklaracja jest w bibliotece .

    To jest cokolwiek niekorzystna "właściwość" tej platformy: różne wersje IDE, różne wersje bibliotek, zgodne, niezgodne.
    Musisz albo posługiwać się najnowszymi wersjami bibliotek (czasami twórcy piszą, że najnowsza wersja zapewnia zgodność z taką to a taką wersją IDE) albo:
    rs6000 napisał:
    Zainstaluj sobie wersję 1.0.6 i wszystko będzie działać jak należy, z tymi najnowszymi wersjami jest wiele kłopotów.
  • #17 16244301
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    adasikp napisał:
    A jakby tak w pliku I2CIO.cpp zamienić #include <../Wire/Wire.h> na #include <Wire.h> to co by się wtedy stało ? notabene linia 35
    Przecież pisze że na tej ścieżce "/Wire/Wire.h: No such file or directory" niema pliku Wire.h.
    Trzeba edytować plik biblioteki zmiana kodu nic tu nie da bo deklaracja jest w bibliotece .
    Wersja NewliquidCrystal ma warunek
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    No i pomogło. Wszystko się kompiluje, ładnie wgrywa na płytkę, tylko jeszcze jeden problem powstał, otóż na wyświetlaczu nie ma tekstu który ma się wyświetlać. Wyświetlacz na zmianę kontrastu reaguje a tekstu nie ma. Będę musiał obejrzeć ten wyświetlacz pod lupą czy zimnych lutów nie ma. Mimo wszystko dzięki serdeczne za pomoc.
  • #18 16245115
    Slawek K.
    Poziom 35  
    Posty: 3020
    Pomógł: 259
    Ocena: 1303
    Zakładam, ze magistrale I2C podłączyłeś prawidłowo ? chodzi mi o linie SDA i SCL, pin 20 i 21.
  • #19 16245680
    mossa125125
    Poziom 13  
    Posty: 64
    Pomógł: 4
    Ocena: 45
    Oczywiście że prawidłowo. W sobotę będę mieć chwilkę to zabiorę wyświetlacz na warsztat.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik napotkał problemy z kompilacją kodu dla wyświetlacza LCD 2x16 z interfejsem I2C na płytce Arduino Mega 2560. Po zainstalowaniu odpowiednich bibliotek, w tym LiquidCrystal_I2C, pojawił się błąd związany z brakiem biblioteki "Wire.h". Użytkownicy forum zasugerowali sprawdzenie ścieżek dostępu oraz poprawność dyrektyw #include. Ostatecznie, zmiana wersji IDE na 1.0.6 oraz edytowanie pliku I2CIO.cpp w celu poprawienia ścieżki do biblioteki Wire rozwiązały problem kompilacji. Po wgraniu kodu na płytkę, użytkownik zauważył, że tekst nie wyświetla się na LCD, co może sugerować problemy z połączeniami lub zimnymi lutami.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA