Skocz do zawartości

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


Komentator

Pomocna odpowiedź

ardKurs_7

Do tej pory nasza komunikacja z płytką Arduino była stosunkowo ograniczona. Mogliśmy użyć diod święcących do sygnalizowania pewnych stanów lub UART do połączenia z komputerem.Ten ostatni sposób pozwalał na stosunkowo dużo jednak był mało mobilny. Teraz przyszła pora na pierwszy program z wykorzystaniem LCD.

UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.

Przeczytaj całość »

Poniżej znajdują się komentarze powiązane z tym wpisem.

Link do komentarza
Share on other sites

Dzięki za kolejny odcinek kursu.Wieczorem jak temperatura otoczenia zacznie spadać, coś zmontuję według powyższych przykładów, bo akurat mam jeden taki wyświetlacz z Botlandu.

Pozdrowił hob_bit z tropikalnej polski wschodniej 🙂

Link do komentarza
Share on other sites

Zadanie 7.1

Jeśli chodzi o 7.2 i 7.3 to niestety nie zauważyłem większej różnicy, no może jedynie trochę trudniej pomiar się stabilizuje, często przeskakuje o wartość 0.01, ale tak to żadnego kłopotu z odczytem nie miałem 😋 chyba,że coś źle zrobiłem.

zadanie 7.4

Chciałem to zrobić inaczej, tak, żeby po wciśnięciu przycisku start stoper czas odmierzał, po wciśnięciu stop czas się zatrzymywał, znowu po wciśnięciu start leciał czas i zatrzymywał po wciśnięciu stop, ale nie mam pomysłu na razie 😋

#include <LiquidCrystal.h>
LiquidCrystal lcd (2, 3, 4, 5, 6, 7);
#define startButton 8
#define stopButton 9
int mins = 0;
int sec = 0;
int ms = 0;
boolean startButtonState;
boolean stopButtonState;
void setup() {
 // put your setup code here, to run once:
 lcd.begin(16, 2);
 lcd.clear();
 lcd.setCursor(0, 0);
 lcd.print("Simple stopwatch");
 lcd.setCursor(0, 1);
 lcd.print("00:00.00");
 pinMode(startButton, INPUT_PULLUP);
 pinMode(stopButton, INPUT_PULLUP);
}

void loop() {
 // put your main code here, to run repeatedly:
 startStopwatch(); //start stopwatch
}
void startStopwatch()
{
 startButtonState = digitalRead(startButton); //read button's state
 if (startButtonState == LOW)//if start button was pressed
 {
   while (1) //while loop to write time and increase it by 'miliseconds' function
   {
     miliseconds();
     stopStopwatch();//check after every single milisecond if "stop button" was pressed and if yes stop increasing time
   }
 }
}

void stopStopwatch()
{
 stopButtonState = digitalRead(stopButton); //read button's state
 if (stopButtonState == LOW)//if button was pressed
 {
   while (1) 
   {
     lcd.setCursor(10, 1);
     lcd.print("Finish"); //display inscription
   }
 }
}

void miliseconds() //display miliseconds
{
 if (ms < 10) //if number needs one position
 {
   lcd.setCursor(7, 1);
   lcd.print(ms);
   lcd.setCursor(6, 1);//before number print "0"
   lcd.print(0);
 }
 else //if number needs two positions
 {
   lcd.setCursor(6, 1);
   lcd.print(ms);
 }
 delay(9);//with 10 ms delay, program was a little bit delayed than the true stopwatch
 ms++;//increase miliseconds
 if (ms == 100) //after every 100 ms
 {
   sec++;//increase seconds by 1
   ms = 0;//zero miliseconds
   seconds();//trigger 'seconds' function
 }
}

void seconds()//display seconds
{
 if (sec < 10)//same as in 'miliseconds'
 {
   lcd.setCursor(4, 1);
   lcd.print(sec);
   lcd.setCursor(3, 1);
   lcd.print(0);
 }
 else
 {
   lcd.setCursor(3, 1);
   lcd.print(sec);
 }
 if (sec == 60)//like in 'miliseconds'
 {
   mins++;
   minutes();
   sec = 0;
   lcd.setCursor(3, 1);
   lcd.print("00"); //print "00" because after every 60 seconds ,there should be counting from the beginning
 }
}

void minutes()
{
 if (mins < 10)//same as in 'seconds'
 {
   lcd.setCursor(1, 1);
   lcd.print(mins);
   lcd.setCursor(0, 1);
   lcd.print(0);
 }
 else
 {
   lcd.setCursor(0, 1);
   lcd.print(mins);
 }
}

Mam nadzieję,że na artykuł o DC będziemy krócej czekać niż na wyświetlacz 😃

Link do komentarza
Share on other sites

Synergia, a gdzie potencjometr od kontrastu podłączony 🙂?

W zadaniach 7.2 oraz 7.3 sprawdź jak będzie zachowywał się wyświetlacz, gdy zmiany będą zachodziły bardzo często. U mnie przy kasowaniu i pisaniu od nowa całego tekstu widać wyraźne miganie. Strasznie zawiły ten ostatni kod 🙂 Nie potrzebnie chyba mieszałeś na początku jeszcze milisekundy, sekundy i minuty. Sam pisałeś całość? łatwiej zacząć od samych sekund (nic mniej, nic więcej).

Tak, silniki DC będą szybciej 😉

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

Z chwilowego braku Arduino Uno, próbowałem dzisiaj wykonać te zadania na Leonardo i poniosłem klęskę 🙁 , czy ktoś z was miał problem na tej płytce z niedziałającą biblioteką LiquidCrystal.h ?

Link do komentarza
Share on other sites

Był, był potencjometr, tylko akurat nie widać go na zdjęciu, bo mi się nóżki wyłamały i przylutowałem do wyjść kabelki 😋

Jeśli chodzi o te dwa zadania, no to powiem szczerze, ledwo co pojawiły się trudności z odczytem, generalnie prawie nic mi nie przeszkadzało w normalnym odczycie wartości na wyświetlaczu 😃

A kod do 7.4 napisałem sam, gdyż w przydługim oczekiwaniu na ten odcinek, sam ogarnąłem co nieco w internecie, napisałem zwykły zegarek i już miałem właściwie 70% roboty z głowy pisząc stoper 😃

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

Dziękuję Treker :)Właśnie zabawiając się LCD, znalazłem taki "myk" do przewijania zapisanego tekstu, czyli w void loop, dodając funkcję lcd.scrollDisplayLeft (lub scrollDisplayRight, zależnie od pożądanego kierunku przewijania)można uzyskać np. taki efekt -https://www.youtube.com/watch?v=TFRQkqmI-Cw

PS.

Wstawiłem ten filmik na G+, jako reklamę, w której zachęcam do odwiedzania tego miejsca w sieci Internet.Mam nadzieję, że nie poczytasz mi tego, za złe 😉

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

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...

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.