Test code to read a tyco dpl12 quadrature encoder and vary the level of the 2 inbuilt leds. Fades colour from red, through orange and yellow, to green. Push button momentarily extinguishes the leds.
main.cpp
00001 #include "mbed.h" 00002 00003 DigitalIn sw_in (p5); 00004 InterruptIn enc_a (p6); 00005 InterruptIn enc_b (p7); 00006 PwmOut led1 (p22); 00007 PwmOut led2 (p23); 00008 00009 void enc_a_int_routine (void); 00010 void enc_b_int_routine (void); 00011 00012 bool enc_a_state; 00013 bool enc_b_state; 00014 bool old_enc_a_state; 00015 bool old_enc_b_state; 00016 int val_min = 0; 00017 int val_max = 100; 00018 int val = ((val_max - val_min) / 2) + val_min; 00019 int val_old = val; 00020 00021 int main() { 00022 sw_in.mode(PullUp); 00023 enc_a.mode(PullUp); 00024 enc_b.mode(PullUp); 00025 enc_a_state = enc_a; 00026 enc_b_state = enc_b; 00027 enc_a.rise(&enc_a_int_routine); 00028 enc_b.rise(&enc_b_int_routine); 00029 enc_a.fall(&enc_a_int_routine); 00030 enc_b.fall(&enc_b_int_routine); 00031 while (1) { 00032 if (val != val_old) { 00033 printf("\n\r%i",val); 00034 } // if (val != val_old) 00035 val_old = val; 00036 if (sw_in) { 00037 led1 = val / 100.0; 00038 led2 = 1.0 - (val / 100.0); 00039 } else { 00040 printf("button\n\r"); 00041 led1 = 0; 00042 led2 = 0; 00043 } // if (sw_in) 00044 } // while(1) 00045 } // end main 00046 00047 void enc_a_int_routine (void) { 00048 old_enc_a_state = enc_a_state; 00049 old_enc_b_state = enc_b_state; 00050 enc_a_state = enc_a; 00051 enc_b_state = enc_b; 00052 if (((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state)) || ((enc_a_state == old_enc_a_state) && (enc_b_state == old_enc_b_state))) { 00053 val = val; 00054 } else { 00055 if (enc_a_state ^ old_enc_b_state) { 00056 val -= 1; 00057 } else { 00058 val += 1; 00059 } // (enc_a_state ^ old_enc_b_state) 00060 } // if ((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state)) 00061 } // end enc_a_int_routine 00062 00063 void enc_b_int_routine (void) { 00064 old_enc_a_state = enc_a_state; 00065 old_enc_b_state = enc_b_state; 00066 enc_a_state = enc_a; 00067 enc_b_state = enc_b; 00068 if (((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state)) || ((enc_a_state == old_enc_a_state) && (enc_b_state == old_enc_b_state))) { 00069 val = val; 00070 } else { 00071 if (enc_a_state ^ old_enc_b_state) { 00072 val -= 1; 00073 } else { 00074 val += 1; 00075 } // (enc_a_state ^ old_enc_b_state) 00076 } // if ((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state)) 00077 } // end enc_a_int_routine
Generated on Thu Jul 28 2022 11:35:59 by 1.7.2