James Spadavecchia
/
tyco_encoder_test_02
main.cpp@0:954607bc2d95, 2011-08-02 (annotated)
- Committer:
- James1208
- Date:
- Tue Aug 02 10:28:54 2011 +0000
- Revision:
- 0:954607bc2d95
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
James1208 | 0:954607bc2d95 | 1 | #include "mbed.h" |
James1208 | 0:954607bc2d95 | 2 | |
James1208 | 0:954607bc2d95 | 3 | DigitalIn enc_pb (p5); |
James1208 | 0:954607bc2d95 | 4 | InterruptIn enc_A (p6); |
James1208 | 0:954607bc2d95 | 5 | InterruptIn enc_B (p7); |
James1208 | 0:954607bc2d95 | 6 | PwmOut led1 (p22); |
James1208 | 0:954607bc2d95 | 7 | PwmOut led2 (p23); |
James1208 | 0:954607bc2d95 | 8 | |
James1208 | 0:954607bc2d95 | 9 | void enc_int_routine (void); |
James1208 | 0:954607bc2d95 | 10 | |
James1208 | 0:954607bc2d95 | 11 | bool enc_A_state; |
James1208 | 0:954607bc2d95 | 12 | bool enc_B_state; |
James1208 | 0:954607bc2d95 | 13 | bool old_enc_A_state; |
James1208 | 0:954607bc2d95 | 14 | bool old_enc_B_state; |
James1208 | 0:954607bc2d95 | 15 | int val_min = 0; |
James1208 | 0:954607bc2d95 | 16 | int val_max = 100; |
James1208 | 0:954607bc2d95 | 17 | int val = ((val_max - val_min) / 2) + val_min; |
James1208 | 0:954607bc2d95 | 18 | int val_old = val; |
James1208 | 0:954607bc2d95 | 19 | |
James1208 | 0:954607bc2d95 | 20 | int main() { |
James1208 | 0:954607bc2d95 | 21 | enc_pb.mode(PullUp); |
James1208 | 0:954607bc2d95 | 22 | enc_A.mode(PullUp); |
James1208 | 0:954607bc2d95 | 23 | enc_B.mode(PullUp); |
James1208 | 0:954607bc2d95 | 24 | enc_A_state = enc_A; |
James1208 | 0:954607bc2d95 | 25 | enc_B_state = enc_B; |
James1208 | 0:954607bc2d95 | 26 | enc_A.rise(&enc_int_routine); |
James1208 | 0:954607bc2d95 | 27 | enc_B.rise(&enc_int_routine); |
James1208 | 0:954607bc2d95 | 28 | enc_A.fall(&enc_int_routine); |
James1208 | 0:954607bc2d95 | 29 | enc_B.fall(&enc_int_routine); |
James1208 | 0:954607bc2d95 | 30 | while (1) { |
James1208 | 0:954607bc2d95 | 31 | if (val != val_old) { |
James1208 | 0:954607bc2d95 | 32 | printf("\n\r%i",val); |
James1208 | 0:954607bc2d95 | 33 | } // if (val != val_old) |
James1208 | 0:954607bc2d95 | 34 | val_old = val; |
James1208 | 0:954607bc2d95 | 35 | if (enc_pb) { |
James1208 | 0:954607bc2d95 | 36 | led1 = val / 100.0; |
James1208 | 0:954607bc2d95 | 37 | led2 = 1.0 - (val / 100.0); |
James1208 | 0:954607bc2d95 | 38 | } else { |
James1208 | 0:954607bc2d95 | 39 | printf("button\n\r"); |
James1208 | 0:954607bc2d95 | 40 | led1 = 0; |
James1208 | 0:954607bc2d95 | 41 | led2 = 0; |
James1208 | 0:954607bc2d95 | 42 | } // if (enc_pb) |
James1208 | 0:954607bc2d95 | 43 | } // while(1) |
James1208 | 0:954607bc2d95 | 44 | } // end main |
James1208 | 0:954607bc2d95 | 45 | |
James1208 | 0:954607bc2d95 | 46 | void enc_int_routine (void) { |
James1208 | 0:954607bc2d95 | 47 | old_enc_A_state = enc_A_state; |
James1208 | 0:954607bc2d95 | 48 | old_enc_B_state = enc_B_state; |
James1208 | 0:954607bc2d95 | 49 | enc_A_state = enc_A; |
James1208 | 0:954607bc2d95 | 50 | enc_B_state = enc_B; |
James1208 | 0:954607bc2d95 | 51 | 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:954607bc2d95 | 52 | val = val; |
James1208 | 0:954607bc2d95 | 53 | } else { |
James1208 | 0:954607bc2d95 | 54 | if (enc_A_state ^ old_enc_B_state) { |
James1208 | 0:954607bc2d95 | 55 | val -= 1; |
James1208 | 0:954607bc2d95 | 56 | } else { |
James1208 | 0:954607bc2d95 | 57 | val += 1; |
James1208 | 0:954607bc2d95 | 58 | } // (enc_A_state ^ old_enc_B_state) |
James1208 | 0:954607bc2d95 | 59 | } // if ((enc_A_state != old_enc_A_state) && (enc_B_state != old_enc_B_state)) |
James1208 | 0:954607bc2d95 | 60 | } // end enc_A_int_routine |