Arduino Polska Forum

Pełna wersja: Przerwania
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Pytanko do bardziej obeznanych . Czy użycie funkcji "attachInterrupt" musi być zadeklarowana w każdym podprogramie czy wystarczy tylko w pętli głównej ?
Kod:
int pin = 13;
volatile int state = LOW;

void setup() {
   pinMode(pin, OUTPUT);
   attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
}

void loop() {
   digitalWrite(pin, state);
}

void blink() {
   state = !state;
}

z przykładu wynika ze jeśli masz więcej pod programów i wykorzystując inne piny musisz go zdeklarować w setup
tu masz 2 przerwania dziwnie to dziala ale to sie da skorygowac
Kod:
int pin = 13;
const int ele =  44;
volatile int state = HIGH;

void setup() {
    pinMode(pin, OUTPUT);
    pinMode(ele, OUTPUT);
    attachInterrupt(digitalPinToInterrupt(3), blink, FALLING);
attachInterrupt(digitalPinToInterrupt(2), blink1, FALLING);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);

}

void loop() {
    digitalWrite(pin, state);

}

void blink() {
    state = !state;
    digitalWrite(ele, HIGH);
      
}

void blink1() {
       digitalWrite(ele, HIGH);
       delay(3000);
           digitalWrite(ele, LOW);
           delay(3000);
}
Nie o przykład mi chodziło tylko o wyjaśnienie dlaczego i jak . Przerobiłem program , odczyty z czujnika mam poniżej 2ms i to mi wystarcza przerwanie nie było potrzebne i nie dało się go u mnie zastosować bo pod pinami 2 i 3 miałem inne wyjścia na UNO a przerabianie 30 urządzeń było by z lekka utopią . Urządzenie to licznik produkcyjny a maszyna pracuje w cyklach 5 odczytów 2 sek przerwy więc przy pierwszym odczycie przerywa inne funkcje i czeka na odczyty przez 0,5 sek a później ma 1,5 sek na wykonanie obliczeń zapis zdarzeń i co tam się dzieje a około 0,5s przed nowym cyklem już czeka na odczyt . Błąd pomiaru wynosi 1 cykl ( 5 szt. ) na 1 mln odczytów ponieważ potrafi zgubić pierwszy odczyt po uruchomieniu maszyny jak akurat coś robi i taka dokładność jest wystarczająca bo zakładane parametry dopuszczały 1% błędu pomiaru więc jestem o 9995 na 1mln do przodu ;-) poprzednio gubił około 5% a to było niedopuszczalne .