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
- Committer:
- James1208
- Date:
- 2011-02-23
- Revision:
- 0:791f5d1a8275
File content as of revision 0:791f5d1a8275:
#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
James Spadavecchia