Karl Zweimüller
/
mRotaryEncoder_HelloWorld
Hello World test program for mRotaryEncoder.
main.cpp@0:84ef638f3691, 2010-11-29 (annotated)
- Committer:
- charly
- Date:
- Mon Nov 29 21:27:28 2010 +0000
- Revision:
- 0:84ef638f3691
Initial version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
charly | 0:84ef638f3691 | 1 | #include "mbed.h" |
charly | 0:84ef638f3691 | 2 | #include "mRotaryEncoder.h" |
charly | 0:84ef638f3691 | 3 | |
charly | 0:84ef638f3691 | 4 | /** Test the Library for mechanical rotary encoders with pushbutton |
charly | 0:84ef638f3691 | 5 | * like this one from alps http://www.alps.com/WebObjects/catalog.woa/E/HTML/Encoder/Incremental/EC11/EC11E09244BS.shtml |
charly | 0:84ef638f3691 | 6 | * should work for any other incremental encoder with button |
charly | 0:84ef638f3691 | 7 | */ |
charly | 0:84ef638f3691 | 8 | |
charly | 0:84ef638f3691 | 9 | // mbed LEDs |
charly | 0:84ef638f3691 | 10 | DigitalOut led1(LED1); |
charly | 0:84ef638f3691 | 11 | DigitalOut led2(LED2); |
charly | 0:84ef638f3691 | 12 | DigitalOut led3(LED3); |
charly | 0:84ef638f3691 | 13 | DigitalOut led4(LED4); |
charly | 0:84ef638f3691 | 14 | |
charly | 0:84ef638f3691 | 15 | Serial pcout(USBTX, USBRX); |
charly | 0:84ef638f3691 | 16 | |
charly | 0:84ef638f3691 | 17 | |
charly | 0:84ef638f3691 | 18 | //mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000) |
charly | 0:84ef638f3691 | 19 | mRotaryEncoder wheel(p21, p22, p23); |
charly | 0:84ef638f3691 | 20 | |
charly | 0:84ef638f3691 | 21 | |
charly | 0:84ef638f3691 | 22 | int lastGet; |
charly | 0:84ef638f3691 | 23 | int thisGet; |
charly | 0:84ef638f3691 | 24 | |
charly | 0:84ef638f3691 | 25 | |
charly | 0:84ef638f3691 | 26 | bool enc_pressed = false; // Button of rotaryencoder was pressed |
charly | 0:84ef638f3691 | 27 | bool enc_rotated = false; // rotary encoder was totaded left or right |
charly | 0:84ef638f3691 | 28 | |
charly | 0:84ef638f3691 | 29 | |
charly | 0:84ef638f3691 | 30 | //interrup-Handler for button on rotary-encoder |
charly | 0:84ef638f3691 | 31 | void trigger_sw() { |
charly | 0:84ef638f3691 | 32 | enc_pressed = true; // just set the flag, rest is done outside isr |
charly | 0:84ef638f3691 | 33 | } |
charly | 0:84ef638f3691 | 34 | |
charly | 0:84ef638f3691 | 35 | //interrup-Handler for rotary-encoder rotation |
charly | 0:84ef638f3691 | 36 | void trigger_rotated() { |
charly | 0:84ef638f3691 | 37 | enc_rotated = true; // just set the flag, rest is done outside isr |
charly | 0:84ef638f3691 | 38 | } |
charly | 0:84ef638f3691 | 39 | |
charly | 0:84ef638f3691 | 40 | |
charly | 0:84ef638f3691 | 41 | // display int-Value on the 4 LEDS |
charly | 0:84ef638f3691 | 42 | void displayLED(int value) { |
charly | 0:84ef638f3691 | 43 | switch (abs(value) % 4) { // Get 2 LSBs and display sequence on mbed LEDs |
charly | 0:84ef638f3691 | 44 | case 0: |
charly | 0:84ef638f3691 | 45 | led1 = 1; |
charly | 0:84ef638f3691 | 46 | led2 = 0; |
charly | 0:84ef638f3691 | 47 | led3 = 0; |
charly | 0:84ef638f3691 | 48 | led4 = 0; |
charly | 0:84ef638f3691 | 49 | break; |
charly | 0:84ef638f3691 | 50 | case 1: |
charly | 0:84ef638f3691 | 51 | led1 = 0; |
charly | 0:84ef638f3691 | 52 | led2 = 1; |
charly | 0:84ef638f3691 | 53 | led3 = 0; |
charly | 0:84ef638f3691 | 54 | led4 = 0; |
charly | 0:84ef638f3691 | 55 | break; |
charly | 0:84ef638f3691 | 56 | case 2: |
charly | 0:84ef638f3691 | 57 | led1 = 0; |
charly | 0:84ef638f3691 | 58 | led2 = 0; |
charly | 0:84ef638f3691 | 59 | led3 = 1; |
charly | 0:84ef638f3691 | 60 | led4 = 0; |
charly | 0:84ef638f3691 | 61 | break; |
charly | 0:84ef638f3691 | 62 | default: |
charly | 0:84ef638f3691 | 63 | led1 = 0; |
charly | 0:84ef638f3691 | 64 | led2 = 0; |
charly | 0:84ef638f3691 | 65 | led3 = 0; |
charly | 0:84ef638f3691 | 66 | led4 = 1; |
charly | 0:84ef638f3691 | 67 | break; |
charly | 0:84ef638f3691 | 68 | } // switch |
charly | 0:84ef638f3691 | 69 | } |
charly | 0:84ef638f3691 | 70 | |
charly | 0:84ef638f3691 | 71 | int main() { |
charly | 0:84ef638f3691 | 72 | |
charly | 0:84ef638f3691 | 73 | pcout.printf("\n\rconnected to mbed...\n\r"); |
charly | 0:84ef638f3691 | 74 | |
charly | 0:84ef638f3691 | 75 | //Int-Handler |
charly | 0:84ef638f3691 | 76 | // call trigger_sw() when button of rotary-encoder is pressed |
charly | 0:84ef638f3691 | 77 | wheel.attachSW(&trigger_sw); |
charly | 0:84ef638f3691 | 78 | |
charly | 0:84ef638f3691 | 79 | // call trigger_rot() when the shaft is rotaded left or right |
charly | 0:84ef638f3691 | 80 | wheel.attachROT(&trigger_rotated); |
charly | 0:84ef638f3691 | 81 | |
charly | 0:84ef638f3691 | 82 | lastGet = 0; |
charly | 0:84ef638f3691 | 83 | |
charly | 0:84ef638f3691 | 84 | // set encrotated, so position is displayed on startup |
charly | 0:84ef638f3691 | 85 | enc_rotated = true; |
charly | 0:84ef638f3691 | 86 | |
charly | 0:84ef638f3691 | 87 | while (1) { |
charly | 0:84ef638f3691 | 88 | |
charly | 0:84ef638f3691 | 89 | |
charly | 0:84ef638f3691 | 90 | // shaft has been rotated? |
charly | 0:84ef638f3691 | 91 | if (enc_rotated) { |
charly | 0:84ef638f3691 | 92 | enc_rotated = false; |
charly | 0:84ef638f3691 | 93 | |
charly | 0:84ef638f3691 | 94 | thisGet = wheel.Get(); |
charly | 0:84ef638f3691 | 95 | |
charly | 0:84ef638f3691 | 96 | displayLED(thisGet); |
charly | 0:84ef638f3691 | 97 | pcout.printf ("Pulses is: %i\n\r", thisGet); |
charly | 0:84ef638f3691 | 98 | |
charly | 0:84ef638f3691 | 99 | } |
charly | 0:84ef638f3691 | 100 | |
charly | 0:84ef638f3691 | 101 | |
charly | 0:84ef638f3691 | 102 | // Button pressed? |
charly | 0:84ef638f3691 | 103 | if (enc_pressed) { |
charly | 0:84ef638f3691 | 104 | enc_pressed = false; |
charly | 0:84ef638f3691 | 105 | printf("triggered!\n\r"); |
charly | 0:84ef638f3691 | 106 | |
charly | 0:84ef638f3691 | 107 | wheel.Set(0); |
charly | 0:84ef638f3691 | 108 | |
charly | 0:84ef638f3691 | 109 | //Update displays |
charly | 0:84ef638f3691 | 110 | thisGet = wheel.Get(); |
charly | 0:84ef638f3691 | 111 | displayLED(thisGet); |
charly | 0:84ef638f3691 | 112 | pcout.printf ("\n\rPulses is: %i\n\r", thisGet); |
charly | 0:84ef638f3691 | 113 | |
charly | 0:84ef638f3691 | 114 | } |
charly | 0:84ef638f3691 | 115 | //do something else |
charly | 0:84ef638f3691 | 116 | |
charly | 0:84ef638f3691 | 117 | } |
charly | 0:84ef638f3691 | 118 | |
charly | 0:84ef638f3691 | 119 | } |