-
Mobilarena
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
- Dell Latitude 5450 Intel Core Ultra 5 135U 4nm 32GB DDR5 érintőképernyős laptop Dell gari 2027.09.hó
- PlayStation 4/5 kontroller analóg cseréje HALL TMR érzékelősre, 1 év garancia!!! Nincs többé drift!!
- PlayStation 5/4 kontroller analóg cseréje HALL TMR érzékelősre, 1 év garancia!!! Nincs többé drift!!
- XBOX ONE/Series kontroller analóg cseréje HALL TMR érzékelősre, 1 év garancia!!! Nincs többé drift!!
- XBOX Series S 512GB, 6 hó garanciával Bp-i üzletből eladó!
- Telefon felvásárlás!! Apple Watch Series 9/Apple Watch Ultra/Apple Watch Ultra 2
- Apple iPhone 13 . 128GB , Kártyafüggetlen , 100% akku
- Bomba ár! Dell Latitude E6530 - i5-3GEN I 4GB I 500GB I HDMI I 15,6" HD+ I W10 I Garancia!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5060 Ti 16GB GAMER PC termékbeszámítással
- Corsair K100 Air wireless (CH-913A01U-DE) DE SN - A1E4G325503IVC
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest