Hirdetés
- ThinkPad (NEM IdeaPad)
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Nem tetszik pár profi eSport játékosnak, hogy Intel CPU-val kell játszaniuk
- AMD Navi Radeon™ RX 9xxx sorozat
- Milyen billentyűzetet vegyek?
- Azonnali VGA-s kérdések órája
- Hobby elektronika
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- Milyen belső merevlemezt vegyek?
- Házimozi haladó szinten
-
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
-
ecaddsell
aktív tag
Na akkor rotary encoder prell mentesítés még egyszer.
Az alapötlet innen:
https://www.best-microcontroller-projects.com/rotary-encoder.html
Én KY-040-el használom (sokat), hibázni még nem láttam. A logika megszakításban megy, a lekérdezés poll.
A speed control arról szól, hogy ha gyorsabban tekered akkor nagy ugrásokkal megy. Frekvencia beállításnál igen hasznos, máshol ahol fontos, hogy az elmozdulással legyen arányos az érték meg nem kell (ki kell kapcsolni).
Mivel ez is olyan téma, hogy jó megoldást még nem láttam (ezért voltam kénytelen egyet írni), hibásat annál többet, érdemes eltenni a linket.
Kommentelni akkor szoktam kódot, ha nagyon kell. Sorry./*
This code is free software; you can redistribute it and/or
modify it under the terms of the CC BY-NC-SA 3.0 license.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND...
*/
#define ROTE_CLK GPIO_NUM_xx
#define ROTE_DT GPIO_NUM_xx
#define ROTE_SPCTM 50000 // speed control time limit, not defined no speedctrl
volatile int32_t rotval = 0;
void IRAM_ATTR isrrot() {
volatile static uint8_t pinsta = 0x3, cwi = 0, ccwi = 0;
volatile static uint8_t cwexp[] = {0xD, 0x4, 0x2, 0xB};
volatile static uint8_t ccwexp[] = {0xE, 0x8, 0x1, 0x7};
int32_t rvchg;
#ifdef ROTE_SPCTM
volatile static uint32_t tc = 0, tm = 0;
uint32_t ctm, td;
#endif
pinsta = (pinsta << 2) & 0xf;
if (digitalRead(ROTE_DT)) pinsta |= 0x2;
if (digitalRead(ROTE_CLK)) pinsta |= 0x1;
if (pinsta == cwexp[cwi]) cwi++;
else if (pinsta == ccwexp[ccwi]) ccwi++;
if (cwi == 0x4 || ccwi == 0x4)
{
if (cwi == 4) rvchg = 1;
else rvchg = -1;
pinsta = 0x3; cwi = 0; ccwi = 0;
#ifdef ROTE_SPCTM
ctm = micros();
td = ctm - tm;
tm = ctm;
if (td < ROTE_SPCTM / 2) rvchg *= 7;
else if (td < (ROTE_SPCTM * 2) / 3) rvchg *= 4;
else if (td < ROTE_SPCTM) rvchg *= 2;
#endif
rotval += rvchg;
}
} // isrrot
int16_t getrotv() {
static int32_t lval = 0;
int32_t cval = rotval;
int16_t rotc = 0;
if (lval != cval) {
rotc = cval - lval;
lval = cval;
}
return (rotc);
} // getrotv
void inirotein(gpio_num_t clk, gpio_num_t dt) {
pinMode(clk, INPUT);
pinMode(dt, INPUT);
attachInterrupt(digitalPinToInterrupt(clk), isrrot, CHANGE);
attachInterrupt(digitalPinToInterrupt(dt), isrrot, CHANGE);
} // inirotein
...
inirotein(ROTE_CLK, ROTE_DT);
...
Új hozzászólás Aktív témák
- ThinkPad (NEM IdeaPad)
- sellerbuyer: Milyen laptopot vegyek? Segítek: semmilyet!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Autós topik
- Microsoft Outlook topic
- Xiaomi 15 - kicsi telefon nagy energiával
- Milyen autót vegyek?
- Samsung Galaxy S25 - végre van kicsi!
- YouTube
- További aktív témák...
- Apple Watch Series 4 Nike 44mm Teljes doboz, sok tartozék, 100% akku
- LG 77C4 - 77" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - 1000 Nits
- Dell G15 5530 gyári kijelzőt keresek (DP/N: 0VPD4)
- IDE HDD-k vegyesen nagy mennyiségben 32db egyben
- Eladó gamer / workstation PC + monitor garanciás, dobozos alkatrészekkel
- BESZÁMÍTÁS! MSI X370 R5 2600 16GB DDR4 512GB SSD GTX 970 4GB Zalman Z9 Neo FSP 600W
- Azonnali kézbesítés az év bármely pillanatában
- GYÖNYÖRŰ iPhone 12 64GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS2045, 95% Akkumulátor
- LG OLED & OLED evo Televíziók -30%
- Eladó megkímélt állapotban levő Oppo Reno 5Z 8/128GB / 12 hó jótállás
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft.
Város: Budapest