Fórum Root.cz
		Hlavní témata => Vývoj => Téma založeno: 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.
- 
				Interupt umi obslouzit jen jednu funkci, v ni si pak klidne rozvetvuj jak chces.
			
- 
				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.
- 
				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.
			
- 
				ale jelikož to bude o dost složitější a tím méně přehledné
 
 O dost složitější?
 
 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.