• 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
LCD IC2 4x20 wyświetla tylko pierwsze litery
#41
(03-01-2021, 10:21)Agregacik napisał(a): Powinno działać na 6,7,8. Czy wszędzie zmieniałeś numery pinów w "void przyciski()" też?  Rezystorów nie musi być ale nie zaszkodzą. Rezystory oczywiście podciągające do +5V.
Nie chce działać na 6,7,8. Jak wpisać tabelę Układy i wartości
Układ liczy się tylko wtedy, gdy powstał w jednym rzucie. Dwójki, trójki, czwórki i szóstki liczą się jedynie w układach co najmniej trzech tych samych kości. Za każdy układ przysługuje określona liczba punktów:

jedna piątka - 5
jedna jedynka - 10
dwie piątki - 10
dwie jedynki - 20
trzy te same (z wyjątkiem jedynek) - wartość oczka razy 10
trzy jedynki - 100
cztery te same (z wyjątkiem jedynek) - wartość oczka razy 20
cztery jedynki - 200
pięć oczek po kolei (strit) - 150
pięć tych samych oczek - 1000 Próbowałem też połączyć menu z grą. I dodawać winiuk rzuto do sumy punktów. Nie wychodzi mi. W 1000 jest jeden rzut i zmiana gracza. Też mi nie wychodzi. Liczy kolejne kości ale to nie to. Dodać kolejny ekran void gra?
Kod:
#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 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;

    if (digitalRead(przyciskOK) == LOW)

    {
      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;

      }
    }
  }
}
 
Odpowiedź
#42
Zmieniłem na piny 6,7 i 8 i działa na "nano". Pytałem czy zmieniłeś piny również w podprogramie "void przyciski()"
No pewnie trzeba dodać ekran gra a może i więcej jak będzie taka potrzeba. Nie znam tej gry i nie wiem jak ma działać. Co generuje rzut kostką i iloma kostkami się "rzuca".
Ręce mi opadły jak zobaczyłem to if (digitalRead(przyciskOK) == LOW). Jest to znak, że nie rozumiesz co piszesz.
Odczyt przycisków dokonuje się tylko i wyłącznie w podprogramie "void przyciski()" i nigdzie już nie musisz badać ich stanu. Ten podprogram wywołuje się do "obrót" pętli LOOP. Stan przycisków został zamieniony na zmienne, które przyjmują stany 0 jak przyciski są nie naciśnięte i stany 1 jak przyciski są naciśnięte i w programie trzeba się posługiwać tylko tymi zmiennymi. Jest to wygodne ponieważ za każdym razem musiałbyś eliminować drganie styków a tak masz to zrobione raz. Wprawdzie przy pomocy (brrr) delay, ale tak mi było najprościej i w tym przypadku, można powiedzieć nieszkodliwie, patrząc na działanie programu.
 
Odpowiedź
#43
https://pl.wikipedia.org/wiki/Tysi%C4%85...C5%82y_gry czyli to można skasować? if (digitalRead(przyciskOK) == LOW).
 
Odpowiedź
#44
(03-01-2021, 22:10)Himura Kenshin napisał(a): https://pl.wikipedia.org/wiki/Tysi%C4%85...C5%82y_gry czyli to można skasować?  if (digitalRead(przyciskOK) == LOW).
Trochę tego może nie rozumiem. Czy program ma rzucać kościami? Czy program ma obliczać te wszystkie warianty opisane w linku.

Jeżeli chcesz napisać procesorkowi "jeśli nacisnę przycisk OK" to zapisuje się to tak     if (przyciskOK == 1).
Kurcze brakuje Ci podstaw, bez tego to rozmowa z Tobą jest jak ze ślepym o kolorach, wybacz.
 
Odpowiedź
#45
(03-01-2021, 22:59)Agregacik napisał(a): Ręce mi opadły jak zobaczyłem to if (digitalRead(przyciskOK) == LOW). Jest to znak, że nie rozumiesz co piszesz.


Witam. Ten kawałek kodu który wstawił kolega Himura
Kod:
if (digitalRead(przyciskOK) == LOW)
    {
      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;
pochodzi z programu który napisałem dla kolegi na elektrodzie - po wciśnięciu przycisku losuje 5 liczb od 1 do 6, wyświetla ich wartość, oraz sumuje wyrazy tablicy i wyświetla wynik. Kolega pomyślał że łącząc te zlepki różnych kodów osiągnie to co planuje :-) Niestety kolega przy obecnym poziomie wiedzy nie rozumie że wklejanie wyciętych kawałków jednego kodu w inny kod nie zadziała.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości