Testprogram for mRotaryEncoder-os
Dependencies: mRotaryEncoder-os PinDetect
main.cpp
- Committer:
- charly
- Date:
- 2021-03-16
- Revision:
- 1:e73cd7f0324c
- Parent:
- 0:f68c653e1f94
File content as of revision 1:e73cd7f0324c:
#include "mbed.h" //#include "USBSerial.h" #include "mRotaryEncoder.h" /** Test the Library for mechanical rotary encoders with pushbutton * like this one from alps http://www.alps.com/WebObjects/catalog.woa/E/HTML/Encoder/Incremental/EC11/EC11E09244BS.shtml * should work for any other incremental encoder with button */ // mbed LEDs DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); //USBSerial pcout; static BufferedSerial pcout(USBTX, USBRX); // tx, rx //mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000) mRotaryEncoder wheel(p16, p17, p18,PullUp,1500); int lastGet; int thisGet; bool enc_pressed = false; // Button of rotaryencoder was pressed bool enc_rotated = false; // rotary encoder was totaded left or right //interrup-Handler for button on rotary-encoder void trigger_sw() { enc_pressed = true; // just set the flag, rest is done outside isr } //interrup-Handler for rotary-encoder rotation void trigger_rotated() { enc_rotated = true; // just set the flag, rest is done outside isr } // display int-Value on the 4 LEDS void displayLED(int value) { switch (abs(value) % 4) { // Get 2 LSBs and display sequence on mbed LEDs case 0: led1 = 1; led2 = 0; led3 = 0; led4 = 0; break; case 1: led1 = 0; led2 = 1; led3 = 0; led4 = 0; break; case 2: led1 = 0; led2 = 0; led3 = 1; led4 = 0; break; default: led1 = 0; led2 = 0; led3 = 0; led4 = 1; break; } // switch } int main() { pcout.set_baud(115200); printf("\n\rconnected to mbed...\n\r"); //Int-Handler // call trigger_sw() when button of rotary-encoder is pressed wheel.attachSW(&trigger_sw); // call trigger_rot() when the shaft is rotaded left or right wheel.attachROT(&trigger_rotated); lastGet = 0; // set encrotated, so position is displayed on startup enc_rotated = true; while (1) { // shaft has been rotated? if (enc_rotated) { enc_rotated = false; thisGet = wheel.Get(); displayLED(thisGet); printf ("Pulses is: %i\n\r", thisGet); } // Button pressed? if (enc_pressed) { enc_pressed = false; printf("triggered!\n\r"); wheel.Set(0); //Update displays thisGet = wheel.Get(); displayLED(thisGet); printf ("\n\rPulses is: %i\n\r", thisGet); } //do something else } }