Arduino Polska Forum
LCD + I2C jak zrobic Afr/voltomierz + pasek - 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: LCD + I2C jak zrobic Afr/voltomierz + pasek (/watek-lcd-i2c-jak-zrobic-afr-voltomierz-pasek)



LCD + I2C jak zrobic Afr/voltomierz + pasek - Kuter_tm - 08-02-2017

Witam
Mam lcd 16x2 podłączone przez i2c do UNO. Zrobiłem sobie wczesniej wskaznik afr http://forum.arduinopolska.com/watek-chwilowe-spalanie-benzyny-komp-pokladowy

teraz kombinuje żeby dodac to niego pasek który bedzię obrazował stan. Czyli w linii pierwszej wskazanie afr np AFR:14,7 w 2 linii pasek. Dokładnie takie cos jak w filmiku niżej. Kilka kodów znalazłem niestety żadnego nie udało mi sie dostosować żeby działał.
https://www.youtube.com/watch?v=4zbBaQPvBC0

Docelowo jak się uda dodać ten pasek, to w dalszych planach bedzię opcja zmiany wskazan na wyświetlaczu, czyli na głowym startowym ekranie, beda wyswietlane wskazania, sondy szerokopasmowej, temp spalin, doładowanie, po nacisnięciu przycisku na LCD pokarze sie tylko AFR (szerokopasmowa) plus pasek, następne wciśnięcie, turbo + pasek, nastepne temp spalin + pasek itd... ale narazie skupmy sie na pasku


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - namok - 08-02-2017

(08-02-2017, 16:49)Kuter_tm napisał(a): Witam
Mam lcd 16x2 podłączone przez i2c do UNO. Zrobiłem sobie wczesniej wskaznik afr http://forum.arduinopolska.com/watek-chwilowe-spalanie-benzyny-komp-pokladowy

teraz kombinuje żeby dodac to niego pasek który bedzię obrazował stan. Czyli w linii pierwszej wskazanie afr np AFR:14,7 w 2 linii pasek. Dokładnie takie cos jak w filmiku niżej. Kilka kodów znalazłem niestety żadnego nie udało mi sie dostosować żeby działał.
https://www.youtube.com/watch?v=4zbBaQPvBC0

Docelowo jak się uda dodać ten pasek, to w dalszych planach bedzię opcja zmiany wskazan na wyświetlaczu, czyli na głowym startowym ekranie, beda wyswietlane wskazania, sondy szerokopasmowej, temp spalin, doładowanie, po nacisnięciu przycisku na LCD pokarze sie tylko AFR (szerokopasmowa) plus pasek, następne wciśnięcie, turbo + pasek, nastepne temp spalin + pasek itd... ale narazie skupmy sie na pasku

Użyj funkcji map aby przeskalować wartość afr.


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - Kuter_tm - 08-02-2017

To wiem że map, ale nie wiem jak tego użyć.
tzn wiem ze musze zdefiniować znaki Np
Kod:
byte k1[8] = {   //kreska1z5
0x10,
0x10,
0x10,
0x10,
0x10,
0x10,
0x10,
0x10};
byte k2[8] = { // kreska 2z5
0x18,
0x18,
0x18,
0x18,
0x18,
0x18,
0x18,
0x18};

i tak dalej zeby było 5 kresek
ale nie wiem jak zrobić żeby mi to zaczelo działać.
NIe widze nawet szczerze na czym mam sie wzorować zeby to zrobic pod siebie  ;/


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - namok - 08-02-2017

Najpierw zrób aby wyświetlał się w tym miejscu dowolny znak, abyś widział że to działa. Reszta potem.


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - Kuter_tm - 08-02-2017

To jest proste. Wystarczy lcd.print ("k1") i pokarze mi kreske jedna. Nie mam teraz jak sprawdzic. No ale raczej tak.

Wysłane z mojego SM-N910F przy użyciu Tapatalka
No tak żeby bylo jeszcze ciekawiej na laptopipe wysypał mi sie program arduino. Jakis problem z java... Nic sie nie aktualizowało, nic nowego nie instalowałem i bum. Jakies pomysły? Java i arduino przeinstalowane


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - Kuter_tm - 15-02-2017

Zero pomysłów?

Wysłane z mojego SM-N910F przy użyciu Tapatalka


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - namok - 15-02-2017

(15-02-2017, 11:02)Kuter_tm napisał(a): Zero pomysłów?
Przecierz dostałeś odpiwiedź:

Cytat:Użyj funkcji map aby przeskalować wartość afr.
Tyle ile wynosi wartość przeskalowana tyle razy masz wyświetlić znak.


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - Kuter_tm - 15-02-2017

No super. Sam sobie mogłem napisać użyj funkcji map tyle widziałem. Czy jak bym wiedział jak jej użyć to bym pytaj?! Nie wiem jak ja napisać żeby działala. Skąd wziąć sygnał, tzn wiem a0, ale jak to zrobić żeby miało ręce i nogi.

Wysłane z mojego SM-N910F przy użyciu Tapatalka


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - namok - 15-02-2017

(15-02-2017, 12:52)Kuter_tm napisał(a): No super.  Sam sobie mogłem napisać użyj funkcji map tyle widziałem. Czy jak bym wiedział jak jej użyć to bym pytaj?!  Nie wiem jak ja napisać żeby działala. Skąd wziąć sygnał, tzn  wiem a0, ale jak to zrobić żeby miało ręce i nogi.
Zacznij od przeczytania jak działa ta funkcja a potem przejrzyj przykłady które, o dziwo, są zamieszczone w opisie funkcji.


RE: LCD + I2C jak zrobic Afr/voltomierz + pasek - Kuter_tm - 15-02-2017

Znalazłem cos co wykorzystałem. Nie do konca rozumiem o co w nim chodzi, a chodzi o to zeby rozumiec i sie nauczyc dlaczego tak a nie inaczej. Kod ma tez problem, jak wsadze go do kodu głownego gdzie mam jeszce w wierszy piwerwszym inne rzeczy pasek głupieje, wiem że napewno chodzi tu o delay(150) bez opóźnienia działa dobrze - prawie, bo tez potrafi zostawic cos za soba. Wyglada on tak

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

uint8_t bar0[8]  = {                                                            to kapuje bo tu definiujemy znaki w tym przypadku linie
 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
uint8_t bar1[8]  = {
 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};
uint8_t bar2[8]  = {
 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18};
uint8_t bar3[8]  = {
 0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};
uint8_t bar4[8]  = {
 0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E,0x1E};
//uint8_t bar5[8]  = {
//  0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F};
int i,j=0;
LiquidCrystal_I2C lcd(0x27, 16, 2);  
void setup()
{
 lcd.begin();                
 lcd.backlight();
 lcd.createChar(0, bar0);                  ---------------------- tu je nazywamy 
 lcd.createChar(1, bar1);
 lcd.createChar(2, bar2);
 lcd.createChar(3, bar3);
 lcd.createChar(4, bar4);
 }
void loop()
{
  pasek(analogRead(A0),1,16);     -------- definiujemy pasek. Ma brac odczyt z A0, ma być w pierwszym wierszu (tzn 2) wyswietlacz ma 16 znaków
}
void pasek(int data, int row, int lcd_size)      -------- definiujemy pasek. Ma brac odczyt z A0, ma być w pierwszym wierszu (tzn 2) wyswietlacz ma 16 znaków    
{
 j = map(data, 0, 1023, 0, (5 * lcd_size)+16);     --- tu nie lapie wyswietlacz ma 80 znaków, zapisane w tej postaci dochodzi do konca zapisane w postaci  (data, 0, 1023, 0, 80) jest problem dochodzi  do 13 pola
 i = j / 6;    - nie wiem
 lcd.setCursor(i,row);     --- ustawia kursor, row to wiersz 2 i poczatek. Dlaczego nie działa jak napisze (0,1)
 lcd.write(j % 6);      --- wyswietla nasz pasek ale co znaczy zapis dlaczego % i 6

Jeszcze jedno. Mam zdefiniowane paski uint8_t bar0[8]   mam je poźniej nazwane jako  1,2,3,4,5  i gdzie one sa umieszczone dalej w kodzie w PASKU?  i = j / 6;  lcd.write(j % 6);  ??


}