Skocz do zawartości
Komentator

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

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.

Udostępnij ten post


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

Udostępnij ten post


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

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites

U mnie się zlewało. Ale też odświeżałem co milisekundę.

Udostępnij ten post


Link to post
Share on other sites

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 ?

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites

Miałem problem i go pokonałem sam, a to efekt mojej pracy 🙂

Arduino Uno

Arduino Leonardo

Wystarczyło zainstalować najnowszą wersję IDE i wszystko śmiga 😋

Udostępnij ten post


Link to post
Share on other sites

hob_bit, super, że się udało! Powodzenia w dalszej zabawie z LCD 🙂

Udostępnij ten post


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

Udostępnij ten post


Link to post
Share on other sites

hob_bit, każda reklama jest dobra - dzięki 🙂

Akurat te funkcje do przewijania miałem w planach opisać za jakiś czas w kolejnych częściach.

Udostępnij ten post


Link to post
Share on other sites

Mechano, a z tą Ci nie działa, gdy zadeklarujesz odpowiedni rozmiar wyświetlacza?

Udostępnij ten post


Link to post
Share on other sites

Jeszcze nie prowadziłem prób. Ten projekt jest jeszcze w fazie projektowania ale zastanawiam się czy arduino mi to obsłuży.

Udostępnij ten post


Link to post
Share on other sites

Mechano, powinno 😉

  • Lubię! 1

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!

Gość
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...