- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- AMD Navi Radeon™ RX 9xxx sorozat
- Nyaralás előtti hardverszemle
- Kormányok / autós szimulátorok topikja
- LG C3: egy középkategóriás OLED tévé tesztje
- HiFi műszaki szemmel - sztereó hangrendszerek
- Melyik tápegységet vegyem?
- Házimozi belépő szinten
- SD-kártyát vennél? Ezért ne csak a GB-ot nézd! – Tech Percek #9
- AMD K6-III, és minden ami RETRO - Oldschool tuning
-
PROHARDVER!
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
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 3060 12GB GAMER PC termékbeszámítással
- Csere-Beszámítás! Számítógép PC Játékra! I5 14400F / RTX 4060ti 16GB / 32GB DDR5 / 1TB SSD
- BESZÁMÍTÁS! ASUS ROG CROSSHAIR X670E GENE alaplap garanciával hibátlan működéssel
- BESZÁMÍTÁS! Nintendo Switch 32GB V2 játékkonzol garanciával hibátlan működéssel
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged