[Arduino]ロータリーエンコーダーを使う
作ったサンプルスケッチはコレ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | volatile int value = 0; volatile uint8_t prev = 0; volatile uint8_t prevA = 0; volatile uint8_t prevB = 0; void setup() { pinMode(2, INPUT_PULLUP); pinMode(3, INPUT_PULLUP); digitalWrite(2, HIGH); digitalWrite(3, HIGH); Serial.begin(9600); } void loop() { int a = (PIND & _BV(2))>>2; int b = (PIND & _BV(3))>>3; if( a != prevA || b != prevB ){ uint8_t ab = (a << 1) | b; uint8_t encoded = (prev << 2) | ab; // if(encoded == 0b1101 || encoded == 0b0100 || encoded == 0b0010 || encoded == 0b1011){ if(encoded == 0b1101){ value ++; // } else if(encoded == 0b1110 || encoded == 0b0111 || encoded == 0b0001 || encoded == 0b1000) { } else if(encoded == 0b1110) { value --; } prev = ab; } prevA = a; prevB = b; Serial.println(value); } |
参考にしたサイトはコレら。
こっちをはじめに見た。
でもただのインターフェースとして使う時はこっちにサイトのが良かった。
この記事へのコメントはこちら