• 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 + I2C jak zrobic Afr/voltomierz + pasek
#1
Witam
Mam lcd 16x2 podłączone przez i2c do UNO. Zrobiłem sobie wczesniej wskaznik afr http://forum.arduinopolska.com/watek-chw...-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
 
Odpowiedź
#2
(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-chw...-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.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
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  ;/
 
Odpowiedź
#4
Najpierw zrób aby wyświetlał się w tym miejscu dowolny znak, abyś widział że to działa. Reszta potem.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#5
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
 
Odpowiedź
#6
Zero pomysłów?

Wysłane z mojego SM-N910F przy użyciu Tapatalka
 
Odpowiedź
#7
(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.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#8
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
 
Odpowiedź
#9
(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.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#10
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);  ??


}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości