This example positions a lit LED in the I2C LED array using the rotary encoder

Dependencies:   mbed

Committer:
chris
Date:
Tue Mar 02 08:27:23 2010 +0000
Revision:
0:498b9b4a7bb9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chris 0:498b9b4a7bb9 1 /*
chris 0:498b9b4a7bb9 2 RotaryEncode
chris 0:498b9b4a7bb9 3 (c) 2009, cstyles
chris 0:498b9b4a7bb9 4 */
chris 0:498b9b4a7bb9 5
chris 0:498b9b4a7bb9 6 #include "RotaryEncode.h"
chris 0:498b9b4a7bb9 7 #include "mbed.h"
chris 0:498b9b4a7bb9 8
chris 0:498b9b4a7bb9 9 /*
chris 0:498b9b4a7bb9 10 Constructor, pin names for I2C and the I2C addrss of the device
chris 0:498b9b4a7bb9 11 */
chris 0:498b9b4a7bb9 12
chris 0:498b9b4a7bb9 13
chris 0:498b9b4a7bb9 14 RotaryEncode::RotaryEncode(PinName A, PinName B)
chris 0:498b9b4a7bb9 15 : _rotary_in(A,B) {
chris 0:498b9b4a7bb9 16
chris 0:498b9b4a7bb9 17 _position = 0;
chris 0:498b9b4a7bb9 18
chris 0:498b9b4a7bb9 19 // Attach ticker
chris 0:498b9b4a7bb9 20 _ticker.attach(this, &RotaryEncode::_ticker_handler, 0.010);
chris 0:498b9b4a7bb9 21 }
chris 0:498b9b4a7bb9 22
chris 0:498b9b4a7bb9 23
chris 0:498b9b4a7bb9 24
chris 0:498b9b4a7bb9 25 int RotaryEncode::read(void) {
chris 0:498b9b4a7bb9 26 int rval = _position;
chris 0:498b9b4a7bb9 27 _position = 0;
chris 0:498b9b4a7bb9 28 return (rval);
chris 0:498b9b4a7bb9 29 }
chris 0:498b9b4a7bb9 30
chris 0:498b9b4a7bb9 31
chris 0:498b9b4a7bb9 32
chris 0:498b9b4a7bb9 33
chris 0:498b9b4a7bb9 34 void RotaryEncode::_ticker_handler(void) {
chris 0:498b9b4a7bb9 35
chris 0:498b9b4a7bb9 36 _state = _rotary_in;
chris 0:498b9b4a7bb9 37 _e = R_W;
chris 0:498b9b4a7bb9 38
chris 0:498b9b4a7bb9 39 // we're in the no-change state
chris 0:498b9b4a7bb9 40 if (_state == 0x03) {
chris 0:498b9b4a7bb9 41 return;
chris 0:498b9b4a7bb9 42 }
chris 0:498b9b4a7bb9 43
chris 0:498b9b4a7bb9 44 while (_state != 0x03) {
chris 0:498b9b4a7bb9 45 switch (_e) {
chris 0:498b9b4a7bb9 46 case R_W:
chris 0:498b9b4a7bb9 47 if (_state == 0x02)
chris 0:498b9b4a7bb9 48 _e = R_R1;
chris 0:498b9b4a7bb9 49 else if (_state == 0x01)
chris 0:498b9b4a7bb9 50 _e = R_L1;
chris 0:498b9b4a7bb9 51 break;
chris 0:498b9b4a7bb9 52
chris 0:498b9b4a7bb9 53 case R_L1:
chris 0:498b9b4a7bb9 54 if (_state == 0x00)
chris 0:498b9b4a7bb9 55 _e = R_R2;
chris 0:498b9b4a7bb9 56 break;
chris 0:498b9b4a7bb9 57 case R_L2:
chris 0:498b9b4a7bb9 58 if (_state == 0x01) {
chris 0:498b9b4a7bb9 59 _e = R_R3;
chris 0:498b9b4a7bb9 60 _position++;
chris 0:498b9b4a7bb9 61 }
chris 0:498b9b4a7bb9 62 break;
chris 0:498b9b4a7bb9 63 case R_R1:
chris 0:498b9b4a7bb9 64 if (_state == 0x00)
chris 0:498b9b4a7bb9 65 _e = R_L2;
chris 0:498b9b4a7bb9 66 break;
chris 0:498b9b4a7bb9 67 case R_R2:
chris 0:498b9b4a7bb9 68 if (_state == 0x02) {
chris 0:498b9b4a7bb9 69 _e = R_L3;
chris 0:498b9b4a7bb9 70 _position--;
chris 0:498b9b4a7bb9 71 }
chris 0:498b9b4a7bb9 72 break;
chris 0:498b9b4a7bb9 73 }
chris 0:498b9b4a7bb9 74 _state = _rotary_in;
chris 0:498b9b4a7bb9 75 }
chris 0:498b9b4a7bb9 76
chris 0:498b9b4a7bb9 77 }
chris 0:498b9b4a7bb9 78
chris 0:498b9b4a7bb9 79
chris 0:498b9b4a7bb9 80
chris 0:498b9b4a7bb9 81