Simple example of using a rotary encoder to drive an RGB LED. At first, you can control the brightness of the red LED. Push the encoder shaft in and you can then control green. Push again to control blue. Then it repeats.
Dependencies: mRotaryEncoder mbed
main.cpp
00001 #include "mbed.h" 00002 #include "mRotaryEncoder.h" 00003 00004 // Simple demo for Hackaday 00005 // Al Williams 00006 00007 // This require two Keyes modules (or equivalent) 00008 // A KY-040 rotary encoder is connected to D7, D8 and the switch to D2 00009 // D8 connects to CLK and D7 connects to DT 00010 // if the rotation is backwards switch the wiring or swap the definitions in 00011 // software 00012 00013 // There is also a KY-016 RGB LED with integrated resistors 00014 // This board plugs in with the ground pin next to D13 00015 // then the other pins naturally hit D13, D12, and D11 00016 00017 PwmOut blueled(D13); 00018 PwmOut greenled(D12); 00019 PwmOut redled(D11); 00020 00021 // RGB values for LEDS 00022 PwmOut *leds[]={&redled, &greenled, &blueled}; 00023 float rgb[]={0.0, 0,0, 0.0}; 00024 int sel=0; // which component are we changing? 00025 00026 DigitalIn mybutton(USER_BUTTON); // not used here 00027 00028 // Here's the encoder object 00029 mRotaryEncoder enc(D7,D8, D2,PullNone); 00030 00031 00032 // Helper function to set the PWM values 00033 void setleds() 00034 { 00035 for (int i=0;i<sizeof(leds)/sizeof(leds[0]);i++) leds[i]->write(rgb[i]); 00036 } 00037 00038 00039 // Library calls here when you go clockwise 00040 void cw() 00041 { 00042 // modify the selected RGB component 00043 rgb[sel]+=0.1; 00044 if (rgb[sel]>1.0) rgb[sel]=1.0; 00045 setleds(); 00046 } 00047 00048 // Library calls here when you go anticlockwise 00049 void ccw() 00050 { 00051 // modify the selected RGB component 00052 rgb[sel]-=0.1; 00053 if (rgb[sel]<0.0) rgb[sel]=0.0; 00054 setleds(); 00055 } 00056 00057 // Library calls here when you push in on the encoder shaft 00058 void btn() 00059 { 00060 // change selected component (0, 1, 2) 00061 if (++sel>2) sel=0; 00062 } 00063 00064 int main() { 00065 // Set up encoder callbacks 00066 enc.attachROTCW(cw); 00067 enc.attachROTCCW(ccw); 00068 enc.attachSW(btn); 00069 // set fast period 00070 redled.period(0.01); 00071 greenled.period(0.01); 00072 blueled.period(0.01); 00073 while (true); // nothing else to do but wait 00074 }
Generated on Mon Jul 25 2022 03:54:59 by 1.7.2