Hello World test program for mRotaryEncoder.
Embed:
(wiki syntax)
Show/hide line numbers
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