Skocz do zawartości

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


Pomocna odpowiedź

Dnia 2.05.2025 o 09:49, Treker napisał:

Co się zmieniło, że nagle cały wyświetlacz przestał działać?

Zmieniłem podświetlenie, chciałem pokazać, że nie jestem w stanie osiągnąć efektu samych czarnych pól. W każdym razie obawiałem się, że może to być wyświetlacz, kupię drugi i wtedy potwierdzę.

  • Lubię! 1
  • 3 miesiące później...

Witam, jestem na 100% pewien że podłączyłem wszystko prawidłowo, przewody są sprawne, potencjometr też ale nie ważne jak bardzo pokręcę potencjometrem kontrast mi się nie zmienia i nie wyświetlają mi się kwadraciki tak jak powinny. Może mam niesprawny wyświetlacz? Jeśli tak to czy jest jakaś opcja żeby to sprawdzić inna niż zakup nowego?

obraz_2025-08-07_180700307.png

@Icp1538 witam na forum 🙂 Pokaż proszę więcej zdjęć, aby można było sprawdzić całe połączenia. Chyba jeszcze nie było przypadku, aby komuś trafił się uszkodzony wyświetlacz, więc raczej doszukiwałbym się problemów w połączeniach. Jeśli uważasz, że połączenia są na 100% poprawne to zgłoś reklamację do Botlandu na uszkodzony wyświetlacz - na pewno szybko pomogą.

  • Lubię! 1

Oto mój kod z zadania 7.4

#include <LiquidCrystal.h> //otwieramy biblotekę od ekranu lcd

#define przyciskStart 9 //przypisujemy piny
#define przyciskStop 8

LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //przypisujemy odpowiednie piny do ekranu

unsigned long czasStart = 0; //ustawiamy zmienne
unsigned long czasWynik = 0;
bool stoperWlaczony = false; 

void setup() {
  lcd.begin(16, 2); //ustawiamy ekran
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Stoper gotowy");

  pinMode(przyciskStart, INPUT_PULLUP); //ustawiamy piny jako przycisk
  pinMode(przyciskStop, INPUT_PULLUP);
}

void loop() {

//start
  if (digitalRead(przyciskStart) == LOW && stoperWlaczony == false) { //ustawiamy warunki
    delay(50);
    czasStart = millis();
    stoperWlaczony = true;
    lcd.clear();
    lcd.print("Czas: 00:00:00");
  }
  
//stop
  if(digitalRead(przyciskStop) == LOW && stoperWlaczony == true) { //ustawiamy warunki
    delay(50);
    czasWynik = (millis() - czasStart) / 1000; //obliczamy czas w sekundach
    stoperWlaczony = false;

    unsigned long h = czasWynik / 3600; przeliczamy czas z ms na sekundy, minuty i godziny
    unsigned long m = (czasWynik % 3600) / 60;
    unsigned long s = czasWynik % 60;
    
    lcd.clear(); //piszemy wynik końcowy na ekranie
    lcd.print("Koniec");
    lcd.setCursor(0, 1);
    if(h<10) lcd.print("0");
    lcd.print(h);
    lcd.print(":");
    if(m<10) lcd.print("0");
    lcd.print(m);
    lcd.print(":");
    if(s<10) lcd.print("0");
    lcd.print(s);
  }

//obraz na żywo
  if (stoperWlaczony == true) { //ustawiamy warunek

    unsigned long aktualnyCzas = (millis() - czasStart) / 1000; //przeliczamy czas z ms na sekundy, minuty i godziny
    unsigned long h = aktualnyCzas / 3600;
    unsigned long m = (aktualnyCzas % 3600) / 60;
    unsigned long s = aktualnyCzas % 60;

    lcd.setCursor(6, 0); //wyświetlamy aktualny czas 
    if(h<10) lcd.print("0");
    lcd.print(h);
    lcd.print(":");
    if(m<10) lcd.print("0");
    lcd.print(m);
    lcd.print(":");
    if(s<10) lcd.print("0");
    lcd.print(s);
  }
  
}

Od razu chciałbym powiedzieć że nie zrobiłem go sam. Do napisania tego użyłem Chat GPT, lecz wszystko co on mi napisał przepisałem ręcznie zwracając uwagę na każdą linijkę kodu. Również wszystkie opisy zostały napisane przeze mnie i poniżej dodaję wyjaśnienie różnych części kodu które mogą się wydawać niezrozumiałe. Uważam, że jest to lepsza opcja niż zostawianie niezrobionego zadania, którego i tak nie wiedziałem jak zrobić.

 

unsigned long czasStart = 0; //ustawiamy zmienne
unsigned long czasWynik = 0;

Zamiast zmiennej int użyłem unsigned long, ponieważ zmienna int może przechowywać maksymalnie 32 767ms co by oznaczało ze stoper po 32 sekundach stawałby się bezużyteczny, a zmienna unsigned  long może przechować aż 4 294 967 295ms co oznacza, że stoper może działać przez aż 49dni bez błędu!

 

//start
  if (digitalRead(przyciskStart) == LOW && stoperWlaczony == false) { //ustawiamy warunki
    delay(50);
    czasStart = millis();
    stoperWlaczony = true;
    lcd.clear();
    lcd.print("Czas: 00:00:00");
  }

Przy warunku postawiłem znaki && co oznacza nic innego jak bramka logiczna AND. W skrócie oznacza to, że żeby ten warunek został wykonany muszą być spełnione te dwa warunki na raz.

Niezrozumiała może być również komenda millis() jest to zegar systemowy, który liczy czas od włączenia zasilania lub resetu Arduino.

 

Reszta powinna być już w pełni dla was zrozumiana. Miłego dnia i dziękuje za wysłuchanie😁

IMG_20250814_130214.thumb.jpg.d81848fea7da9280b08e190da5ce5f35.jpgIMG_20250814_130231.thumb.jpg.2c7c2312ae9f6f1ed9964c6baee88083.jpg

  • 1 miesiąc później...
(edytowany)

Cześć, napotkałem problem którego nie rozumiem. W kursie mamy informację 

Cytat

Doświadczenie może być szkodliwe dla Arduino. Sprawdź, ile prądu pobiera Twoje podświetlenie.

Więc zapobiegawczo: 

1. Podłączam podświetlenie wyświetlacza pod zasilanie stabilizatora lub przetwornicy a VSS i VDD odpowiednio pod GND i 5V w arduino - ok 

2. jw ale VSS i VDD podpinam pod zasilanie stabilizatora lub przetwornicy. Pojawia się mnóstwo losowych znaków poza tymi które posłałem na wyświetlacz. 

[edit] 
Wygląda to na problem ze stabilnością (jakością) mojego zasilania. 
 

Edytowano przez mcm83
  • Lubię! 1
  • 4 tygodnie później...

Zadanie 7.4 

Witam. Udało mi się napisać ten program w taki sposób, że jednym przyciskiem uruchamiamy i wyłączamy pomiar. 

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
unsigned long czasPoUruchomieniu = 0;
unsigned long czasOdZera = 0;
unsigned long zapisanyCzas = 0;
boolean petla1 = 0;

void setup() {
pinMode(8, INPUT_PULLUP); 
pinMode(9, INPUT_PULLUP); 
Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();

}

void loop() {
czasPoUruchomieniu = millis();
if (digitalRead(8) == 0) {
  petla1 = 1;
  lcd.clear();
  delay(200);
  zapisanyCzas = czasPoUruchomieniu;
}

while (petla1 == 1) {
  czasPoUruchomieniu = millis();
  lcd.setCursor(0, 0);
  lcd.print("Pomiar");
  czasOdZera = abs(czasPoUruchomieniu - zapisanyCzas) / 1000;
  lcd.setCursor(0, 1);
  lcd.print(czasOdZera);
  if (digitalRead(8) == 0) {
    petla1 = 0;
    zapisanyCzas = czasPoUruchomieniu;
    delay(200);
    lcd.clear();
  }
 
 
}
lcd.setCursor(0, 0);
lcd.print("Koniec");
lcd.setCursor(0, 1);
lcd.print(czasOdZera);
}

 

  • Lubię! 1
  • 5 miesiące później...
(edytowany)

odblokowalem easter egg bo jezeli odlacze pin piąty  to caly tekst zacznie sie ruszac w kodzie tego nie bylo i jezeli wepne z powrotem to sie przestanie ruszac ; daje link do pobrania nagrania:https://mega.nz/file/SeQixTxL#4SOwzy39siwN982A132v1Ph6xJD7vRFUbarQlj-dMP4

#include <LiquidCrystal.h> //Dołączenie bilbioteki
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Informacja o podłączeniu nowego wyświetlacza

void setup() {
  lcd.begin(16, 2); //Deklaracja typu
  lcd.setCursor(0, 0); //Ustawienie kursora
  lcd.print("Kurs Arduino"); //Wyświetlenie tekstu
  lcd.setCursor(0, 1); //Ustawienie kursora
  lcd.print("Na Forbocie!"); //Wyświetlenie tekstu
}

void loop() {
  lcd.noCursor(); //Wyłącz kursor
  delay(250); //Odczekaj
  lcd.cursor(); //Włącz kursor
  delay(250); //Odczekaj
}

 

Edytowano przez Igor308

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