Karl Zweimüller / Mbed 2 deprecated mRotaryEncoder_HelloWorld

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "mRotaryEncoder.h"
00003 
00004 /** Test the Library for mechanical rotary encoders with pushbutton 
00005  * like this one from alps  http://www.alps.com/WebObjects/catalog.woa/E/HTML/Encoder/Incremental/EC11/EC11E09244BS.shtml
00006  * should work for any other incremental encoder with button
00007  */
00008 
00009 // mbed LEDs
00010 DigitalOut led1(LED1);
00011 DigitalOut led2(LED2);
00012 DigitalOut led3(LED3);
00013 DigitalOut led4(LED4);
00014 
00015 Serial pcout(USBTX, USBRX);
00016 
00017 
00018 //mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000)
00019 mRotaryEncoder  wheel(p21, p22, p23);
00020 
00021 
00022 int lastGet;
00023 int thisGet;
00024 
00025 
00026 bool enc_pressed = false;      // Button of rotaryencoder was pressed
00027 bool enc_rotated = false;      // rotary encoder was totaded left or right
00028 
00029 
00030 //interrup-Handler for button on rotary-encoder
00031 void trigger_sw() {
00032     enc_pressed = true;               // just set the flag, rest is done outside isr
00033 }
00034 
00035 //interrup-Handler for rotary-encoder rotation
00036 void trigger_rotated() {
00037     enc_rotated = true;               // just set the flag, rest is done outside isr
00038 }
00039 
00040 
00041 // display int-Value on the 4 LEDS
00042 void displayLED(int value) {
00043     switch (abs(value) % 4) { // Get 2 LSBs and display sequence on mbed LEDs
00044         case 0:
00045             led1 = 1;
00046             led2 = 0;
00047             led3 = 0;
00048             led4 = 0;
00049             break;
00050         case 1:
00051             led1 = 0;
00052             led2 = 1;
00053             led3 = 0;
00054             led4 = 0;
00055             break;
00056         case 2:
00057             led1 = 0;
00058             led2 = 0;
00059             led3 = 1;
00060             led4 = 0;
00061             break;
00062         default:
00063             led1 = 0;
00064             led2 = 0;
00065             led3 = 0;
00066             led4 = 1;
00067             break;
00068     } // switch
00069 }
00070 
00071 int main() {
00072 
00073     pcout.printf("\n\rconnected to mbed...\n\r");
00074 
00075     //Int-Handler
00076     // call trigger_sw() when button of rotary-encoder is pressed
00077     wheel.attachSW(&trigger_sw);
00078 
00079     // call trigger_rot() when the shaft is rotaded left or right
00080     wheel.attachROT(&trigger_rotated);
00081 
00082     lastGet = 0;
00083 
00084     // set encrotated, so position is displayed on startup
00085     enc_rotated = true;
00086 
00087     while (1) {
00088 
00089 
00090         // shaft has been rotated?
00091         if (enc_rotated) {
00092             enc_rotated = false;
00093 
00094             thisGet = wheel.Get();
00095 
00096             displayLED(thisGet);
00097             pcout.printf ("Pulses is: %i\n\r", thisGet);
00098 
00099         }
00100 
00101 
00102         // Button pressed?
00103         if (enc_pressed) {
00104             enc_pressed = false;
00105             printf("triggered!\n\r");
00106 
00107             wheel.Set(0);
00108 
00109             //Update displays
00110             thisGet = wheel.Get();
00111             displayLED(thisGet);
00112             pcout.printf ("\n\rPulses is: %i\n\r", thisGet);
00113 
00114         }
00115         //do something else
00116         
00117     }
00118 
00119 }