Arduino Polska Forum

Pełna wersja: Współpraca dwóch liczników
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam! Chciałbym wykorzystać Arduino Uno do dwóch liczników dwucyfrowe o skróconym cyklu liczenia (na przykład pierwszy liczy tylko od 0 do 25 a drygi do 0 do 36) tak by przepełnienie pierwszego licznika powodowało zwiększenie o 1 wartości drugiego a drugiego wyzerowanie obydwóch i cykl się powtarza. Stany liczników powinny być wyświetlane na dwóch dwu cyfrowych 7-siedmiesegmentowych wyświetlaczach LED - multipleksowo. Mam bardzo słabo opanowane programowanie ale umiem napisać program dla licznika o odpowiedniej ilości cyfr i od ilu i do ilu ma liczyć a wynik wyświetlał się multipleksowo na wyświetlaczach LED. Nie umiem połączyć dwóch liczników (skróconych). Nie znalazłem w sieci podobnych przekładów. Może ktoś mi pomoże z tym problemem. Dziękuję.
Może ten kod coś Ci podpowie:
Kod:
if (millis() - ZapMinutaPracy > 60000UL )
  {
    MinutaPracySystemu = MinutaPracySystemu + 1;
    ZapMinutaPracy = millis();
    if (MinutaPracySystemu == 60)
    {
      GodzinaPracySystemu = GodzinaPracySystemu + 1;
      MinutaPracySystemu = 0;

      if (GodzinaPracySystemu == 24 )
      {
        DzienPracySystemu = DzienPracySystemu + 1;
        GodzinaPracySystemu = 0;
      }
    }

  }
To jest zegar oparty na millis. Masz tam 3 liczniki jeden liczy do 60 (minuty) jak się przepełni to inkrementuje 2 licznik a jak ten się przepełni przy 24 (godzimy) to inkrementuje się 3, który liczy dni. 
Pomyśl jak zaadoptować to do swoich celów. Dodam, że jest to proste.
?.....
Dziękuję. Spróbuję to wykorzystać ale nie umiem obsługi przerwań. Nie dodałem, że zwiększanie stanu pierwszego licznika jest przez jedno z wejść/wyjść Arduino (impuls, przycisk, bariera świetlna, kontaktron itp) a "millisy" potrzebne mi są do multipleksowania. Ale może coś wymyślę

.
Kod:
#define URZADZENIE 2

byte licznik[2] = { 0, 0 };

void setup()
{
  pinMode(URZADZENIE, INPUT_PULLUP);
}

void loop()
{
      if(digitalRead(URZADZENIE) == LOW)  // jesli wcisnieto przycisk
      {
        if(licznik[0] < 26)
        {
          licznik[0] ++;
        }
        else
        {
          licznik[0] = 0;
          licznik[1] ++ ;
        }

        // --------------------------------
        if(licznik[1] >36)
        {
          licznik[1] = 0;
        }       
      }
}