cztery wchodzące sygnały logiczne generują sygnał na wyjściu

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
benex
Młodszy majsterkowicz
Posty: 1
Rejestracja: 21 cze 2014, 22:40

cztery wchodzące sygnały logiczne generują sygnał na wyjściu

Post autor: benex » 21 cze 2014, 22:48

Witam serdecznie, mam problem z realizacją projektu na zaliczenie, mianowicie cztery kolejno sygnały logiczne wyzwalają jeden sygnał na wyjściu, temat wydaje mi się łatwy, jednak pozornie. Dysponuję procesorem atmega328p w ramach prób postanowiłem użyć swicha któremu odfiltrowałem drgania styków 100omów i 22nF, niestety kod nie działa i wszelkie próby nie przynoszą rezultatu. Oto kod jaki stworzyłem:

#define led 3
#define przycisk 4

void setup() {
pinMode(przycisk,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,LOW);
}
byte licznik=0;
void loop() {
if (digitalRead(przycisk)) { // jesli nacisniety 1
delay(10);
while (digitalRead(przycisk)) { // czeka na puszczenie
}
licznik++;
delay(10);
}
if (licznik==4) digitalWrite(led,HIGH);
}

W czym tkwi problem? Wszelkie rady miło widziane! Pozdrawiam!

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


Awatar użytkownika
cube
Złota rączka
Posty: 834
Rejestracja: 2 gru 2012, 17:02

Re: cztery wchodzące sygnały logiczne generują sygnał na wyj

Post autor: cube » 26 cze 2014, 12:32

Jeden ze styków każdego przycisku do wejścia obsługującego przerwanie (można wszystkie przyciski pod jeden pin). Druga para styków do wejść. W momencie naciśnięcia przycisku dopiero wywołuje się funkcja odczytu ich stanów. W skrócie: attachInterrupt(); .
Awatar użytkownika
ololuki
Młodszy majsterkowicz
Posty: 16
Rejestracja: 22 kwie 2014, 10:15
Kontakt:

Re: cztery wchodzące sygnały logiczne generują sygnał na wyj

Post autor: ololuki » 27 cze 2014, 12:55

Używanie przerwań zewnętrznych do obsługi klawiatury ma sens jedynie wtedy, gdy zależy nam na zminimalizowaniu poboru prądu i korzystamy z trybów uśpienia procesora. Poza tym filtrowanie drgań styków w przypadku korzystania z przerwania zewnętrznego jest bardziej skomplikowane, gdyż musimy odfiltrować nie tylko te przy naciskaniu ale również te przy puszczaniu przycisku.
Najprościej do obsługi klawiszy użyć cyklicznego odczytu stanu wejść w przerwaniu od timera, mniej więcej co 10 - 20 ms i w przypadku wykrycia niskiego stanu na wejściu z klawiszem, ustawić flagę i zablokować odczytywanie tego wejścia na dłuższy czas, powiedzmy 1 sekundę, bądź do momentu skasowania ustawionej flagi przez funkcję która ma reagować na wciśnięcie klawisza.
Teraz w pętli głównej programu możemy skorzystać z naszej flagi, jeśli jest ustawiona to kasujemy ją i zwiększamy nasz licznik, potem sprawdzamy czy doszedł do 4 i ewentualnie ustawiamy wyjście odpowiednio.
W przypadku korzystania z przerwań od timera do obsługi klawisza nie potrzebujemy żadnych dodatkowych filtrów RC, przerzutników, a w przycisku wykorzystujemy tylko jeden styk.
ODPOWIEDZ

Strony partnerskie: