Licznik wejść cyfrowych

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
ppisar
Młodszy majsterkowicz
Posty: 4
Rejestracja: 1 lut 2014, 22:46

Licznik wejść cyfrowych

Post autor: ppisar » 10 lut 2014, 22:56

Witam,
Od jakiegoś czasu nie mogę sobie poradzić z moim problemem. Sprawa wydaje się prosta. Chciałbym zrobić taki program, który liczy mi wejścia cyfrowe. Postaram się to jak najprościej opisać.

Mam podpięte trzy czujniki do płytki, które po wysterowaniu dają mi logiczną 1. Na wyświetlaczu mam napis "podpiętych czujników '3' ". Odłączając jeden z nich chciałbym uzyskać napis "podpiętych czujników '2' " i analogicznie "podpiętych czujników '1' ".
Efekt ma działać w drugą stronę czyli dołączając czujniki liczba się będzie zwiększać.
Jest to jedna część z całości programu więc chciałbym aby było to zamknięte w pętli, która zakończy się gdy wszystkie czujniki będą odłączone - "podpiętych czujników '0' " - dalsza część programu

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Malen
Młodszy majsterkowicz
Posty: 27
Rejestracja: 2 sty 2014, 22:47

Re: Licznik wejść cyfrowych

Post autor: Malen » 13 lut 2014, 23:40

Jak są te czujniki podłączone obok siebie np. pin 4, 5, 6 to proponuję taki sposób:

Kod: Zaznacz cały

int tablica[4];

while(){
for(int i=4;i<=6;i++)
{
     if(digitalRead(i)==true)
        tablica[i-4]=1;
     else
       tablica[i-4]=0;

    tablica[3]=tablica[0]+tablica[1]+tablica[2];
    lcd.print(tablica[3]);


}

    if(tablica[3]==0)
       break;
}
Nie wiem tylko jak to podłączyłeś i czy czasami nie bedzie losowych wartości na tych pinach po odłączeniu.
siwy2411
Młodszy majsterkowicz
Posty: 29
Rejestracja: 4 cze 2013, 14:56

Re: Licznik wejść cyfrowych

Post autor: siwy2411 » 14 lut 2014, 11:47

co do powyższej propozycji - wszystko okej, ale używanie inta do przechowywania wartości 0/1 to wytaczanie bomby atomowej na muchę - boolean się kłania!
poza tym, tak jak kolega wspomniał - należy być pewnym, że pin przejdzie w stan niski po odłączeniu czujnika - najprościej zastosować rezystor pull-down. poza tym obsługa taka, jak to zaproponował Ci Malen - sprawdzamy po kolei stany tych pinów i w zależności od ich wartości coś robimy albo nie.
zmodyfikowałbym ewentualnie sposób działania pętli while - nigdy nie byłem fanem wychodzenia z pętli poleceniem "break;" - moim zdaniem lepiej zastosować boolowską zmienną (flagę), której stan determinuje czy kontynuujemy działanie pętli, czy z niej uciekamy.
ODPOWIEDZ

Strony partnerskie: