Arduino vs. přerušení

daew13

Arduino vs. přerušení
« kdy: 28. 12. 2015, 16:32:25 »
Zdravím, prosím o radu. Dělám aplikaci s Arduinem Mega a potřebuji použít dvě funkce přerušení na jednom pinu. Deklarované nějak takto:
.......
attachInterrupt(4, Funkce1, RISING);  //zavolá funci1 při vzestupné hraně
attachInterrupt(4, Funkce2, FALLING);  //zavolá funci2 při sestupné hraně
.......
.......

Uvedené přerušení mi bohužel nikdy nezavolá Funkci1, vždy pouze Funkci2. Takže takováto dvojitá deklarace jednoho vstupu je zakázána a první deklarace se přepíše tou poslední nebo musím hledat chybu někde jinde? Díky  moc, daew.


karel

Re:Arduino vs. přerušení
« Odpověď #1 kdy: 28. 12. 2015, 16:52:18 »
Interupt umi obslouzit jen jednu funkci, v ni si pak klidne rozvetvuj jak chces.

F.

Re:Arduino vs. přerušení
« Odpověď #2 kdy: 28. 12. 2015, 16:54:49 »
Je to presne jak rikas, to druhe prepise to prvni.

Musis pouzit CHANGE a udrzovat si stav jaka udalost se stala naposled, pripadne precist stav toho konkretniho pinu (ale to jsem nekde cetl, ze je pry pomale). Taky promenne ke kterym v preruseni pristupujes musi byt volatile.

A muzes pouzit makro digitalPinToInterrupt(cisloPinu) misto primo cisla interruptu, je to pak citelnejsi.

daew13

Re:Arduino vs. přerušení
« Odpověď #3 kdy: 28. 12. 2015, 18:00:28 »
Bezva, děkuju vám za rychlou odpověď. Takhle, jak to mám, je to strašně jednoduché. Protože to nefungovalo, tak jsem to chtěl už udělat přes jednu funkci, ale jelikož to bude o dost složitější a tím méně přehledné, tak než jsem se do toho pustil, chtěl jsem si to nechat  potvrdit, že to skutečně nejde. Díky, daew.

Jenda

Re:Arduino vs. přerušení
« Odpověď #4 kdy: 29. 12. 2015, 00:49:01 »
ale jelikož to bude o dost složitější a tím méně přehledné
O dost složitější?

Kód: [Vybrat]
void f3() {
  if(pin == LOW) {
    // falling
    f2();
  else {
    // rising
    f1();
  }
}
attachInterrupt(4, f3, CHANGE);

PS: digitalRead je strašně pomalý, pro rychlé GPIO používej rovnou přístup PINX.