Skocz do zawartości

Prosty minutnik na Arduino


tiger333

Pomocna odpowiedź

Witam, jestem tu nowy uczę się dopiero Arduino, ale wpadłem na pomysł by zrobić projekt minutnika, który będzie odmierzał ustawiony czas, pokazując na wyświetlaczu 2X16. Sterowanie odbywa się za pomocą 3 przycisków. Pierwszy zeruje pomiar, drugi go ustawia, a trzeci startuje odliczenie. Udało mi się ustawiać czas, ale problem jest z jego odliczeniem, znalazłem coś takiego jak biblioteka timers, ale nie wiem czy to pomoże. Chciałbym, aby odmierzenie było widoczne na wyświetlaczu. Oto kod, który dotychczas stworzyłem. Próbowałem analogicznie do tego zrobić odliczanie, ale niestety nie działa.

#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);
byte sekundy=0;
byte minuty=0;
byte godziny=0;                 
bool statusMinutnika=0;


void setup() {
lcd.begin(16,2);
pinMode(8, INPUT_PULLUP);  // ustawienie pinów
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
lcd.setCursor(0,1);
lcd.print("00:00:00");
}

void loop() {
  lcd.setCursor(0,0);
lcd.print("Pomiar");
if (digitalRead(9)==LOW){  // zeruje pomiar
  sekundy=0;
  minuty=0;
  godziny=0;
  lcd.setCursor(0,1);
  lcd.print("00:00:00");
  statusMinutnika=0; 
}
if (digitalRead(8)==LOW){  // wciśnięcie przycisku do ustawienia czasu
 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(100);
   zapamietanyCzas=digitalRead(8);
 }

  }
  
 }

 

Edytowano przez tiger333
Link do komentarza
Share on other sites

Tu na stronie jest kurs Arduino, a w nim millis(), to wystarczy do prostego odmierzania czasu w timerze. Co do przycisków, do startu, zatrzymania i kasowania wystarczy 1 przycisk (gdy nie chodzi to startuje, gdy chodzi to zatrzymuje, przyciśnięcie dłużej robi restart), pozostałe dwa mogą zwiększać/zmniejszać nastawę.

Kurs raczej zacznij od początku.

Link do komentarza
Share on other sites

9 godzin temu, tiger333 napisał:

Udało mi się ustawiać czas, ale problem jest z jego odliczeniem, znalazłem coś takiego jak biblioteka timers, ale nie wiem czy to pomoże. Chciałbym, aby odmierzenie było widoczne na wyświetlaczu. Oto kod, który dotychczas stworzyłem. Próbowałem analogicznie do tego zrobić odliczanie, ale niestety nie działa.

Co dokładnie sprawia Ci największy problem? Zadałeś dość ogólne pytanie - ciężko o jakąś inną wskazówkę oprócz ewentualnego gotowca, a nie o to tutaj chodzi 😉

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

Spróbuj podzielić sobie problem na mniejsze części. Zacznij od samego odliczania np. sekund, jesteś w stanie to napisać? Taki stoper, ale działający w drugą stronę 😉

Link do komentarza
Share on other sites

Gość

Trzeba pamiętać, że taki "zegar" nie będzie zbyt dokładny. Aby z arduino zrobić prawdziwy real time clock trzeba zmienić kwarc na zegarkowy i zastosować taktowanie asynchroniczne. Jak byś potrzebował z tym pomocy to pisz. pozdr

Link do komentarza
Share on other sites

Na tym etapie i przy tego typu projekcie raczej wystarczy spokojnie dokładność uzyskiwana dzięki millis. RTC to dobry pomysł na kolejny krok i rozbudowę projektu, ale nie jest to raczej niezbędne 😉

Link do komentarza
Share on other sites

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

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.