Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: daew13 28. 12. 2015, 16:32:25

Název: Arduino vs. přerušení
Přispěvatel: daew13 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.
Název: Re:Arduino vs. přerušení
Přispěvatel: karel 28. 12. 2015, 16:52:18
Interupt umi obslouzit jen jednu funkci, v ni si pak klidne rozvetvuj jak chces.
Název: Re:Arduino vs. přerušení
Přispěvatel: F. 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.
Název: Re:Arduino vs. přerušení
Přispěvatel: daew13 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.
Název: Re:Arduino vs. přerušení
Přispěvatel: Jenda 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.