Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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 }
Generated on Mon Jul 25 2022 18:37:02 by
1.7.2