• 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
#21
Znalazłem bibliotekę polskie znaki master #include <PolskieZnaki.h> zainstalowałem ale zamiast pokazać ó to krzaczki.Chce uzyskać ł,ó,ć,ś.


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. Poprawiłem
Kod:
#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);

 
  }/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{

  // 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(1000); 
  lcd.clear();
 
lcd.setCursor(0, 0);
lcd.print("Wybor Ilosci Graczy:");

delay(1000); 
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(1000);
  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");
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(1000);
  //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 ) */
 
Odpowiedź
#22
Nic z Twoich wpisów nie wyniknie, bo nie stosujesz się do rad. Bardzo dobrze (?), że masz swój styl uczenia się na przykładach, ale jak tu udowadniasz jest mało efektywny.
Kursy są również online za free, w postaci blogów lub filmów na Youtube.
Jesteś na takim etapie, że nawet nie wiesz jak zadać prawidłowo pytanie, a wszystko o co pytasz jest dostępne online:
Google: "lcd arduino custom character" https://maxpromer.github.io/LCD-Character-Creator/
Google: "LCD arduino własne znaki" http://arduinowo.pl/zagadnienia/wyswietl...4780/#mns5
Google: "LCD propres caractères arduino" https://www.youtube.com/watch?v=R_LxirJ5R4A
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#23
Menu jest proste jak budowa cepa....

Tworzysz tak zwane "strony" strona to jakaś zmienna. I na podstawie dwóch funkcji "if" lub "case" po prostu wyświetlasz stronę...

np.
if(strona ==1){
// wyświetla informacje z pierwszej strony
// idz do strony 2 (strona =2)
if(strona ==2){
//wyświetlaj coś
// idz do strony 3 (strona =3)
// wruć do strony 1 (strona =1)
// itd..

if((strona ==3){
// itd
}

Robisz drzewko Wink
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#24
(18-12-2020, 21:58)Jarewa0606 napisał(a): Menu jest proste jak budowa cepa.... Nie dlamnie .Przydał by mi się przykład prostego menu. Tyle napisałem od początku.
Kod:
//Menu
//* Wybór Ilości Graczy
//*  2
//*  3
//*  4

#include <Wire.h>
#include <hd44780.h>                       // main hd44780 header
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c
int wybor=0;
int currentMenuPos = 0;// Pozycja menu?
int menuSize;// Wielkość menu?

#define PRZDOWN 12
#define PRZUP 11
#define PRZOK 10
#define PRZRZUT 9
#define PRZMENU 8

// LCD
const int LCD_COLS = 20;
const int LCD_ROWS = 4;

hd44780_I2Cexp lcd;
int status;
void setup() {

   pinMode(12, INPUT_PULLUP); //Konfiguracja pinu 12 jako wyjście PRZDOWN-przycisk w dól
   pinMode(11, INPUT_PULLUP); //Konfiguracja pinu 11  jako wyjście PRZUP-przycisk w górę
   pinMode(10, INPUT_PULLUP); //Konfiguracja pinu 10 jako wyjście PRZOK-Przycisk zatwierdzenia wyboru
   pinMode(9,  INPUT_PULLUP); //Konfiguracja pinu 9 jako wyjście PRZRZUT-przycisk rzutu kostkami
   pinMode(8,  INPUT_PULLUP); //Konfiguracja pinu 8 jako wyjście PRZMENU- Menu wyboru

  status = lcd.begin(LCD_COLS, LCD_ROWS);
  if(status)
  {
   hd44780::fatalError(status);
  } 
  Serial.begin(9600);
 
}

void loop() {
   // Print a message to the LCD.
  // po naciśnięcu przycisku menu wyświetl
  //Wybór ilości graczy przycisk PRZMENU
 
  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");

 
if (digitalRead(PRZMENU) ==HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
      delay(PRZMENU);

lcd.setCursor(0,0);
lcd.print("Wybor ilosci graczy:    ");// to ma się palić  menu wyboru
lcd.setCursor(0,1);
lcd.print("  2.               ");    //to wybierane
lcd.setCursor(0,2);
lcd.print("  3.               ");  //to wybierane
lcd.setCursor(0,3);
lcd.print("  4.               ");    //to wybierane

      while (digitalRead(8) == HIGH) {
    digitalWrite(PRZMENU, HIGH); //
  digitalWrite(PRZMENU, LOW);
   
  if (digitalRead(PRZDOWN) ==HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
      delay(PRZDOWN);
      lcd.setCursor(0,1);
lcd.print("  2.*              ");    //to wybierane
   while (digitalRead(12) == HIGH) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZDOWN, HIGH); // Przesuń w menu wyboru ilości  graczy w dół
    digitalWrite(PRZDOWN, LOW); // Nie przesuwaj w menu
      }
if (digitalRead(PRZUP) ==HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
      delay(PRZUP);
  while (digitalRead(11) == HIGH) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZUP, HIGH); // Przesuń w menu wyboru ilości  graczy w górę
    digitalWrite(PRZUP,LOW); // Nie przesuwaj w menu
   }  
if (digitalRead(PRZOK) ==HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
      delay(PRZOK);
while (digitalRead(10) == HIGH) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZOK, HIGH); // Zatwierdź wybór
    digitalWrite(PRZOK, LOW);
  } 
if (digitalRead(PRZRZUT) ==HIGH) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
      delay(PRZRZUT);
while (digitalRead(9) == HIGH) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZRZUT, HIGH); // Rzut kośćmi
    digitalWrite(PRZRZUT, LOW);

 
    }    

    }  }   }   }   }   }       }

   
Nie wyświetla strony tytółowej tylko zaraz przechodzi do menu wyboru a chce żeby przyciskiem przechodzić do menu wyboru. Plis. Jakiś prosty przykładzik. Bo znalazłem tylko skąplikowane menu na wiele pozycji.
 
Odpowiedź
#25
Bo menu jest bardzo proste do zrobienia - tak jak pisze Jarewa0606, tylko jest jeden warunek - jak już się je umie tworzyć.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#26
(22-12-2020, 15:46)kaczakat napisał(a): Bo menu jest bardzo proste do zrobienia  - tak jak pisze Jarewa0606, tylko jest jeden warunek - jak już się je umie tworzyć.
Zgadzam się . Ja tyle zrobiłem. Ale nie dzała jak chcę. I nie wiem co źle a co dobrze. Ma wywietlić ekran  powitalny i po naciśnięciu przycisku menu przejść do menu wyboru liczby graczy.  Po wyborze zatwierdzić OK.
Kod:
//Menu
//* Wybór Liczby Graczy
//*  2
//*  3
//*  4

#include <Wire.h>
#include <hd44780.h>                       // main hd44780 header
#include <hd44780ioClass/hd44780_I2Cexp.h> // i2c



int wybor=0;//Wybór graczy od 2 do 4
int gr=0;//ilość graczy od 2 do 4
//int numKeys=5; //ilość przycisków
int currentMenuPos = 0;// Pozycja menu?
//int menuSize(3);// Wielkość menu?

int menuPos = 0;

String menuLines[3] =
{
  " 2.   ",
  " 3.   ",
  " 4.   ",
  };


#define PRZDOWN 11
#define PRZUP 10
#define PRZOK 9
#define PRZRZUT 8
#define PRZMENU 7

// LCD
const int LCD_COLS = 20;
const int LCD_ROWS = 4;

hd44780_I2Cexp lcd;
int status;
void setup() {

   pinMode(PRZMENU, INPUT_PULLUP); //Konfiguracja pinu 7 jako wyjście PRZMENU-przycisk w dól
   pinMode(PRZDOWN, INPUT_PULLUP); //Konfiguracja pinu 11  jako wyjście PRZDOWN-przycisk w górę
   pinMode(PRZUP,  INPUT_PULLUP); //Konfiguracja pinu 10 jako wyjście PRZUP-Przycisk zatwierdzenia wyboru
   pinMode(PRZOK,  INPUT_PULLUP); //Konfiguracja pinu 9 jako wyjście PPRZOK-przycisk rzutu kostkami
   pinMode(PRZRZUT,  INPUT_PULLUP); //Konfiguracja pinu 8 jako wyjście PRZRZUT- Menu wyboru

  status = lcd.begin(LCD_COLS, LCD_ROWS);
  if(status) {   hd44780::fatalError(status);
  } 
  Serial.begin(9600);
  }

void loop() {
  // Print a message to the LCD.
  // po naciśnięcu przycisku menu wyświetl
  //Wybór ilości graczy przycisk PRZMENU

   lcd.clear();

 
   
  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("     21.12.2020");



  if (digitalRead(PRZMENU) == LOW) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
  delay(PRZMENU);
  while (digitalRead(PRZMENU) == LOW) {
   digitalWrite(PRZMENU, LOW); //
   digitalWrite(PRZMENU, HIGH); 
     
if (digitalRead(PRZDOWN) == LOW) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
      delay(PRZDOWN);
      while (digitalRead(PRZDOWN) == LOW) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZDOWN, LOW); // Przesuń w menu wyboru ilości  graczy w dół
    digitalWrite(PRZDOWN, HIGH); // Nie przesuwaj w menu
      }
if (digitalRead(PRZUP) == LOW) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
    delay(PRZUP);
    while (digitalRead(PRZUP) == LOW) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZUP, LOW); // Przesuń w menu wyboru ilości  graczy w górę
    digitalWrite(PRZUP,HIGH); // Nie przesuwaj w menu
   }   
if (digitalRead(PRZOK) == LOW) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
    delay(PRZOK);
    while (digitalRead(PRZOK) == LOW) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZOK, LOW); // Zatwierdź wybór
    digitalWrite(PRZOK, HIGH);
  } 
if (digitalRead(PRZRZUT) == LOW) { //wyświetl liczbę tylko, jeśli naciśnięto przycisk
    delay(PRZRZUT);
    while (digitalRead(PRZRZUT) == LOW) { //Jeśli przycisk jest wciśnięty
    digitalWrite(PRZRZUT, LOW); // Rzut kośćmi
    digitalWrite(PRZRZUT, HIGH);
   
 
lcd.setCursor(0,0);
lcd.print("Wybor Liczby Graczy:    ");// to ma się palić  menu wyboru

lcd.setCursor(1, 1);
lcd.print( menuLines[ menuPos + 1] );
   lcd.print("<-");
   lcd.print( menuLines[ menuPos ] );
   
lcd.setCursor(0,1);
lcd.print("  2.               ");    //to wybierane
lcd.setCursor(0,2);
lcd.print("  3.               ");  //to wybierane
lcd.setCursor(0,3);
lcd.print("  4.               ");    //to wybierane

   
   } } } }}}}}

   
 
Odpowiedź
#27
Ono działa tak jak napisałeś wiec działa tak jak chcesz... Chcesz inaczej napisz inaczej.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#28
(27-12-2020, 01:10)Jarewa0606 napisał(a): Ono działa tak jak napisałeś wiec działa tak jak chcesz... Chcesz inaczej napisz inaczej.
Nie działa tak jak chcę. Wszędzie szukałem prostego menu jednopoziomowego jako przykładu  i nie znalazłem. Podobno Bascom jest łatfiejszy ale wolę się tego uczyć. Pomocy.
 
Odpowiedź
#29
Hm popatrzyłem na ten kod i nic z niego nie rozumiem. Definiujesz piny jako wejścia a próbujesz przypisywać im stany na siłę. Piszesz delay i w parametrze milisekund wpisujesz numer pinu.
To nie będzie działać. Ty nie wiesz co piszesz i nie wiesz jak używać poszczególnych instrukcji.
Przerób na początek jakiś kurs i zrozum jak działa procesor a właściwie jak ma działać program.
Może od mrugania diodą trzeba zacząć, potem dwoma niezależnie, potem dodać jeszcze przycisk i zmieniać częstotliwość mrugania jednej z nich jak "nadusisz" przycisk.
Musisz zrozumieć, że pętla LOOP ma wykonywać się kilkaset razy na sekundę i tylko ma zaglądać w różne miejsca programu zależnie od tego, który guzik "nadusisz".
 
Odpowiedź
#30
(28-12-2020, 11:46)Agregacik napisał(a): Hm popatrzyłem na ten kod i nic z niego nie rozumiem. Definiujesz piny jako wejścia a próbujesz przypisywać im stany na siłę. Piszesz delay i w parametrze milisekund wpisujesz numer pinu. 
To nie będzie działać. Ty nie wiesz co piszesz i nie wiesz jak używać poszczególnych instrukcji.
Przerób na początek jakiś kurs i zrozum jak działa procesor a właściwie jak ma działać program.
Może od mrugania diodą trzeba zacząć, potem dwoma niezależnie, potem dodać jeszcze przycisk i zmieniać częstotliwość mrugania jednej z nich jak "nadusisz" przycisk.
Musisz zrozumieć, że pętla LOOP ma wykonywać się kilkaset razy na sekundę i tylko ma zaglądać w różne miejsca programu zależnie od tego, który guzik "nadusisz".
Daj jakiś przykład prostego menu.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości