• 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
Przerwanie zewnętrzne
#1
Mam problem z przerwaniem zewnętrznym. Przerwanie jest odczytywane z wciśnięcia guzika tylko że czasem to działa tak jakby w trybie falling a czasem w trybie rising, a znowu kiedy indziej program reaguje na przycisk dopiero za drugim przyciśnięciem, o co chodzi?

https://youtu.be/5UJ-7BT8uJ0

Kod:
void setup() {
  pinMode(pot_waga, INPUT);
  pinMode(wyjscie_konwerter, OUTPUT);
  pinMode(wyjscie_silownik_dol, OUTPUT);
  pinMode(przycisk_kiprowanie, INPUT);
  attachInterrupt(0, przerwanie, FALLING);
  pinMode(opoznienie_silownika, INPUT);
}

Kod:
  while (x){
   nawazone_1kg = 1;
   lcd.home();
   lcd.print("RAZEM -");
   lcd.write(byte(0));
   lcd.setCursor(9,0);
   lcd.print(counter + 1);
   lcd.print(" KG");

  }

Kod:
   void przerwanie(void) {
  x = !x; // neguje x, jeśli wcześniej było 0 to teraz jest 1 ...
}
 
Odpowiedź
#2
Drgania styków...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
O to to, dokładne to, w połączeniu z negowaniem zmiennej takie cyrki się robiły. Rozwiązałem to w ten sposób, że zamiast negować zmienną x, zmienia jej wartość z 0 na 1, a w innym miejscu kodu z powrotem wracam do wartości 0 dla tej zmiennej. Ale faktycznie drgania styków to powodowały, dzięki.
 
Odpowiedź
#4
Mimo to przydało by się zastosować filtr RC na niepotrzebne przerywania...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości