Skocz do zawartości
Komentator

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

Pomocna odpowiedź

Mam pytanie. Kupiłem wyświetlacz (akurat niebieski nie czerwony). Wszystko jest ok, ale przy numerach pinów mam otwory a nie piny. Jak to podłączyć?

Udostępnij ten post


Link to post
Share on other sites

JurijR13, musisz kupić i przylutować odpowiednie złącza. W zestawach do kursu przygotowanych przez Forbota znajdują się wyświetlacze z już wlutowanymi złączami - aby ułatwić start początkującym 🙂

Udostępnij ten post


Link to post
Share on other sites

Mam takie pytanie. Otóż wszystko działa ok, ale jest problem. Czasem, gdy włączam lub ładuję program na płytkę na ekranie pokazują się jakieś dziwne ciągi znaków. OmegaB*9G coś w ten deseń (podaję przykładowo, bo kombinacje są różne). Czy to problem z płytką, wyświetlaczem czy coś robię źle?

Udostępnij ten post


Link to post
Share on other sites

JurijR13, pokaż konkretny program, jaki konkretnie LCD kupiłem i do czego go podłączasz.

Udostępnij ten post


Link to post
Share on other sites

Zadania 7.1

Zadanie 7.4

Trochę długi ten kod wyszedł ale chyba nie da się krócej, przynajmniej z komendami, które były dotychczas w kursie.

#include <LiquidCrystal.h>

LiquidCrystal lcd (13,11,9,7,5,3);
byte sekundy = 0;
byte minuty = 0;
byte godziny = 0;
bool statusStopera = 0;

void setup() {
 lcd.begin(16,2);
 pinMode(0, INPUT_PULLUP);
 pinMode(1, INPUT_PULLUP);
 lcd.setCursor(0,0);
 lcd.print("Stoper");
 lcd.setCursor(0,1);
 lcd.print("00:00:00");

}

void loop() {
 if (digitalRead(0) == LOW && digitalRead(1) == LOW){ // wcisniecie obu guzikow zeruje stoper
   sekundy = 0;
   minuty = 0;
   godziny = 0;
   lcd.setCursor(0,1);
   lcd.print("00:00:00");
   statusStopera = 0;
 }
 if (digitalRead(0) == LOW){     // wlaczenie stopera 
   statusStopera = 1;
 }
 if (digitalRead(1) == LOW){     // zastopowanie stopera
   statusStopera = 0;
 }
 if (statusStopera == 1){        // zaczyna odliczanie po wcisnieciu pierwszego guzika
   sekundy = sekundy + 1;
   if (sekundy == 60){           // zmienia 60 sekund na kolejna minute
     minuty = minuty + 1;
     sekundy = 0;
     if (minuty == 60){          // zmienia 60 minut na kolejna godzine
       godziny = godziny + 1;
       minuty = 0;
       if (godziny < 10){        // ustawia kursor w odpowiednie miejsce dla godzin
         lcd.setCursor(1,1); 
       } else {
         lcd.setCursor(0,1);
       }
       lcd.print(godziny);
       lcd.setCursor(3,1);
       lcd.print("00");         // zeruje minuty na wyswietlaczu po przekroczeniu 59
     }
     if (minuty < 10){          // ustawia kursor w odpowiednie miejsce dla minut
       lcd.setCursor(4,1);
     } else {
       lcd.setCursor(3,1);
     }
     lcd.print(minuty);
     lcd.setCursor(6,1);
     lcd.print("00");          // zeruje sekundy na wyswietlaczu po przekroceniu 59
   }
   if (sekundy < 10){          // ustawia kursor w odpowiednie miejsce dla sekund
     lcd.setCursor(7,1);
   } else {
     lcd.setCursor(6,1);
   }
   lcd.print(sekundy);
   delay(1000);
 }
}

Jedyne co mi tu przeszkadza to to, że żeby zastopować stoper trzeba guzik trzymać około sekundę. Czas zmierzy dobrze bo nie przeskoczy do następnej sekundy ale denerwuje mnie to.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

hawaya, z problemem, o którym piszesz można sobie poradzić dość łatwo. Za jakiś czas pojawi się artykuł, który to wyjaśni 🙂

Udostępnij ten post


Link to post
Share on other sites

Witam, mam problem poniewaz pomimo dobrego podlaczenia i wgranego pierwszego programu na ekranie nadal sa czarne prostokaty na gornym pasku i dolne prostokaty sa zapalone tylko w gornej czesci :/ kontrast ustawilem poprawnie, polaczenia kabli takze sprawdzilem kilka razy i wszystkie sa poprawnie podlaczone :/

Udostępnij ten post


Link to post
Share on other sites

Mehip, milionom osób działa, więc jednak coś musi być u Ciebie nie tak. Na pewno wgrałeś dobry program? Nie pomyliłeś numeracji pinów wyświetlacza?

Udostępnij ten post


Link to post
Share on other sites

[ Dodano: 28-11-2015, 13:47 ]

Tak wyglada cały układ

A na ekranie wyswietla sie cos takiego jak na 3 zdjeciu

DSC_0921.thumb.JPG.7b29b343f3dd1ef0cf775bf6981f9679.JPG

DSC_0922.thumb.JPG.81c2aaf8a099a84c4a9379e8dba5cc82.JPG

DSC_0923.thumb.JPG.9950a70cb0b2fd6994c330cae82a8bd8.JPG

Udostępnij ten post


Link to post
Share on other sites

Mehip, czy są to elementy z zestawów Forbota? Gdzie jest potencjometr od kontrastu?

Udostępnij ten post


Link to post
Share on other sites
Zadanie 7.4
#include <LiquidCrystal.h>
#define przyciskStart 8
#define przyciskStop 9
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
double czasStart;
double czasStop;
bool start = false;

void setup() {
 // put your setup code here, to run once:
 lcd.begin(16, 2);
 pinMode(przyciskStart, INPUT_PULLUP);
 pinMode(przyciskStop, INPUT_PULLUP);
 millis();
}

void loop() {
 poczatek();
 stoperStart();
 stoperStop();
}

void poczatek() {
 if (start == false) {
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Wcisni przycisk");
   lcd.setCursor(0, 1);
   lcd.print("start");
   delay(5);
 }
}
void stoperStart() {
 while (digitalRead(przyciskStart) == LOW) {
   czasStart = millis() / 1000.0;
   lcd.clear();
   start = true;
 }
 if (start == true) {
   lcd.setCursor(0, 0);
   lcd.print("Aktualny czas");
   lcd.setCursor(0, 1);
   lcd.print((millis() / 1000.0) - czasStart);
   lcd.print("sek");
 }
}

void stoperStop() {
 while (digitalRead(przyciskStop) == LOW) {
   czasStop = millis() / 1000.0;
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("Koniec");
   lcd.setCursor(0, 1);
   lcd.print(czasStop - czasStart);
   lcd.print("sek");
   delay(4000);
   start = false;
 }
}

dlaczego ten programda radę zrobić na samych pętlach if a nie da się na pętlach while ?

Udostępnij ten post


Link to post
Share on other sites

tarkki, mógłbyś sprecyzować swoje pytanie? Niestety nie rozumiem...

Udostępnij ten post


Link to post
Share on other sites

"if" nie jest pętlą - to instrukcja warunkowa. Choć jakby zejść do poziomu Assemblera, to wszelkie pętle to if + goto.

Udostępnij ten post


Link to post
Share on other sites

dlaczego po zastąpieniu if while program stoi w miejscu ( początek ). Czy while ma większy priorytet niż if ? a jeśli są same while to wykonywana jest po prostu pierwsza pętla while tylko ?

Udostępnij ten post


Link to post
Share on other sites

tarkki, ale w którym miejscu to zastąpiłeś? I w jakim celu? Wiesz, co robią instrukcje if i while?

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