• 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
Przerwania
#1
Pytanko do bardziej obeznanych . Czy użycie funkcji "attachInterrupt" musi być zadeklarowana w każdym podprogramie czy wystarczy tylko w pętli głównej ?
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#2
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);
}
 
Odpowiedź
#3
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 .
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości