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

Files at this revision

API Documentation at this revision

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