Skocz do zawartości

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


Komentator

Pomocna odpowiedź

6 godzin temu, Vova napisał:

Teraz myślę jak to zatrzymać i zresetować

@Vova to nie będzie wcale trudne 😉 Skoro układ działa, gdy zmienna stan_przyciskuStart jest równa jeden to wystarczy, że przycisk stopujący pomiar ustawi ją np. na 0 😉

  • Pomogłeś! 1
Link do komentarza
Share on other sites

@Treker Dzięki za pomoc. Skończyłem zadanie 7.4 i nareszcie mogę przejść do następnej części kursu. Chętnie  poczytam komentarze i uwagi co do kodu😉

#include <LiquidCrystal.h> //Dołączenie bilbioteki
#define przyciskStart 8
#define przyciskStop 9
#define STOP 0
#define START 1
#define INTERVAL 1000

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //Informacja o podłączeniu nowego wyświetlacza
int stoper = STOP;
long aktualny_czas = 0;// Zmienne do mierzenia czasu
long zapamietany_czas = 0;
long czas_start = 0;
long wyliczony_czas = 0;
bool stan_przyciskuStart = 0;//Zmienne do zapamietania stanu przycisków Start i Stop
bool stan_przyciskuStop = 0;

void setup() {
  pinMode(8, INPUT_PULLUP);//Piny 8 i 9 jako przyciki
  pinMode(9, INPUT_PULLUP);
  lcd.begin(16, 2); //Deklaracja typu
  lcd.clear();// Wyczysc wyswietlacz
}
void loop() {
  if (digitalRead(przyciskStart) == LOW) {//Gdy wcisnieto przycisk "Start"
    stan_przyciskuStart = 1;//Zpamietaj stan przycisku "Start"
  }
  if (stan_przyciskuStart == 1) {//Gdy przycisk "Start" został wcisniety
    if (stoper == STOP) {//Przy zatrzymanym stoperze
      stoper = START;//Zacznij odliczanie
      czas_start = millis();//Odczytaj czas startu z Arduino
      zapamietany_czas = czas_start;//Zapamietaj czas startu
      lcd.clear();//Wyczysc wyswietlacz
      lcd.setCursor(0, 0);//Ustawienie kursora w pierwszej linijce
      lcd.print("START");//Drukuj tekst
    }
    if (stoper == START ) {//Gdy odliczanie trwa
      aktualny_czas = millis();//Zapisz aktualy czas do zmiennej
      wyliczony_czas = aktualny_czas - czas_start;//Oblicz: ile czasu mineło od startu
      if (aktualny_czas - zapamietany_czas > INTERVAL) { //Gdy mineło wiecej czasu niz 1 sekunda
        zapamietany_czas += INTERVAL; //Dodaj roznice do odczytanego czasu
        lcd.clear();//Wyczysc wyswietlacz
        lcd.setCursor(0, 0); //Ustaw kursor w pierwszym wierszu
        lcd.print("START");//Drukuj tekst
        lcd.setCursor(0, 1);//Ustawienie kursora w drugiej linijce
        lcd.print(wyliczony_czas / 1000); //Drukuj tekst
      }
      if (digitalRead(przyciskStop) == LOW) {//Gdy wcisnieto przycisk "Stop"
        stan_przyciskuStart = 0;//Zresetuj stan przycisku "Start"
        stoper = STOP;//Zatrymaj stoper
      }
      if (stoper == STOP) {//Gdy stoper zatrzymany
        lcd.clear();//Wyczysc wyswietlacz
        lcd.setCursor(0, 0);//Ustaw kursor w pierwszym wierszu
        lcd.print("STOP");//Drukuj tekst
        lcd.setCursor(0, 1);//Ustaw kursor w drugim wierszu
        lcd.print(wyliczony_czas / 1000);//Drukuj tekst
      }
    }
  }
}

 

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

@Vova kod wygląda ciekawiej, fajnie że zastosowałeś zmienne odpowiedzialne za stan, choć zastanawia mnie zagnieżdżenie warunków "stoper == STOP", na pewno da się to jakoś rozwiązać, ale tak to jest postęp. Ćwicz dalej, a nabierzesz wprawy 🙂 

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

@Gieneq Faktycznie ten ostatni if   był zbędny. Już poprawiłem  

  if (digitalRead(przyciskStop) == LOW) {//Gdy wcisnieto przycisk "Stop"
        stan_przyciskuStart = 0;//Zresetuj stan przycisku "Start"
        stoper = STOP;
        lcd.clear();//Wyczysc wyswietlacz
        lcd.setCursor(0, 0);//Ustaw kursor w pierwszym wierszu
        lcd.print("STOP");//Drukuj tekst
        lcd.setCursor(0, 1);//Ustaw kursor w drugim wierszu
        lcd.print( wyliczony_czas / 1000);//Drukuj tekst

 

  • Lubię! 1
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

@woskod w tym kontekście chodzi zwyczajnie o "pamięć" wyświetlacza. Piny RS, RW oraz E służą do komunikacji z wyświetlaczem, za ich pomocą informujemy sterownik wyświetlacza czy będziemy odczytywać, czy zapisywać dane, czy będzie wysyłać informacje, które mają być wyświetlone, czy jakieś komendy sterujące 🙂

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Witam, mam pytanie dotyczące podłączenia wyświetlacza - czy z racji braku wolnych pinów mogę podpiąć którąś linie do np. pinu 0 bądź 1?

Np. tak jak w poniższym kodzie:

LiquidCrystal lcd(5, 6, 7, 8, 9, 1);

 

Link do komentarza
Share on other sites

@toms witam na forum 🙂 Tak, możesz zmienić konfigurację pinów. Pamiętaj tylko, że podłączenie czegoś do pinów 0 i 1 może blokować czasami programowanie układu. To nic strasznego, ale trzeba o tym pamiętać - w razie problemu wystarczy odłączyć dany układ, a programowanie przebiegnie normalnie.

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

Dzień dobry
czy chcąc wyświetlić nowy tekst na wyświetlaczu za każdym razem zanim użyję funkcji print() muszę używać funkcji clear()? Czy ten tekst po prostu się nadpisze?

Edytowano przez HrD
Link do komentarza
Share on other sites

@HrD tekst się nadpisze o ile jest tej samej długości lub dłuższy. Ale jeżeli np wyświetliłeś 1234, a teraz 567 to uzyskasz 5674.

Edytowano przez Gieneq
  • Pomogłeś! 1
Link do komentarza
Share on other sites

2 godziny temu, Gieneq napisał:

@HrD tekst się nadpisze o ile jest tej samej długości lub dłuższy. Ale jeżeli np wyświetliłeś 1234, a teraz 567 to uzyskasz 5674.

Teraz wszystko jest dla mnie jasne. Dziękuję za odpowiedź! 🙂

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.