Skocz do zawartości

Miganie cyfr na wyświetlaczu LCD


Piotr8801

Pomocna odpowiedź

Witam, potrzebuję pomocy w ustawienie na wyświetlaczu lcd 16x02 migania litery. W kodzie ma to wyglądać mniej więcej tak:

Program staruje i na wyświetlaczu pojawia się wartość temperatury która ma migać, miga do tej pory aż ustawimy żądaną temperaturę i wtedy wciskamy przycisk OK i przestaje migać wartość ustawiona. Czy ktoś jest w stanie coś podpowiedzieć?? 

 

Z góry dzięki za pomoc.

Edytowano przez Piotr8801
Link do komentarza
Share on other sites

Statyczna zmienna + MILLIS ( i z tego co pamietam liczby musisz do bufora (CHAR) wrzucac (TEMPERATURA)

unsigned long aktualnyCzas = 0;    
unsigned long zapamietanyCzas1 = 0;    // dla millis
unsigned long roznicaCzasu1 = 0;       // dla millis

#define rozmiar 4
int temp[rozmiar];

bool ustawione = false;


void MRUGAJ()
{
  char temperatura[12];             // 00.00 st.C to 10 znaków (dodajemy zapas 2 bajtów)
  char bufor[4];      
 
  sprintf(bufor, "%d", temp[0]);   
  strcpy(temperatura,bufor);        // 0
  sprintf(bufor, "%d", temp[1]);   
  strcat(temperatura,bufor);        // 00
  strcat(temperatura,".");          // 00.
  sprintf(bufor, "%d", temp[2]);    
  strcat(temperatura,bufor);        // 00.0
  sprintf(bufor, "%d", temp[3]);   
  strcat(temperatura,bufor);        // 00.00
  strcat(temperatura, " st.C");     // 00.00 st.C
  
  static int mrugaj = 0;
  
  if (mrugaj)                      
  {
    lcd.setCursor(1,1);
    lcd.print(temperatura);    // 00.00 st.C
    mrugaj = 0;
  }
  else           
  {
    lcd.setCursor(1,1);
    lcd.print("       st.C");  //       st.C
    mrugaj = 1;
  }
}

void setup()
{
 	for(byte index = 0; index < rozmiar; index ++) temp[index] = 0; //zerowanie tablicy
}

void loop()
{
  aktualnyCzas = millis();                                    
  roznicaCzasu1 = aktualnyCzas - zapamietanyCzas1;         
	
  if (roznicaCzasu1 >= 1000UL)                    // wykonuj co 1 sekundę
  {  
    if(!ustawione)  // jesli ustawione przestawić : ustawione = true;
    {
      MRUGAJ();
    }
     	
    zapamietanyCzas1 = aktualnyCzas;                       
  }    
  
  // gdzieś coś twój przycisk i tam przestawiasz ustawione na true by wylaczyc funkcję MRUGAJ

    
}

 

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

3 minuty temu, Piotr8801 napisał:

Dzięki wielkie za pomoc, już biorę się do dalszej pracy 🙂

jak będziesz chciał zeby mrugało z inna czestotliwoscia to zmien to if (roznicaCzasu1 >= 1000UL)
 

1000UL - ok. 1 sekunda
2000UL - ok. 2 sekund

itp itd

  • Pomogłeś! 1
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

42 minuty temu, Piotr8801 napisał:

tak, to już że w tym miejscu się zmienia.

Dzięki wielkie 🙂 

a w jaki sposob to przyciskiem ustawiasz ? osobno jednosci i dziesiatki ? bo jak na jednej zmiennej (bo w sumie masz gotowca) to matematycznie rozwalaj to. W trakcie ustawien tez to ci bedzie mrugac

 

int wartosc = 0;
if (przycisk_plus) wartosc++;
else
if (przycisk_minus) wartosc--;

tab[0] = wartosc / 10;  // bez reszty z dzielenia (przed .)  0x.xx
tab[1] = wartosc % 10; // reszta z dzielenia (przed .)       x0.xx

 

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

Program ma wyglądać tak że :

Po wystartowaniu programu pojawia się napis na 5 sekund, znika i mamy widok jak na załączonym obrazku.

Ustawiamy żądaną temperaturę i zatwierdzamy przyciskiem OK(wtedy temperatura USTAWIANA przestaje migać),  program sterowania serwem rusza i w drugiej linii wyświetlacza startuje zegar liczący czas, Jeśli wciśniemy drugi raz OK -zegar się restartuje  i program wraca do trybu ustawiania.

W ustawieniach serwa powinno być tak że temp.ustawiana = temp.bierzącej serwo jest w położeniu pozycji środkowej

Każde 0,5 st.C - wychyla serwo o 5 stopnia (w jedną stronę gdy temp. jest za niska i w drugą stronę gdy temp. jest za wysoka.

jestem początkującym ale takie podstawy proste umiem, więc zrobiłem początek sam wraz z miganiem temp. (dzięki Tobie), odczyt z czujnika i zegar.

Więc teraz dużo trudniejsze zostało... 🙂

program.png

IMG_20210524_131259.jpg

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.