Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: C12832 LM75B mbed
Fork of co657_driving_test_1 by
Diff: dtest.cpp
- Revision:
- 0:38ecd3d98f79
diff -r 000000000000 -r 38ecd3d98f79 dtest.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/dtest.cpp Mon Sep 28 08:15:28 2015 +0000
@@ -0,0 +1,139 @@
+/*
+ * dtest.cpp -- driving test for CO657
+ * Copyright (C) 2015 Fred Barnes, University of Kent <frmb@kent.ac.uk>
+ * GPL >= 2.0
+ */
+
+#include "mbed.h" /* stock MBED API */
+
+/* assorted globals */
+
+DigitalOut r_led (LED1); /* connections for RGB LED */
+DigitalOut g_led (LED2);
+DigitalOut b_led (LED3);
+
+Serial host (USBTX, USBRX); /* to-host UART via OpenSDAv2 */
+
+InterruptIn sw2_int (PTC6); /* interrupts for the two on-board switches */
+InterruptIn sw3_int (PTA4);
+
+Ticker rgb_tick; /* timer for driving the LED */
+
+static volatile uint16_t counters[3]; /* red, green, blue */
+static volatile uint8_t bright[3];
+
+static volatile int sw2_trig; /* switches triggered? */
+static volatile int sw3_trig;
+
+
+/*
+ * turns offset [0-311] into brightness level [0-255-255-0].
+ */
+uint8_t brilvl (int offset)
+{
+ while (offset > 311) {
+ offset -= 312;
+ }
+ if (offset < 52) {
+ return (uint8_t)(offset * 5);
+ } else if (offset < 156) {
+ return 255;
+ } else if (offset < 208) {
+ return (uint8_t)((207 - offset) * 5);
+ }
+ return 0;
+}
+
+
+/*
+ * resets the various counters to their initial state
+ */
+void reset_counters (void)
+{
+ for (int i=0; i<3; i++) {
+ counters[i] = 0;
+ bright[i] = brilvl (i * 104);
+ }
+}
+
+
+/*
+ * interrupt handlers
+ */
+void rgb_tick_interrupt (void)
+{
+ for (int i=0; i<3; i++) {
+ counters[i] += (uint16_t)bright[i];
+ }
+
+ r_led = ((counters[0] >> 8) & 1) ^ 1;
+ g_led = ((counters[1] >> 8) & 1) ^ 1;
+ b_led = ((counters[2] >> 8) & 1) ^ 1;
+
+ for (int i=0; i<3; i++) {
+ counters[i] &= 0xff;
+ }
+}
+
+
+void sw2_interrupt (void)
+{
+ sw2_trig = 1;
+}
+
+
+void sw3_interrupt (void)
+{
+ sw3_trig = 1;
+}
+
+
+
+
+/*
+ * start here
+ */
+int main (void)
+{
+ int ctr;
+
+ host.baud (38400);
+ host.printf ("Hello, FRDM-K64F driving-test world!\r\n");
+
+ sw2_trig = 0;
+ sw3_trig = 0;
+
+ reset_counters ();
+
+ rgb_tick.attach (&rgb_tick_interrupt, 0.001);
+ ctr = 0;
+
+ sw2_int.mode (PullUp);
+ sw2_int.fall (&sw2_interrupt);
+
+ sw3_int.mode (PullUp);
+ sw3_int.fall (&sw3_interrupt);
+
+ /* and then forever.. */
+ for (;;) {
+ wait (0.02);
+
+ if (sw2_trig) {
+ ctr += 104;
+ sw2_trig = 0;
+ }
+ if (sw3_trig) {
+ ctr += 208;
+ sw3_trig = 0;
+ }
+
+ ctr++;
+ if (ctr > 311) {
+ ctr -= 312;
+ }
+ for (int i=0; i<3; i++) {
+ bright[i] = brilvl (ctr + (i * 104));
+ }
+ }
+}
+
