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.

Dependencies:   mbed

Committer:
James1208
Date:
Wed Feb 23 20:59:54 2011 +0000
Revision:
0:791f5d1a8275

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
James1208 0:791f5d1a8275 1 #include "mbed.h"
James1208 0:791f5d1a8275 2
James1208 0:791f5d1a8275 3 DigitalIn sw_in (p5);
James1208 0:791f5d1a8275 4 InterruptIn enc_a (p6);
James1208 0:791f5d1a8275 5 InterruptIn enc_b (p7);
James1208 0:791f5d1a8275 6 PwmOut led1 (p22);
James1208 0:791f5d1a8275 7 PwmOut led2 (p23);
James1208 0:791f5d1a8275 8
James1208 0:791f5d1a8275 9 void enc_a_int_routine (void);
James1208 0:791f5d1a8275 10 void enc_b_int_routine (void);
James1208 0:791f5d1a8275 11
James1208 0:791f5d1a8275 12 bool enc_a_state;
James1208 0:791f5d1a8275 13 bool enc_b_state;
James1208 0:791f5d1a8275 14 bool old_enc_a_state;
James1208 0:791f5d1a8275 15 bool old_enc_b_state;
James1208 0:791f5d1a8275 16 int val_min = 0;
James1208 0:791f5d1a8275 17 int val_max = 100;
James1208 0:791f5d1a8275 18 int val = ((val_max - val_min) / 2) + val_min;
James1208 0:791f5d1a8275 19 int val_old = val;
James1208 0:791f5d1a8275 20
James1208 0:791f5d1a8275 21 int main() {
James1208 0:791f5d1a8275 22 sw_in.mode(PullUp);
James1208 0:791f5d1a8275 23 enc_a.mode(PullUp);
James1208 0:791f5d1a8275 24 enc_b.mode(PullUp);
James1208 0:791f5d1a8275 25 enc_a_state = enc_a;
James1208 0:791f5d1a8275 26 enc_b_state = enc_b;
James1208 0:791f5d1a8275 27 enc_a.rise(&enc_a_int_routine);
James1208 0:791f5d1a8275 28 enc_b.rise(&enc_b_int_routine);
James1208 0:791f5d1a8275 29 enc_a.fall(&enc_a_int_routine);
James1208 0:791f5d1a8275 30 enc_b.fall(&enc_b_int_routine);
James1208 0:791f5d1a8275 31 while (1) {
James1208 0:791f5d1a8275 32 if (val != val_old) {
James1208 0:791f5d1a8275 33 printf("\n\r%i",val);
James1208 0:791f5d1a8275 34 } // if (val != val_old)
James1208 0:791f5d1a8275 35 val_old = val;
James1208 0:791f5d1a8275 36 if (sw_in) {
James1208 0:791f5d1a8275 37 led1 = val / 100.0;
James1208 0:791f5d1a8275 38 led2 = 1.0 - (val / 100.0);
James1208 0:791f5d1a8275 39 } else {
James1208 0:791f5d1a8275 40 printf("button\n\r");
James1208 0:791f5d1a8275 41 led1 = 0;
James1208 0:791f5d1a8275 42 led2 = 0;
James1208 0:791f5d1a8275 43 } // if (sw_in)
James1208 0:791f5d1a8275 44 } // while(1)
James1208 0:791f5d1a8275 45 } // end main
James1208 0:791f5d1a8275 46
James1208 0:791f5d1a8275 47 void enc_a_int_routine (void) {
James1208 0:791f5d1a8275 48 old_enc_a_state = enc_a_state;
James1208 0:791f5d1a8275 49 old_enc_b_state = enc_b_state;
James1208 0:791f5d1a8275 50 enc_a_state = enc_a;
James1208 0:791f5d1a8275 51 enc_b_state = enc_b;
James1208 0:791f5d1a8275 52 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))) {
James1208 0:791f5d1a8275 53 val = val;
James1208 0:791f5d1a8275 54 } else {
James1208 0:791f5d1a8275 55 if (enc_a_state ^ old_enc_b_state) {
James1208 0:791f5d1a8275 56 val -= 1;
James1208 0:791f5d1a8275 57 } else {
James1208 0:791f5d1a8275 58 val += 1;
James1208 0:791f5d1a8275 59 } // (enc_a_state ^ old_enc_b_state)
James1208 0:791f5d1a8275 60 } // if ((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state))
James1208 0:791f5d1a8275 61 } // end enc_a_int_routine
James1208 0:791f5d1a8275 62
James1208 0:791f5d1a8275 63 void enc_b_int_routine (void) {
James1208 0:791f5d1a8275 64 old_enc_a_state = enc_a_state;
James1208 0:791f5d1a8275 65 old_enc_b_state = enc_b_state;
James1208 0:791f5d1a8275 66 enc_a_state = enc_a;
James1208 0:791f5d1a8275 67 enc_b_state = enc_b;
James1208 0:791f5d1a8275 68 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))) {
James1208 0:791f5d1a8275 69 val = val;
James1208 0:791f5d1a8275 70 } else {
James1208 0:791f5d1a8275 71 if (enc_a_state ^ old_enc_b_state) {
James1208 0:791f5d1a8275 72 val -= 1;
James1208 0:791f5d1a8275 73 } else {
James1208 0:791f5d1a8275 74 val += 1;
James1208 0:791f5d1a8275 75 } // (enc_a_state ^ old_enc_b_state)
James1208 0:791f5d1a8275 76 } // if ((enc_a_state != old_enc_a_state) && (enc_b_state != old_enc_b_state))
James1208 0:791f5d1a8275 77 } // end enc_a_int_routine