Kenshin Napisano Grudzień 15, 2020 Udostępnij Napisano Grudzień 15, 2020 (edytowany) LCD IC2 4x20 wyświetla tylko pierwsze litery. Wina bibliotek? Mam najnowsze. Chce zrobić menu na wyświetlaczu ale coś nie tak. Pierwsze litery tylko pokazuje. Wyświetlacz LCD 20x4 z IC2 z przylutowanym na stale/Kupiony taki.Myślę o więcej grach. Tysiąc,Pokier i coś jeszcze. #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.setCursor(0,0); lcd.print("Witam Wszystkich!"); lcd.setCursor(0,1); lcd.print("Gra w 1000!"); lcd.setCursor(0,2); lcd.print("Kenshin Himura"); lcd.setCursor(0,3); lcd.print("Menu"); } void loop() { } Edytowano Grudzień 15, 2020 przez Kenshin Cytuj Link do komentarza Share on other sites More sharing options...
bjrk Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 Tylko pierwsze litery czyli "WGKM", czy też "WGKMenu" ? Jeśli to drugie, to zrobił co mu kazano, a nie "co autor miał na myśli". Zastanów się jaka jest rola setCursor, co oznaczają jego parametry, skąd print wie gdzie ma zacząć pisać? Jeśli wyświetlił "WGKM" to nie wiem. Spróbuj zostawić tylko jedno lcd.setCursor i jedno lcd.print (resztę tymczasowo zakomentuj) i pokaż wynik. Powodzenia i wytrwałości. Cytuj Link do komentarza Share on other sites More sharing options...
Kenshin Grudzień 15, 2020 Autor tematu Udostępnij Grudzień 15, 2020 23 minuty temu, bjrk napisał: Tylko pierwsze litery czyli "WGKM", czy też "WGKMenu" ? Jeśli to drugie, to zrobił co mu kazano, a nie "co autor miał na myśli". Zastanów się jaka jest rola setCursor, co oznaczają jego parametry, skąd print wie gdzie ma zacząć pisać? Jeśli wyświetlił "WGKM" to nie wiem. Spróbuj zostawić tylko jedno lcd.setCursor i jedno lcd.print (resztę tymczasowo zakomentuj) i pokaż wynik. Powodzenia i wytrwałości. setCursor kursor ustawia pozycję kursora 0,0 to pierwsza linia i pierwsza pozycja lini. Pisze tylko W G K M Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 "Najnowsza wersja" ale jakiej biblioteki? Bo część jest walnięta (między innymu LiquidCrystal_I2C). Użyj NewLiquidCrystal https://github.com/fmalpartida/New-LiquidCrystal Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Kenshin Grudzień 15, 2020 Autor tematu Udostępnij Grudzień 15, 2020 36 minut temu, ethanak napisał: "Najnowsza wersja" ale jakiej biblioteki? Bo część jest walnięta (między innymu LiquidCrystal_I2C). Użyj NewLiquidCrystal https://github.com/fmalpartida/New-LiquidCrystal Tam jest więcej bibliotek i po zmianie wyskakuje lcd.init(); Zmieniłem na lcd.begin(); ale błąd.Zmieniłem na lcd.begin(); i coś nie tak. Użycie biblioteki New-LiquidCrystal-master z folderu C:\Users\Orion\Documents\Arduino\libraries\New-LiquidCrystal-master (legacy) Użycie biblioteki Wire w wersji 1.0 z folderu: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire exit status 1 no matching function for call to 'LiquidCrystal_I2C::begin()' To wyskakuje. Skasować jakeś biblioteki? Cytuj Link do komentarza Share on other sites More sharing options...
bjrk Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 (edytowany) @Kenshin, Przepraszam, pomyliłem kolejność parametrów w lcd.setCursor i wyszło mi to co wyszło. Edytowano Grudzień 15, 2020 przez bjrk Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 20 minut temu, Kenshin napisał: Zmieniłem na lcd.begin(); ale błąd A spróbowałeś skompilować choćby jakiś przykład? Sprawdź, jak się skompiluje to masz błąd w programie i trzeba podpatrzeć, jak się nie skompiluje to pokaż co pisze kompilator i będziemy kombinować dalej. U mnie działa coś takiego: LiquidCrystal_I2C lcd(I2C_LCD, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // i w setup lcd.begin(16,2); // inny wyświetlacz co prawda ale ten sam interfejs Cytuj Link do komentarza Share on other sites More sharing options...
Kenshin Grudzień 15, 2020 Autor tematu Udostępnij Grudzień 15, 2020 51 minut temu, ethanak napisał: A spróbowałeś skompilować choćby jakiś przykład? Sprawdź, jak się skompiluje to masz błąd w programie i trzeba podpatrzeć, jak się nie skompiluje to pokaż co pisze kompilator i będziemy kombinować dalej. U mnie działa coś takiego: LiquidCrystal_I2C lcd(I2C_LCD, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // i w setup lcd.begin(16,2); // inny wyświetlacz co prawda ale ten sam interfejs Ja mam tak. #include <FastIO.h> #include <I2CIO.h> #include <LCD.h> #include <LiquidCrystal.h> #include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C_ByVac.h> #include <LiquidCrystal_SI2C.h> #include <LiquidCrystal_SR.h> #include <LiquidCrystal_SR1W.h> #include <LiquidCrystal_SR2W.h> #include <LiquidCrystal_SR3W.h> #include <SI2CIO.h> #include <SoftI2CMaster.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display void setup() { lcd.begin(20,4); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.setCursor(0,0); lcd.print("Witam Wszystkich!"); lcd.setCursor(0,1); lcd.print("Gra w 1000!"); lcd.setCursor(0,2); lcd.print("Kenshin Himura"); lcd.setCursor(0,3); lcd.print("Menu"); } void loop() { } I błąd przy kompilacji na arduino mega i arduino mega 2560. Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 Czyli masz podłączone siedem różnych wyświetlaczy? Weź wreszcie popatrz na przykład czy tam są te wszystkie pliki nagłówkowe powłączane, czy może tylko jeden... Cytuj Link do komentarza Share on other sites More sharing options...
Kenshin Grudzień 15, 2020 Autor tematu Udostępnij Grudzień 15, 2020 (edytowany) 2 godziny temu, ethanak napisał: Czyli masz podłączone siedem różnych wyświetlaczy? Weź wreszcie popatrz na przykład czy tam są te wszystkie pliki nagłówkowe powłączane, czy może tylko jeden... Znalazłem taki program i wyświetla całość. Tylko tu jest na #include <hd44780.h> Trudniejszy do opanowania. Wyjaśnienia po angelsku. A ja angelskiego nie znam. Próbowałem wszystkie biblioteki co podałeś na lcd 20x4 z IC2 i mimo zmian albo wyświietla pierwsze litery albo dwa paski. Na tym programie dobrze wyświetla czyli wyświetlacz dobry. UDOSTĘPNIJ TWOJE BIBLIOTEKI NA KTÓRYCH CHODZI DOBRZE.. /*-----( Import needed libraries )-----*/ #include <Wire.h> #include <hd44780.h> // main hd44780 header #include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header /*-----( Declare Constants )-----*/ // LCD geometry const int LCD_COLS = 20; const int LCD_ROWS = 4; /*-----( Declare objects )-----*/ hd44780_I2Cexp lcd; // declare lcd object: auto locate & auto config expander chip /*-----( Declare Variables )-----*/ int status; void setup() /*----( SETUP: RUNS ONCE )----*/ { status = lcd.begin(LCD_COLS, LCD_ROWS); if(status) // non zero status means it was unsuccesful { // hd44780 has a fatalError() routine that blinks an led if possible // begin() failed so blink error code using the onboard LED if possible hd44780::fatalError(status); // does not return } Serial.begin(9600); // Print a message to the LCD. lcd.setCursor(0, 0); lcd.print(" Witam Wszystkich"); delay(1500); lcd.setCursor(0, 1); lcd.print(" Gra w 1000"); lcd.setCursor(0, 2); lcd.print(" Kenshin Himura"); lcd.setCursor(0, 3); lcd.print(" MENU"); }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { { // when characters arrive over the serial port... if (Serial.available()) { // wait a bit for the entire message to arrive delay(100); // clear the screen lcd.clear(); // read all the available characters while (Serial.available() > 0) { // display each character to the LCD lcd.write(Serial.read()); } } } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ /* ( THE END ) */ Edytowano Grudzień 15, 2020 przez Kenshin Cytuj Link do komentarza Share on other sites More sharing options...
Kenshin Grudzień 18, 2020 Autor tematu Udostępnij Grudzień 18, 2020 Szukam prostego przykładowego menu na wyświetlacz pod bibliotekę hd44780. Próbowałem inne na LiquidCrystal_I2C.h ale nie wyświetla. Wyświetla dwa paski. Pomocy,Plisss. I co zmienić i poprawić? Uczę się na przykładach. #include <Wire.h> #include <hd44780.h> // main hd44780 header #include <hd44780ioClass/hd44780_I2Cexp.h> // i2c expander i/o class header #define PRZYCISKUp 12 #define PRZYCISKDown 11 #define PRZYCISKOK 10 #define PRZYCISKRzut 9 #define PRZYCISK 7 #define wyswietlacz //#define CZAS_WYSWIETLANIA_LICZBY 2000 int ostatniStan = LOW; //BO PULLUP int losowaLiczba0; int losowaLiczba1; int losowaLiczba2; int losowaLiczba3; int losowaLiczba4; int licznik = 0; int cyfra; int r = 0; int s = 0; int t = 0; int z = 0; int x = 0; int gracz1; int gracz2; int gracz3; int gracz4; /*-----( Declare Constants )-----*/ // LCD geometry const int LCD_COLS = 20; const int LCD_ROWS = 4; /*-----( Declare objects )-----*/ hd44780_I2Cexp lcd; // declare lcd object: auto locate & auto config expander chip /*-----( Declare Variables )-----*/ int status; void setup() /*----( SETUP: RUNS ONCE )----*/ { status = lcd.begin(LCD_COLS, LCD_ROWS); if(status) // non zero status means it was unsuccesful { // hd44780 has a fatalError() routine that blinks an led if possible // begin() failed so blink error code using the onboard LED if possible hd44780::fatalError(status); // does not return } Serial.begin(9600); // Print a message to the LCD. lcd.setCursor(0, 0); lcd.print(" Witam Wszystkich"); lcd.setCursor(0, 1); lcd.print(" Gra w 1000"); lcd.setCursor(0, 2); lcd.print(" Kenshin Himura"); lcd.setCursor(0,3 ); lcd.print(" 2020"); delay(5000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Wybor Ilosci Graczy:"); delay(5000); lcd.clear(); lcd.setCursor(0,0); lcd.print("Graczy 2. "); lcd.setCursor(0,1); lcd.print(" 3. "); lcd.setCursor(0,2); lcd.print(" 4. "); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Gracz 1- "); lcd.setCursor(0, 1); lcd.print("Rzut koscmi: "); lcd.setCursor(0,2 ); lcd.print("Kosci:1 2 3 4 5"); lcd.setCursor(0,3 ); lcd.print("Wynik: = " ); delay(5000); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Gracz 1- "); lcd.setCursor(0, 1); lcd.print("Gracz 2-"); lcd.setCursor(0, 2); lcd.print("Gracz 3-"); lcd.setCursor(0, 3); lcd.print("Gracz 4-"); lcd.setCursor(8, 0); lcd.print(" 44"); lcd.setCursor(8, 1); lcd.print(" 60"); lcd.setCursor(8, 2); lcd.print(" 120"); lcd.setCursor(8, 3); lcd.print("1000"); }/*--(end setup )---*/ void loop() /*----( LOOP: RUNS CONSTANTLY )----*/ { lcd.print(licznik); licznik++; r = random(1, 7); Serial.println(r); s = random(1, 7); Serial.println(s); t = random(1, 7); Serial.println(t); Serial.println(r); z = random(1, 7); Serial.println(); x = random(1, 7); Serial.println(x); lcd.backlight(); // zalaczenie podswietlenia delay(100); //W górę while (digitalRead(PRZYCISKUp) == LOW){} { digitalWrite(PRZYCISKUp, LOW); Serial.print(PRZYCISKUp, HIGH); while (digitalRead(PRZYCISKUp) == HIGH){} digitalWrite(PRZYCISKUp, HIGH); Serial.print(PRZYCISKUp, LOW); //W dół while (digitalRead(PRZYCISKDown) == LOW){} { digitalWrite(PRZYCISKDown, LOW); Serial.print(PRZYCISKDown, HIGH); while (digitalRead(PRZYCISKDown) == HIGH){} digitalWrite(PRZYCISKDown, HIGH); Serial.print(PRZYCISKDown, LOW); //Zatwerdzenie while (digitalRead(PRZYCISKOK) == LOW){} { digitalWrite(PRZYCISKOK, LOW); Serial.print(PRZYCISKOK, HIGH); while (digitalRead(PRZYCISKOK) == HIGH){} digitalWrite(PRZYCISKOK, HIGH); Serial.print(PRZYCISKOK, LOW); //Rzut kość while (digitalRead(PRZYCISKRzut) == LOW){} { digitalWrite(PRZYCISKRzut, LOW); Serial.print(PRZYCISKRzut, HIGH); while (digitalRead(PRZYCISKRzut) == HIGH){} digitalWrite(PRZYCISKRzut, HIGH); Serial.print(PRZYCISKRzut, LOW); losowaLiczba0 = random(1, 7); Serial.println(losowaLiczba0,r); losowaLiczba1 = random(1, 7); Serial.println(losowaLiczba1); losowaLiczba1 = random(1, 7); Serial.println(losowaLiczba2); losowaLiczba3 = random(1, 7); Serial.println(losowaLiczba3); losowaLiczba4 = random(1, 7); Serial.println(losowaLiczba4); if (digitalRead(PRZYCISK) ==LOW) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk delay(PRZYCISK);//Czekaj na naciśnięcie przycisku wyswietlacz(losowaLiczba0); //Wyswietl wartosc na wyswietlaczu wyswietlacz(losowaLiczba1); //Wyswietl wartosc na wyswietlaczu wyswietlacz(losowaLiczba2); //Wyswietl wartosc na wyswietlaczu wyswietlacz(losowaLiczba3); //Wyswietl wartosc na wyswietlaczu wyswietlacz(losowaLiczba4); //Wyswietl wartosc na wyswietlaczu lcd.clear(); } } } } } }/* --(end main loop )-- */ /*-----( Declare User-written Functions )-----*/ /* ( THE END ) */ Cytuj Link do komentarza Share on other sites More sharing options...
Kenshin Grudzień 18, 2020 Autor tematu Udostępnij Grudzień 18, 2020 Poprawiłem delay na 1000 i przeniosłem sterowanie przyciskami do void loop. Cytuj Link do komentarza Share on other sites More sharing options...
Cydek Grudzień 28, 2020 Udostępnij Grudzień 28, 2020 (edytowany) Zacznij od samego początku. Skasuj te wszystkie dziwne biblioteki, co je poinstalowałeś z darkwebów 😉. Zainstaluj tą : https://github.com/johnrickman/LiquidCrystal_I2C. Sam dzisiaj to robiłem, bo miałem dokładnie 1:1 taki sam problem. Ogólnie chodziło o to, że te starsze wersje były jakieś rąbnięte i wypisywały tylko pierwszy znak. Obsługa jest bardzo prosta (taka sama jak przy pierwszym Twoim poście na ten temat) Pozdro Edytowano Grudzień 28, 2020 przez Cydek Cytuj Link do komentarza Share on other sites More sharing options...
Kenshin Styczeń 1, 2021 Autor tematu Udostępnij Styczeń 1, 2021 (edytowany) Zrobiłem. Zmieniłem bibliotekę na LCD i wyświetla całość a dzisiaj opanowałem polskie znaki. Problem rozwiązany. Jak zakończyć post? Edytowano Styczeń 1, 2021 przez Kenshin Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Styczeń 2, 2021 Udostępnij Styczeń 2, 2021 14 godzin temu, Kenshin napisał: Jak zakończyć post? Nie ma takiej potrzeby, nie mamy zwyczaju zamykania tematów na tym forum 🙂 Najlepiej byłoby, gdybyś podzielił się dokładnym rozwiązaniem problemu. Na pewno będzie to pomocne dla osób, które trafią tu w przyszłości. Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!