04-13-2019, 11:37 AM
Evo da javim promjenio sam library i za čudo jedno...ovo sad radi perfektno! Dakle idem gore ili dolje, ide increment/decrement po 5, točno kako treba...brzo je nema kašnjenja, nema brljavljena displaya i maknuo sam one 100nF na A i B pinu i to radi perfektno...nisam znao da je ovo tako odlična stvar. Dakle nije da nevaljaju ovi kineski rotary encoderi nego treba odgovaraći library.
Jedino me još samo muči što moram točno dva puta da okrenem da se registrira jedan pomak...pa to sad gledam u kodu dali ima veze sa onim edgeovima, pa ako prije mene ko vidi kako srediti još to bilo bi odlično da se napiše.
Library je ovaj:
https://github.com/brianlow/Rotary
I ovo je demo kod koji sam stavio na LCD:
Jedino me još samo muči što moram točno dva puta da okrenem da se registrira jedan pomak...pa to sad gledam u kodu dali ima veze sa onim edgeovima, pa ako prije mene ko vidi kako srediti još to bilo bi odlično da se napiše.
Library je ovaj:
https://github.com/brianlow/Rotary
I ovo je demo kod koji sam stavio na LCD:
Code:
/*
Rotary Encoder - Interrupt Example
The circuit:
* encoder pin A to Arduino pin 2
* encoder pin B to Arduino pin 3
* encoder ground pin to ground (GND)
*/
#include <LiquidCrystal.h>
#include <Rotary.h>
volatile int tempSet = 0;
int tempInt = 0;
// LCD interface pins
int RS = A4, EN = A5, D4 = A3, D5 = A2, D6 = A1, D7 = A0;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
Rotary r = Rotary(2, 3);
void setup() {
r.begin();
PCICR |= (1 << PCIE2);
PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
sei();
}
void loop() {
if (tempSet != tempInt) {
lcd.clear();
lcd.print(tempSet);
tempInt = tempSet;
}
}
ISR(PCINT2_vect) {
unsigned char result = r.process();
if (result == DIR_NONE) {
// do nothing
}
else if (result == DIR_CW) {
tempSet = tempSet - 5;
}
else if (result == DIR_CCW) {
tempSet = tempSet + 5;
}
}