Here is a quick write up on how to use the tymkrs “Turn Me” rotary encoder. This supports the “push down” feature of the tymkrs kit.
Fritzing Rotary Encoder Part: Rotary Encoder with Knob bth.fzpz
Fritzing Project: RotaryEncoderDemo.fzz
Arduino (1.5) project: RotaryEncoderDemo.ino
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | /* Read Quadrature Encoder * Connect Encoder to Pins encoder0PinA, encoder0PinB, and +5V. * Sketch by max wolf / www.meso.net * v. 0.1 - very basic functions - mw 20061220 * Sketch updated by Brooke Hedrick / www.millamilla.com * v. 0.2 - Added the "S" pin for encoders with push-down support - bth 09292013 * - Put a limit of 255 and 0 in place. It rolls over automatically at the limits - bth 09292013 * */ int val; int encoder0PinA = 3; int encoder0PinB = 4; int encoder0PinS = 5; int encoder0PosUp = 0; int encoder0PosDown = 0; int encoder0PinALast = LOW ; int n = LOW ; int encoder0UpDown = LOW ; void setup () { pinMode (encoder0PinA, INPUT ); pinMode (encoder0PinB, INPUT ); pinMode (encoder0PinS, INPUT ); Serial.begin (9600); } void loop () { encoder0UpDown = digitalRead (encoder0PinS); n = digitalRead (encoder0PinA); if ((encoder0PinALast == LOW ) && (n == HIGH )) { //Serial.print("up down:"); //Serial.println(encoder0UpDown); if ( digitalRead (encoder0PinB) == LOW ) { if (encoder0UpDown == LOW ) { encoder0PosUp--; if (encoder0PosUp < 0) { encoder0PosUp = 255; } } else { encoder0PosDown--; if (encoder0PosDown < 0) { encoder0PosDown = 255; } } } else { if (encoder0UpDown == LOW ) { if (encoder0PosUp > 255) { encoder0PosUp = 0; } } else { encoder0PosDown++; if (encoder0PosDown > 255) { encoder0PosDown = 0; } } } Serial.print(encoder0PosUp); Serial.print( " " ); Serial.println(encoder0PosDown); } encoder0PinALast = n; } |
For more detail: Using the tymkrs “Turn Me” with an Arduino