Skocz do zawartości
Komentator

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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites

Do czego dokładnie służy rejestr?

Udostępnij ten post


Link to post
Share on other sites

@woskod o co dokładnie pytasz? Możesz podać jakiś kontekst?

Udostępnij ten post


Link to post
Share on other sites

@Treker O piny RS, RW, i E. Wspomniano tam o rejestrze. Do czego on dokładnie służy? Co tam się zapisuje? Z góry dzięki za odpowiedź

Udostępnij ten post


Link to post
Share on other sites

@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

Udostępnij ten post


Link to post
Share on other sites

@pawelmackowski super, działa prawidłowo 🙂 powodzenia w kolejnych zadaniach! 

Udostępnij ten post


Link to post
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);

 

Udostępnij ten post


Link to post
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

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
Share on other sites
(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

Udostępnij ten post


Link to post
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ź! 🙂

Udostępnij ten post


Link to post
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...