Skocz do zawartości

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


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

@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

@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

@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

@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

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);

 

@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
  • 2 tygodnie później...
(edytowany)

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
(edytowany)

@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
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ź! 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...