-
Fototrend
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
gyapo11
őstag
Az interrupt megszakítást jelent, a futó programot elhagyja, és az interrupt kiszolgáló függvényt kezdi el futtatni.
A példámban van egy loop() és van egy blink(). Azt tudjuk, hogy a loop() állandóan fut, ha a végére ér, akkor kezdi elölről. Na most a 2-es pint lehúzzuk testre. Ekkor a loopból kiugrik (megjegyzi, hogy hol tartott), és végrehajtja a blink() függvényt, amit hozzárendeltünk az interrupthoz. Ez a függvény ellentétesre váltja a led állapotát leíró változót, és a vezérlés visszatér oda, ahonnan az interrupt kirántotta, vagyis a loop()-ba. Röviden ennyi a lényeg. Érdemes még figyelni a prellre és az irq letiltására, ha bonyolultabb a függvény és több idő lehet a végrehajtása mint két interrupt közötti idő. -
Ez a példa félig működik csak jól, mert ugyan minden változásra reagál, de a számlálást ugyanúgy a loopban végzi. A számlálást be kell tenni az isr-be, akkor jó lesz.
Próbáld ezt:volatile boolean TurnDetected;
volatile boolean up;
volatile long virtualPosition=0;
const int PinCLK=2; // Used for generating interrupts using CLK signal
const int PinDT=3; // Used for reading DT signal
const int PinSW=4; // Used for the push button switch
void isr () { // Interrupt service routine is executed when any CHANGE transition is detected on CLK
volatile boolean CLK = digitalRead(PinCLK);
volatile boolean DT = digitalRead(PinDT);
up=((!CLK && DT)||(CLK && !DT));
if (up)
virtualPosition++;
else
virtualPosition--;
TurnDetected = true;
}
void setup () {
pinMode(PinCLK,INPUT);
pinMode(PinDT,INPUT);
pinMode(PinSW,INPUT);
attachInterrupt (0,isr,CHANGE); // interrupt 0 is always connected to pin 2 on Arduino UNO
Serial.begin (9600);
Serial.println("Start");
}
void loop () {
if (!digitalRead(PinSW)) { // check if pushbutton is pressed
virtualPosition=0; // if YES, then reset counter to ZERO
Serial.print ("Reset = "); // Using the word RESET instead of COUNT here to find out a buggy encoder
Serial.println (virtualPosition);
}
if (TurnDetected) { // do this only if rotation was detected
TurnDetected = false; // do NOT repeat IF loop until new rotation detected
Serial.print ("Count = ");
Serial.println (virtualPosition);
}
}
Új hozzászólás Aktív témák
- Háztartási gépek
- Építő/felújító topik
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Honor Magic6 Pro - kör közepén számok
- Samsung Galaxy Watch6 Classic - tekerd!
- S.T.A.L.K.E.R. 2: Heart of Chornobyl
- Synology NAS
- Milyen belső merevlemezt vegyek?
- LEGO klub
- Fél perc csend, majd világra jön egy Magic8 Pro
- További aktív témák...
- Sony G 24-105 f/4 - Sigma 50mm f/1.4 Art (SONY E)
- Összeszerelésre váró komplett gépezet várja új gazdáját!
- BONTATLAN Új Iphone 17 256GB White -Fe Szín 1év APPLE garancia gyári független Deák AZONNAL Átvehet
- Asus P5a-b Ss7 dobozos alaplap / K6-2+ 500mhz / Voodoo 3 /Awe 64 / Big Box Game
- Eladó 82 colos 4K HDR Samsung TV
- ÁRGARANCIA!Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RX 7600 8GB GAMER PC termékbeszámítással
- Surface Pro 7+ i5-1135G7 16GB 1000GB 1 év garancia
- GYÖNYÖRŰ iPhone 13 mini 128GB Green -1 ÉV GARANCIA - Kártyafüggetlen, MS4050
- Thermalright Phantom Spirit 120 SE
- Xiaomi Redmi 14C / 4/128GB / Kártyafüggetlen / 12Hó Garancia
Állásajánlatok
Cég: BroadBit Hungary Kft.
Város: Budakeszi
Cég: ATW Internet Kft.
Város: Budapest
ekkold
