Arduino Polska Forum
Czar "0" z przodu... - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Czar "0" z przodu... (/watek-czar-0-z-przodu)

Strony: 1 2


RE: Czar "0" z przodu... - Lession - 12-02-2023

(12-02-2023, 01:37)Jarewa0606 napisał(a): int czas_pozostaly_proc = (klepsydra_sek/sekundy_ustaw)*100;
      co jest de facto:
int czas_pozostaly_proc  = (100/3600)*100;


Pewnie  klepsydra_sek i sekundy_ustaw to zmienne całkowite, wiec masz źle  i nawet ustawienie

float czas_pozostaly_proc = (klepsydra_sek/sekundy_ustaw)*100;

Nic nie zmieni bo przy obliczeniu nie wie że wynik jest float.  I będzie liczył liczby całkowite gdzie:

100/3600 = 0  a 0*100 = 0. 

Musisz mu to wskazać zrub rzutowanie

float czas_pozostaly_proc = (float(klepsydra_sek/sekundy_ustaw)*100);

Napisałem: czas_pozostaly_proc = (float(klepsydra_sek/sekundy_ustaw)*100);, 
wcześniej kombinowałem z zapisem: (float)(klepsydra_sek/sekundy_ustaw)*100); (jest prawidłowy? kompilator nawet nie pisnął)...

niestety nadal jest 0 u mnie. Sad

Co ciekawe: float ddd = 100/3600; też daje 0... u mnie... coś trzeba ustawić?


Na razie pominąłem te procenty, moze trzeba każdą zmienną osobno zrobić float? Sprawdzę i potwierdzę.


RE: Czar "0" z przodu... - Lession - 12-02-2023

Mam prośbę, co źle robię, chcę, aby były 3 znaki specjalne i coś nie wychodzi:

Mam zdefiniowane globalnie:
byte celsjusz[] = {B00100, B01010, B10001, B01010, B00100, B00000, B00000, B00000};
byte statek[] = {B00100, B00110, B00111, B00100, B11111, B01110, B00000, B00000};
byte clock[] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0};

dalej: w loop
lcd.createChar(0, clock);
lcd.createChar(1, celsjusz);
lcd.createChar(2, statek);
lcd.home();

jednak gdy wywołam:
lcd.setCursor(0,0);
lcd.write(byte(0));

lub lcd.write(0); lub i inne bajty: lcd.write(1); lcd.write(2); , nawet 10 - to zawsze mi pojawia się stateczek...

WHY?


RE: Czar "0" z przodu... - kaczakat - 12-02-2023

Kod:
Co ciekawe: float ddd = 100/3600; też daje 0... u mnie... coś trzeba ustawić?
float ddd = 1/36.0 wywal zera i dodaj coś po przecinku, jak w działaniach biorą liczby int to działanie jest promowane do typu int, co obcina wszystko po kropce. Jak masz w równaniu dzielenie i mnożenie to najpierw rób mnożenie, wywalaj zera bo po co mnożyć x 100 jak potem dzielisz przez 3600, można podzielić przez 36 i otrzymać ten sam wynik.
Zrób sobie cała bufor na całą linię do wysłania na ekran by można było używać sprintf do sformatowania całej linii, to działa efektywniej niż dukanie po literce.
Stateczku może nie ma ale znak stopnia C na pewno jest w pamięci LCD, możesz to sprawdzić drukując po kolei wszystkie znaki char z LCD, to po prostu liczby od 0-255, czy tam od 0x0 do 0xFF.
Np. mój LCD ma coś takiego:
[attachment=1317]
Więc wystarczy w odpowiednie pole tablicy char wpisać wartość 0xDF by na LCD zobaczyć taki  oC.
Jak sobie zrobisz customowy znak to raczej trzeba go sobie tam ręcznie dodawać i pamiętać by zlokalizować go w odpowiednie miejsce.
Na koniec Twoje znaki pokazują się na LCD normalnie, pewnie masz jakiś czeski błąd w swoim programie, którego nie pokazujesz w całości.


RE: Czar "0" z przodu... - MadMrQ - 14-02-2023

Cytat:float ddd = 100/3600
żeby to cudo liczyło Ci się z przecinkami musisz co najmniej mianownik zrzutować na float, czyli:

Kod:
float ddd = 100/(float)3600;
u mnie działa Smile

Kod:
lcd.createChar(0, clock);
lcd.createChar(1, celsjusz);
lcd.createChar(2, statek);
lcd.home();
Próbowałeś to przenieść do setup()? W bibiliotece LiquidCrystal nie widać innej implementacji createChar() w inny sposób niż jej używasz...