![](/media/cache/profiles/74934548253bcab8490ebd74afed7031.50x50_q85.jpg)
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.
Revision 0:791f5d1a8275, committed 2011-02-23
- Comitter:
- James1208
- Date:
- Wed Feb 23 20:59:54 2011 +0000
- Commit message:
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 791f5d1a8275 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Feb 23 20:59:54 2011 +0000 @@ -0,0 +1,77 @@ +#include "mbed.h" + +DigitalIn sw_in (p5); +InterruptIn enc_a (p6); +InterruptIn enc_b (p7); +PwmOut led1 (p22); +PwmOut led2 (p23); + +void enc_a_int_routine (void); +void enc_b_int_routine (void); + +bool enc_a_state; +bool enc_b_state; +bool old_enc_a_state; +bool old_enc_b_state; +int val_min = 0; +int val_max = 100; +int val = ((val_max - val_min) / 2) + val_min; +int val_old = val; + +int main() { + sw_in.mode(PullUp); + enc_a.mode(PullUp); + enc_b.mode(PullUp); + enc_a_state = enc_a; + enc_b_state = enc_b; + enc_a.rise(&enc_a_int_routine); + enc_b.rise(&enc_b_int_routine); + enc_a.fall(&enc_a_int_routine); + enc_b.fall(&enc_b_int_routine); + while (1) { + if (val != val_old) { + printf("\n\r%i",val); + } // if (val != val_old) + val_old = val; + if (sw_in) { + led1 = val / 100.0; + led2 = 1.0 - (val / 100.0); + } else { + printf("button\n\r"); + led1 = 0; + led2 = 0; + } // if (sw_in) + } // while(1) +} // end main + +void enc_a_int_routine (void) { + old_enc_a_state = enc_a_state; + old_enc_b_state = enc_b_state; + enc_a_state = enc_a; + enc_b_state = enc_b; + 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))) { + val = val; + } else { + if (enc_a_state ^ old_enc_b_state) { + val -= 1; + } else { + val += 1; + } // (enc_a_state ^ old_enc_b_state) + } // if ((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state)) +} // end enc_a_int_routine + +void enc_b_int_routine (void) { + old_enc_a_state = enc_a_state; + old_enc_b_state = enc_b_state; + enc_a_state = enc_a; + enc_b_state = enc_b; + 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))) { + val = val; + } else { + if (enc_a_state ^ old_enc_b_state) { + val -= 1; + } else { + val += 1; + } // (enc_a_state ^ old_enc_b_state) + } // if ((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state)) +} // end enc_a_int_routine \ No newline at end of file
diff -r 000000000000 -r 791f5d1a8275 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Feb 23 20:59:54 2011 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912