Testprogram for mRotaryEncoder-os

Dependencies:   mRotaryEncoder-os PinDetect

Committer:
charly
Date:
Tue Mar 16 20:23:26 2021 +0000
Revision:
1:e73cd7f0324c
Parent:
0:f68c653e1f94
Testprogram for mRotaryEncoder-os

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charly 0:f68c653e1f94 1 #include "mbed.h"
charly 0:f68c653e1f94 2 //#include "USBSerial.h"
charly 0:f68c653e1f94 3 #include "mRotaryEncoder.h"
charly 0:f68c653e1f94 4
charly 0:f68c653e1f94 5 /** Test the Library for mechanical rotary encoders with pushbutton
charly 0:f68c653e1f94 6 * like this one from alps http://www.alps.com/WebObjects/catalog.woa/E/HTML/Encoder/Incremental/EC11/EC11E09244BS.shtml
charly 0:f68c653e1f94 7 * should work for any other incremental encoder with button
charly 0:f68c653e1f94 8 */
charly 0:f68c653e1f94 9
charly 0:f68c653e1f94 10 // mbed LEDs
charly 0:f68c653e1f94 11 DigitalOut led1(LED1);
charly 0:f68c653e1f94 12 DigitalOut led2(LED2);
charly 0:f68c653e1f94 13 DigitalOut led3(LED3);
charly 0:f68c653e1f94 14 DigitalOut led4(LED4);
charly 0:f68c653e1f94 15
charly 0:f68c653e1f94 16 //USBSerial pcout;
charly 0:f68c653e1f94 17 static BufferedSerial pcout(USBTX, USBRX); // tx, rx
charly 0:f68c653e1f94 18
charly 0:f68c653e1f94 19
charly 0:f68c653e1f94 20 //mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000)
charly 0:f68c653e1f94 21 mRotaryEncoder wheel(p16, p17, p18,PullUp,1500);
charly 0:f68c653e1f94 22
charly 0:f68c653e1f94 23
charly 0:f68c653e1f94 24 int lastGet;
charly 0:f68c653e1f94 25 int thisGet;
charly 0:f68c653e1f94 26
charly 0:f68c653e1f94 27
charly 0:f68c653e1f94 28 bool enc_pressed = false; // Button of rotaryencoder was pressed
charly 0:f68c653e1f94 29 bool enc_rotated = false; // rotary encoder was totaded left or right
charly 0:f68c653e1f94 30
charly 0:f68c653e1f94 31
charly 0:f68c653e1f94 32 //interrup-Handler for button on rotary-encoder
charly 0:f68c653e1f94 33 void trigger_sw() {
charly 0:f68c653e1f94 34 enc_pressed = true; // just set the flag, rest is done outside isr
charly 0:f68c653e1f94 35 }
charly 0:f68c653e1f94 36
charly 0:f68c653e1f94 37 //interrup-Handler for rotary-encoder rotation
charly 0:f68c653e1f94 38 void trigger_rotated() {
charly 0:f68c653e1f94 39 enc_rotated = true; // just set the flag, rest is done outside isr
charly 0:f68c653e1f94 40 }
charly 0:f68c653e1f94 41
charly 0:f68c653e1f94 42
charly 0:f68c653e1f94 43 // display int-Value on the 4 LEDS
charly 0:f68c653e1f94 44 void displayLED(int value) {
charly 0:f68c653e1f94 45 switch (abs(value) % 4) { // Get 2 LSBs and display sequence on mbed LEDs
charly 0:f68c653e1f94 46 case 0:
charly 0:f68c653e1f94 47 led1 = 1;
charly 0:f68c653e1f94 48 led2 = 0;
charly 0:f68c653e1f94 49 led3 = 0;
charly 0:f68c653e1f94 50 led4 = 0;
charly 0:f68c653e1f94 51 break;
charly 0:f68c653e1f94 52 case 1:
charly 0:f68c653e1f94 53 led1 = 0;
charly 0:f68c653e1f94 54 led2 = 1;
charly 0:f68c653e1f94 55 led3 = 0;
charly 0:f68c653e1f94 56 led4 = 0;
charly 0:f68c653e1f94 57 break;
charly 0:f68c653e1f94 58 case 2:
charly 0:f68c653e1f94 59 led1 = 0;
charly 0:f68c653e1f94 60 led2 = 0;
charly 0:f68c653e1f94 61 led3 = 1;
charly 0:f68c653e1f94 62 led4 = 0;
charly 0:f68c653e1f94 63 break;
charly 0:f68c653e1f94 64 default:
charly 0:f68c653e1f94 65 led1 = 0;
charly 0:f68c653e1f94 66 led2 = 0;
charly 0:f68c653e1f94 67 led3 = 0;
charly 0:f68c653e1f94 68 led4 = 1;
charly 0:f68c653e1f94 69 break;
charly 0:f68c653e1f94 70 } // switch
charly 0:f68c653e1f94 71 }
charly 0:f68c653e1f94 72
charly 0:f68c653e1f94 73 int main() {
charly 0:f68c653e1f94 74
charly 0:f68c653e1f94 75 pcout.set_baud(115200);
charly 0:f68c653e1f94 76 printf("\n\rconnected to mbed...\n\r");
charly 0:f68c653e1f94 77
charly 0:f68c653e1f94 78 //Int-Handler
charly 0:f68c653e1f94 79 // call trigger_sw() when button of rotary-encoder is pressed
charly 0:f68c653e1f94 80 wheel.attachSW(&trigger_sw);
charly 0:f68c653e1f94 81
charly 0:f68c653e1f94 82 // call trigger_rot() when the shaft is rotaded left or right
charly 0:f68c653e1f94 83 wheel.attachROT(&trigger_rotated);
charly 0:f68c653e1f94 84
charly 0:f68c653e1f94 85 lastGet = 0;
charly 0:f68c653e1f94 86
charly 0:f68c653e1f94 87 // set encrotated, so position is displayed on startup
charly 0:f68c653e1f94 88 enc_rotated = true;
charly 0:f68c653e1f94 89
charly 0:f68c653e1f94 90 while (1) {
charly 0:f68c653e1f94 91
charly 0:f68c653e1f94 92
charly 0:f68c653e1f94 93 // shaft has been rotated?
charly 0:f68c653e1f94 94 if (enc_rotated) {
charly 0:f68c653e1f94 95 enc_rotated = false;
charly 0:f68c653e1f94 96
charly 0:f68c653e1f94 97 thisGet = wheel.Get();
charly 0:f68c653e1f94 98
charly 0:f68c653e1f94 99 displayLED(thisGet);
charly 0:f68c653e1f94 100 printf ("Pulses is: %i\n\r", thisGet);
charly 0:f68c653e1f94 101
charly 0:f68c653e1f94 102 }
charly 0:f68c653e1f94 103
charly 0:f68c653e1f94 104
charly 0:f68c653e1f94 105 // Button pressed?
charly 0:f68c653e1f94 106 if (enc_pressed) {
charly 0:f68c653e1f94 107 enc_pressed = false;
charly 0:f68c653e1f94 108 printf("triggered!\n\r");
charly 0:f68c653e1f94 109
charly 0:f68c653e1f94 110 wheel.Set(0);
charly 0:f68c653e1f94 111
charly 0:f68c653e1f94 112 //Update displays
charly 0:f68c653e1f94 113 thisGet = wheel.Get();
charly 0:f68c653e1f94 114 displayLED(thisGet);
charly 0:f68c653e1f94 115 printf ("\n\rPulses is: %i\n\r", thisGet);
charly 0:f68c653e1f94 116
charly 0:f68c653e1f94 117 }
charly 0:f68c653e1f94 118 //do something else
charly 0:f68c653e1f94 119
charly 0:f68c653e1f94 120 }
charly 0:f68c653e1f94 121
charly 0:f68c653e1f94 122 }