Skocz do zawartości

LCD IC2 4x20 wyświetla tylko pierwsze litery.


Pomocna odpowiedź

 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 przez Kenshin
Link to post
Share on other sites

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.

Link to post
Share on other sites
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

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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?

 

Link to post
Share on other sites
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 

 

Link to post
Share on other sites
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.

 

Link to post
Share on other sites

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...

 

Link to post
Share on other sites
(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 przez Kenshin
Link to post
Share on other sites

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 ) */

 

Link to post
Share on other sites

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 przez Cydek
Link to post
Share on other sites
(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 przez Kenshin
Link to post
Share on other sites
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.

Link to post
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.