Skocz do zawartości

Kurs Arduino - #7 - Wyświetlacz tekstowy, LCD 2x16


Komentator

Pomocna odpowiedź

@jogaszu ładny program. Widzę, że zadbałeś też o odpowiednie przesuwanie wyniku na wyświetlaczu 🙂 Ciekawa metoda, ładnie to wykombinowałeś! Jakbyś chciał podziałać więcej w tym kierunku to sprawdź sobie funkcję printf (bo to chyba najlepsze rozwiązanie tego problemu). Jednak podaję to oczywiście jako ciekawostkę, bo w kursie tego nie omawiałem. Szczegóły: https://playground.arduino.cc/main/printf

Link do komentarza
Share on other sites

Hej,

Jestem tu nowy uczę się z tego kursu. Postanowiłem zrobić też własny projekt. Na podstawie zadania o stoperze jestem w trakcie tworzenia programu pod nazwą minutnik. Czas ustawiam z przycisku i to mam ogarnięte. Natomiast mam problem z odliczeniem ustawionego czasu. Uruchomienie odliczania czasu ma być z przycisku. Niestety moje próby z pętlą for, if nie wychodzi. Znalazłem coś takiego jak biblioteka Timers lecz jeszcze nie miałem czasu jej sprawdzić. Czy to może pomóc? Pomiar również ma być widoczny na wyświetlaczu 2x 16.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Ja mam problem z tym wyświetlaczem. Podłączyłam wyświetlać, wszystko działa, kwadraciki się świecą, ale żadnego napisu mi nie pokazuje, cały czas te kwadraciki. już nie wiem co mam robić, bo żaden program nie działa.

Pozdrawiam

IMG_20190627_142254.jpg

Link do komentarza
Share on other sites

@annette witam na forum 🙂 Widzę, że korzystasz z innego sprzętu niż ten, który jest używany w kursie. Zakładając, że masz poprawne elementy to proponowałbym zacząć od przylutowania złącza do wyświetlacza. Nie możesz podłączać go w taki sposób jak na zdjęciu - jest duża szansa, że tam kryje się problem.

Link do komentarza
Share on other sites

Odnośnie zadania 7.4, to wykonałem stoper w symulatorze "Tinkercad" (nie mam jeszcze płytki) i mam jeden problem. Stoper ma opóźnienie równe około połowie aktualnie wyświetlonego czasu. Wie ktoś dlaczego?

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int time_s = 0;//sekundy
byte time_ds = 0;//decysekundy
byte time_cs = 0;//centysekundy
byte step = 0;

void setup() {
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Nacisnij lewy");
  lcd.setCursor(0,1);
  lcd.print("przycisk"); 
}

void loop(){
  if(step==0&&digitalRead(10)==LOW){
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Czas:");
    step = 1;
  }
  while(step==1){
    lcd.setCursor(0, 1);
    lcd.print(time_s);
    lcd.print(".");
    lcd.print(time_ds);
    lcd.print(time_cs);
    lcd.print("s");
    if(digitalRead(11)==LOW){
      step = 2;
      lcd.setCursor(0, 0);
      lcd.print("Koniec. Czas:");
      break;
    }
    time_cs ++;
    if(time_cs==10){
      time_ds ++;
      time_cs = 0;
    }
    if(time_ds==10){
      time_s ++;
      time_ds = 0;
    }
    delay(10);
  }
}

obraz.thumb.png.ac2613438f55404e542def2eee576e74.png

Link do komentarza
Share on other sites

@Itap88 przyczyn może jest kilka. Po pierwsze, delay nie jest dokładne i zawsze wprowadza jakieś przekłamanie. Po drugie, wyświetlanie wyników na wyświetlaczu również zabierać jakiś czas, który tutaj może powodować błędy. Po trzecie, nie wiemy też jak dokładnie działa symulacja - możliwe, że przyczyną tak dużego opóźnienia jest sam symulator 😉 Jeśli chcesz zoptymalizować program to na pewno warto rozważyć zmianę częstotliwości wyświetlania pomiaru na LCD. Może warto podmieniać czas tylko co sekundę?

Link do komentarza
Share on other sites

Robisz podstawowy błąd - zakładasz, że wyświetlanie jest natychmiastowe. Dlatego pętla wykonuje się nie co 10 msec, a 10 msec + czas transmisji do wyświetlacza.

Spróbuj to rozwiązać (np.zmierz czas jaki zajmuje wyświetlanie i do delay wrzuć tyle ile trzeba - czyli 10 msec minus czas wyświetlania). Też będziesz miał błąd, ale mniejszy.

Pokombinuj, jak się można w ogóle pozbyć tego błędu.

  • Lubię! 1
Link do komentarza
Share on other sites

Chyba najlepszym sposobem pozbycia się błędu byłoby mierzenie czasu niezależnie od reszty programu. Spotkałem się ze stwierdzeniem, że są na to gotowe metody, ale na razie idę tokiem tego kursu, a potem zobaczę czego będę się potrzebował jeszcze dowiedzieć.

Link do komentarza
Share on other sites

@Itap88 to jedna z metod, ale na początek wystarczyłoby, abyś nie "wyrzucał" pomiarów na ekran w każdym obiegu pętli.

Wystarczy, że poniższy kod przeniesiesz np. do warunku "if(time_cs==10){": 

    lcd.setCursor(0, 1);
    lcd.print(time_s);
    lcd.print(".");
    lcd.print(time_ds);
    lcd.print(time_cs);
    lcd.print("s");

Już wtedy powinien być zauważalnie lepszy efekt 😉

Link do komentarza
Share on other sites

Hej,
zrobiłam dokładnie takie same połączenia jak w przykładzie, kod tak samo, ale wyświetlacz jest u mnie tylko podświetlony. Kręcenie potencjometrem nic nie dało, dopiero jak poczytałam, że trzeba mocniej przycisnąć czarną ramkę do płytki to zadziałał. Ale tylko wtedy kiedy go przyciskam bardzo mocno w dwóch górnych rogach (wystarczy, że przyciskam samą płytkę bez ramki) to wyświetla prostokąty/tekst zależnie jak tam potencjometr ustawiłam. Co jest problemem, bo ewidentnie jest problem z samym wyświetlaczem.

Dodam, że zostawiłam wyświetlacz na noc połączony z Arduino i tak dalej, a rano jak podpięłam do komputera to pokazał tekst normalnie. Dopiero jak odpięłam USB i podłączyłam ponownie później to przestał działać normalnie tylko znowu po przyciśnięciu.

Link do komentarza
Share on other sites

@SoOsom witam na forum 🙂

Jeśli problem rozwiązuje tylko dociśnięcie ramki wyświetlacza to w takim razie pozostaje reklamacja, bo chyba niestety faktycznie trafiłeś na uszkodzony element 😞 Napisz proszę na adres reklamacje@botland.com.pl, na pewno szybko uda się wymienić element na nowy. Przepraszam za problem, mam nadzieję, że dalej obejdzie się już bez takich niespodzianek!

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.