• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Współpraca dwóch liczników
#1
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ę.
 
Odpowiedź
#2
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.
 
Odpowiedź
#3
?.....
 
Odpowiedź
#4
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ę

.
 
Odpowiedź
#5
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;
        }       
      }
}
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości