Hello World test program for mRotaryEncoder.

Dependencies:   mbed

Committer:
charly
Date:
Mon Nov 29 21:27:28 2010 +0000
Revision:
0:84ef638f3691
Initial version

Who changed what in which revision?

UserRevisionLine numberNew 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 }