Skocz do zawartości

LCD miga. Co jest nie tak z tym kodem? (Arduino)


Nocti

Pomocna odpowiedź

#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x3F,2,1,0,4,5,6,7);
  
  String a[14];
  
void setup()
  { 
    lcd.begin (16,2);
    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); 
    lcd.setBacklight(HIGH); 
    
    pinMode(13,OUTPUT);
    pinMode(12, INPUT_PULLUP);
    
    a[14]="434.30";
    a[13]="426.03";
    a[12]="664.01";
    a[11]="649.35";
    a[10]="568";
    a[9]="346";
    a[8]="256";
    a[7]="545.44";
    a[6]="454";
    a[5]="265.26";
    a[4]="257.04";
    a[3]="364.03";
    a[2]="858";
    a[1]="750.10";
    a[0]="100";
    
  }

      
void loop()
  {
    lcd.setCursor(0,0);
    lcd.print("Aktualny: ");
    lcd.print(a[1]);
    lcd.setCursor(0,1);
    lcd.print("Nastepny: ");
    lcd.print(a[0]);
    
    if(digitalRead(12) == LOW); //Jeśli przycisk wciśnięty
      {
        digitalWrite(13, HIGH); //Włącz diodę
        delay(100);
        digitalWrite(13,LOW);
      }
   }

Po wgraniu podświetlenie wyświetlacza LCD miga, i niczego nie wyświetla.

Proszę o pomoc!

Z góry dziękuję!

Link do komentarza
Share on other sites

@Nocti, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

18 godzin temu, Nocti napisał:

Po wgraniu podświetlenie wyświetlacza LCD miga, i niczego nie wyświetla.

Wyświetlasz dane na LCD w pętli, bez żadnego opóźnienia. Wyświetlacze tego typu nie nadają się do takich szybkich operacji. Jeśli dobrze rozumiem to w Twoim programie w koło wyświetlasz dokładnie to samo na LCD. Nie ma więc sensu robić tego w pętli. Wyświetl tekst raz i nie wysyłaj go ciągle od nowa na ekran, wtedy nic nie będzie migało.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

@Treker, dzięki za odpowiedź!

Chciałbym cię zapytać o jeszcze jedną rzecz. Mój program ma zwiększać wyświetlany "poziom" tablicy o  jeden. problem jest w tym że nie wiem, jak zrobić, aby po jednym naciśnięciu tablica zmieniał się o jeden, nawet jeżeli naciskam przycisk długo.(później zamierzam zrobić coś jeszcze w tym programie po przytrzymaniu przycisku.)Teraz po naciśnięciu przycisku pętla while wykonuje się kilka razy.

Ps. Przepraszam, że problem opisuje dosyć nieudolnie ale pisze to na kolanie.

Na razie kod wygląda tak:

#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C  lcd(0x3F,2,1,0,4,5,6,7);
  
  int array[15] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
  int i,b;
void setup()
  { 
    pinMode(13,OUTPUT);
    pinMode(12, INPUT_PULLUP);
    lcd.begin (16,2);
    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); 
    lcd.setBacklight(HIGH);
    
  }
      
void loop()
  {
    String a[15];

    int b=0;

    a[14]="434.30";
    a[13]="426.03";
    a[12]="664.01";
    a[11]="649.35";
    a[10]="568";
    a[9]="346";
    a[8]="256";
    a[7]="545.44";
    a[6]="454";
    a[5]="265.26";
    a[4]="257.04";
    a[3]="364.03";
    a[2]="858";
    a[1]="750.10";
    a[0]="388";
    
    while (digitalRead(12) == LOW) 
    {
       
  
      lcd.setCursor(0,0);
      lcd.print("Aktualny: ");
      lcd.print(a[b]);
      lcd.setCursor(0,1);
      lcd.print("Nastepny: ");
      lcd.print(a[b+1]);

       b++;

       
       
      if (digitalRead(12) == LOW) //Jeśli przycisk wciśnięty
      { 
      digitalWrite(13, HIGH); //Włącz diodę   
      } 
      else //Jeśli warunek nie został spełniony (przycisk nie jest wciśnięty)
      { 
      digitalWrite(13, LOW); //Wyłącz diodę
      }    

    }

  }

 

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

5 godzin temu, Nocti napisał:

Chciałbym cię zapytać o jeszcze jedną rzecz. Mój program ma zwiększać wyświetlany "poziom" tablicy o  jeden. problem jest w tym że nie wiem, jak zrobić, aby po jednym naciśnięciu tablica zmieniał się o jeden, nawet jeżeli naciskam przycisk długo.(później zamierzam zrobić coś jeszcze w tym programie po przytrzymaniu przycisku.)Teraz po naciśnięciu przycisku pętla while wykonuje się kilka razy.

Po pierwsze, poczytaj o drganiach styków. Po drugie, musisz reagować na zbocze (np. puszczenie przycisku), a nie na sam fakt zwarcia wejścia do masy. Jeśli będziesz inkrementował pozycję za każdym razem, gdy przycisk jest wciśnięty to Arduino zdąży zwiększyć zmienną tysiące razy nawet, jeśli będziesz starał się wciskać przycisk bardzo szybko. Taka pętla bez opóźnień wykonywana jest "miliony razy na sekundę", Twoje wciśnięcie dla Arduino jest wiecznością 😉

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Cześć!!!😀

Przepraszam, że tak długo nie odpowiadałem.  Za namową @Treker , poczytałem trochę o drganiach styków. Pogrzebałem trochę w internecie i znalazłem bibliotekę Easy Button. 

Dzięki niej rozwiązałem problem.

Kod trochę się pozmieniał :

#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <EasyButton.h>

#define czasDef 1000
#define czas000 5000
#define czasPrzy 5000
#define BACKLIGHT_PIN 3

LiquidCrystal_I2C  lcd(0x3F,2,1,0,4,5,6,7);
EasyButton zatw(A0);
EasyButton wdol(A1);
EasyButton wgore(A2);

  int array[15] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
  String a[17];
  int b=0; 
  
void setup()
  { 
    Serial.begin(115200);
    zatw.begin();
    wdol.begin();
    wgore.begin();
    
    zatw.onPressed(ztawierdz);
    wdol.onPressed(dol);
    wgore.onPressed(gora);
    
    pinMode(13,OUTPUT);
    lcd.begin (16,2);
    lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); 
    lcd.setBacklight(HIGH);

    lcd.setCursor(0,0);
    lcd.print("Aktualny: ");
    lcd.print(a[b]);
    lcd.setCursor(0,1);
    lcd.print("Nastepny: ");
    lcd.print(a[b+1]);

    a[16]="------";
    a[15]="------";
    a[14]="15.30";
    a[13]="14.03";
    a[12]="13.01";
    a[11]="12.35";
    a[10]="11";
    a[9]="10";
    a[8]="9";
    a[7]="8.44";
    a[6]="7";
    a[5]="6.26";
    a[4]="5.04";
    a[3]="4.03";
    a[2]="3";
    a[1]="2.10";
    a[0]="1";
  }
  
 void ztawierdz() 
  {
     Serial.println("zatwierdzono!!!"); //Niedokończone
  }
  
 void dol() 
  {
    if(b<16){    
    lcd.clear();
    Serial.println("w dol!!!");
    digitalWrite(13, HIGH);
 
    lcd.setCursor(0,0);
    lcd.print("Aktualny: ");
    lcd.print(a[b]);
    lcd.setCursor(0,1);
    lcd.print("Nastepny: ");
    lcd.print(a[b+1]);
    
    b--;
    } 
    else b=0;
  }
  
  void gora() 
  {
    if(b<16)
    {
    lcd.clear();
    Serial.println("w gore!!!");
    lcd.setCursor(0,0);
    lcd.print("Aktualny: ");
    lcd.print(a[b]);
    lcd.setCursor(0,1);
    lcd.print("Nastepny: ");
    lcd.print(a[b+1]);
    
    b++;
    }
  }

void loop()
  {
    zatw.read();
    wdol.read();
    wgore.read();
  }

 

  • Lubię! 1
Link do komentarza
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...

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.