Skocz do zawartości

Kurs Arduino II - #5 - klawiatura, własny system alarmowy


Pomocna odpowiedź

Racja, bo tak: jak wchodzisz w case 3 to jedyna możliwość żeby zostać w jakimś stabilnym stanie to mieć już wciśnięty przycisk na klawiaturze, ale jak będziesz go trzymał to wyskoczy przy kolejnym obrocie pętli. Twoje ify wewnątrz case 3 muszą mieć jakąś pamięć.

Czyli nie możesz sprawdzać przycisku wewnątrz ifa tylko gdzieś na zewnątrz - nawet w głównej pętli i przy wykryciu zbocza zapisywać że:

aha przycisk X był w HIGH (nie wciśnięty, masz to zapisane w zmiennej pomocniczej ostatni stan przycisku) ale w kolejnym obrocie pętli (czyli teraz) przycisk jest w LOW, to ustaw zmienną przycisk_x na true. Jeżeli inny będzie wciśnięty to poprzedni kasujesz:

przycisk_x = false, przycisk_y = true. itd.

W Arduino reakcja na stan przycisku zazwyczaj jest nieprzydatna, tylko reakcja na zmianę stanu i zapamiętanie tej zmiany.

Edytowano przez Gieneq
Link to post
Share on other sites

Witam.

Mam problem z dodatkowym zadaniem. Przerwanie mi nie działa. Dopisałem przerwanie w kodzie programu. Po wgraniu programu, arduino w ogóle nie reaguje na przycisk. Czy się go wciśnie, czy się go puści, brak reakcji. Wstawiam linijki z kodu związane z przerwaniem. 

#define PRZYCISK 12 //pin do którego podlączony jest przycisk

volatile int stanAlarmu = 1;

void setup(){
  pinMode(PRZYCISK, INPUT_PULLUP); //przycisk jako INPUT_PULLUP
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), reset, FALLING); //przerwanie
}

void reset() {
  wylaczDiody(); //funkcja która wylącza diody
  noTone(BUZZER); //wycisz buzzer
  stanAlarmu = 1; //wartość zmiennej stanAlarmu ustaw na 1 Przy wartości 1 alarm powiniem przejść w stan czuwania
}

W programie działa wszystko oprócz przerwania.

Link to post
Share on other sites

Witam,

mam pytanie w kwestii resetowania centralki. Zauważyłem (o ile nie przeoczyłem jakiegoś posta), że przeplatają się 2 sposoby: z wykorzystaniem przerwania realizowanego na dodatkowym przycisku albo dodania sprawdzenia wciśnięcia jakiegoś przycisku z matrycy w  stanie 4, kiedy alarm się już włączy (przy czym to rozwiązanie powoduje, że nie zawsze pierwsze wciśnięcie zadziała, bo możemy trafić w moment realizacji pętli for).

I tu pojawia się moje pytanie, czy można zrobić przerwanie, ale z użyciem jednego z przycisków matrycy. Moje próby na razie nie przyniosły efektu.

Link to post
Share on other sites

@szeryf takie rozwiązanie będzie ciężkie w realizacji, bo działanie matrycy jest zgoła innego od tego jak działają normalnie podłączone przyciski. Raczej nie szedłbym w tę stronę.

Link to post
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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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