Skocz do zawartości

LCD IC2 4x20 wyświetla tylko pierwsze litery.


Pomocna odpowiedź

Ok dalej walczę.Zrobiłem menu i usiłuje połączyć z grą. W grze chce zrobić tablicę. Z regułami gry.  Np strit=1,2,3,4,5 lub 2,3,4,5,6 to 150 punktów Tyle już mam zrobione do gry w 1000.

#include <Wire.h>
#include <LiquidCrystal_I2C_Hangul.h>
LiquidCrystal_I2C_Hangul lcd(0x27, 20, 4);

byte przyciskPrawo = 0;
byte przyciskLewo = 0;
byte przyciskOK = 0;
byte ekran = 0;
byte iloscGraczy = 0;
byte stanOK = 0;
byte stanLewo = 0;
byte stanPrawo = 0;
byte gra = 0;
//ś
byte znak0[8] = {
  B00010,
  B00100,
  B01110,
  B10000,
  B01110,
  B00001,
  B11110,
  B00000
};
//ć
byte znak1[8] = {
  B00010,
  B00100,
  B01110,
  B10000,
  B10000,
  B10001,
  B01110,
  B00000
};
//ó
byte znak2[8] = {
  B00010,
  B00100,
  B01110,
  B10001,
  B10001,
  B10001,
  B01110,
  B00000
};
//ż
byte znak3[8] = {
  B00100,
  B00000,
  B11111,
  B00010,
  B00100,
  B01000,
  B11111,
  B00000
};
//ę
byte znak4[8] = {
  B00000,
  B01110,
  B10001,
  B11111,
  B10000,
  B01110,
  B00010,
  B00001
};

int losowaLiczba0;
int losowaLiczba1;
int losowaLiczba2;
int losowaLiczba3;
int losowaLiczba4;
int wynik;
int tura;
int rzut;
int suma;
int gracz;
int losowaLiczba[5];

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.clear(); // zerowanie wyświetlacza
  pinMode(2, INPUT_PULLUP); // przycisk prawo
  pinMode(3, INPUT_PULLUP);// przycisk OK
  pinMode(4, INPUT_PULLUP); //przycisk lewo
  lcd.createChar(0, znak0);
  lcd.createChar(1, znak1);
  lcd.createChar(2, znak2);
  lcd.createChar(3, znak3);
  lcd.createChar(4, znak4);

}

void loop()
{
  przyciski();
  if (ekran == 0)
  {
    powitanie();
  }
  if (ekran == 1)
  {
    wyborIlosciGraczy();
  }
  if (ekran == 2)
  {
    ilosciGraczy();
  }
  
}

void powitanie()
{

  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("    Naci");
  lcd.print((char)0);
  lcd.print("nij OK");

  if (przyciskOK == 1 && stanOK == 0)
  {
    stanOK = 1;
  }
  if (przyciskOK == 0 && stanOK == 1)
  {
    stanOK = 0;
    ekran = 1;
  }

}
void przyciski()
{
  if (digitalRead (2) == LOW)
  {
    delay (20);
    if (digitalRead (2) == LOW)
    {
      przyciskPrawo = 1;
    }
  }
  else
  {
    przyciskPrawo = 0;
  }
  if (digitalRead (3) == LOW)
  {
    delay (20);
    if (digitalRead (3) == LOW)
    {
      przyciskOK = 1;
    }
  }
  else
  {
    przyciskOK = 0;
  }
  if (digitalRead (4) == LOW)
  {
    delay (20);
    if (digitalRead (4) == LOW)
    {
      przyciskLewo = 1;
    }
  }
  else
  {
    przyciskLewo = 0;
  }
}

void wyborIlosciGraczy()
{

  lcd.setCursor(0, 0);
  lcd.print("Wybierz Ilo");
  lcd.print((char)0);
  lcd.print((char)1);
  lcd.print(" Graczy");
  lcd.setCursor(0, 1);
  lcd.print("Liczba Graczy:");
  lcd.setCursor(14, 1);
  lcd.print(iloscGraczy);
  lcd.setCursor(0, 2);
  lcd.print("    Naci");
  lcd.print((char)0);
  lcd.print("nij OK  ");
  lcd.setCursor(0, 3 );
  lcd.print("Zatwierd");
  lcd.print((char)3);
  lcd.print("    OK");
  if (przyciskPrawo == 1 && stanPrawo == 0 && iloscGraczy < 5)
  {
    stanPrawo = 1;
  }
  if (przyciskPrawo == 0 && stanPrawo == 1)
  {
    stanPrawo = 0;
    iloscGraczy = iloscGraczy + 1;
  }
  if (przyciskLewo == 1 && stanLewo == 0 && iloscGraczy > 2)
  {
    stanLewo = 1;
  }
  if (przyciskLewo == 0 && stanLewo == 1)
  {
    stanLewo = 0;
    iloscGraczy = iloscGraczy - 1;
  }
  if (przyciskOK == 1 && stanOK == 0)
  {
    stanOK = 1;
  }
  if (przyciskOK == 0 && stanOK == 1)
  {
    stanOK = 0;
    ekran = 2;
  }
}
void ilosciGraczy()
{

  lcd.setCursor(0, 0);
  lcd.print("Wybrano     Graczy  ");
  lcd.setCursor(9, 0);
  lcd.print(iloscGraczy);
  lcd.setCursor(0, 1);
  lcd.print("Rozpocznij  gr");
  lcd.print((char)4);
  lcd.setCursor(0, 2);
  lcd.print("    Naci");
  lcd.print((char)0);
  lcd.print("nij OK  ");
  lcd.setCursor(0, 3 );
  lcd.print("Powodzenia          ");

  if (przyciskOK == 1 && stanOK == 0)
  {
    stanOK = 1;
  }
  if (przyciskOK == 0 && stanOK == 1)
  {
    stanOK = 0;
    ekran = 0;

 
   
      lcd.setCursor(0, 0);
      lcd.print("Gracz:  ");
      lcd.backlight(); // zalaczenie podswietlenia
      lcd.setCursor(9, 0);
      lcd.print("1-2-3-4-5.");
      lcd.setCursor(0, 2);
      lcd.print("Wynik Gracza:");

      lcd.setCursor(0, 0);
      lcd.print("Gracz: ");
      lcd.setCursor(6, 0);
      lcd.print(gracz);
      lcd.setCursor(0, 3);
      lcd.print("Suma Punkt");//Suma punktów
      lcd.print((char)4);
      lcd.print("w:");

      lcd.setCursor(0, 1);
      lcd.print("Rzut:");
      lcd.setCursor(5, 1);
      lcd.print(rzut);

      rzut = 0;
      rzut = rzut + 1;
      gracz = 0;
      gracz = gracz + wynik;
      tura = 0;

      {
        delay(20);
        {
          for (int i = 0; i < 5; i++)
          {
            losowaLiczba[i] = random(1, 7);
            lcd.setCursor(i + i + 9, 1);
            lcd.print(losowaLiczba[i]);
          }

          for (int i = 0; i < 5; i++)
            wynik += losowaLiczba[i];  //suma tablicy losowaLiczba

          lcd.setCursor(15, 2);
          lcd.print(wynik);
          wynik = 0;

          lcd.setCursor(15, 3);
          lcd.print(suma + wynik);
          suma = wynik + suma;
          suma = 0;

        }
      }
    }
  }

 

  • 1 rok później...

Sprawdźcie, czy magistrala i2c jest na pewno do wyświetlacza z daną ilością znaków. Gdy do LCD np. 4x20 przylutujecie i podłączycie magistrale i2c do wyświetlacza mp. 2x16,nie będzie działała poprawnie. 

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...