Fred Barnes / Mbed 2 deprecated co657_driving_test_2

Dependencies:   C12832 LM75B mbed

Fork of co657_driving_test_1 by Fred Barnes

Committer:
co657_frmb
Date:
Mon Sep 28 08:15:28 2015 +0000
Revision:
0:38ecd3d98f79
initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
co657_frmb 0:38ecd3d98f79 1 /*
co657_frmb 0:38ecd3d98f79 2 * dtest.cpp -- driving test for CO657
co657_frmb 0:38ecd3d98f79 3 * Copyright (C) 2015 Fred Barnes, University of Kent <frmb@kent.ac.uk>
co657_frmb 0:38ecd3d98f79 4 * GPL >= 2.0
co657_frmb 0:38ecd3d98f79 5 */
co657_frmb 0:38ecd3d98f79 6
co657_frmb 0:38ecd3d98f79 7 #include "mbed.h" /* stock MBED API */
co657_frmb 0:38ecd3d98f79 8
co657_frmb 0:38ecd3d98f79 9 /* assorted globals */
co657_frmb 0:38ecd3d98f79 10
co657_frmb 0:38ecd3d98f79 11 DigitalOut r_led (LED1); /* connections for RGB LED */
co657_frmb 0:38ecd3d98f79 12 DigitalOut g_led (LED2);
co657_frmb 0:38ecd3d98f79 13 DigitalOut b_led (LED3);
co657_frmb 0:38ecd3d98f79 14
co657_frmb 0:38ecd3d98f79 15 Serial host (USBTX, USBRX); /* to-host UART via OpenSDAv2 */
co657_frmb 0:38ecd3d98f79 16
co657_frmb 0:38ecd3d98f79 17 InterruptIn sw2_int (PTC6); /* interrupts for the two on-board switches */
co657_frmb 0:38ecd3d98f79 18 InterruptIn sw3_int (PTA4);
co657_frmb 0:38ecd3d98f79 19
co657_frmb 0:38ecd3d98f79 20 Ticker rgb_tick; /* timer for driving the LED */
co657_frmb 0:38ecd3d98f79 21
co657_frmb 0:38ecd3d98f79 22 static volatile uint16_t counters[3]; /* red, green, blue */
co657_frmb 0:38ecd3d98f79 23 static volatile uint8_t bright[3];
co657_frmb 0:38ecd3d98f79 24
co657_frmb 0:38ecd3d98f79 25 static volatile int sw2_trig; /* switches triggered? */
co657_frmb 0:38ecd3d98f79 26 static volatile int sw3_trig;
co657_frmb 0:38ecd3d98f79 27
co657_frmb 0:38ecd3d98f79 28
co657_frmb 0:38ecd3d98f79 29 /*
co657_frmb 0:38ecd3d98f79 30 * turns offset [0-311] into brightness level [0-255-255-0].
co657_frmb 0:38ecd3d98f79 31 */
co657_frmb 0:38ecd3d98f79 32 uint8_t brilvl (int offset)
co657_frmb 0:38ecd3d98f79 33 {
co657_frmb 0:38ecd3d98f79 34 while (offset > 311) {
co657_frmb 0:38ecd3d98f79 35 offset -= 312;
co657_frmb 0:38ecd3d98f79 36 }
co657_frmb 0:38ecd3d98f79 37 if (offset < 52) {
co657_frmb 0:38ecd3d98f79 38 return (uint8_t)(offset * 5);
co657_frmb 0:38ecd3d98f79 39 } else if (offset < 156) {
co657_frmb 0:38ecd3d98f79 40 return 255;
co657_frmb 0:38ecd3d98f79 41 } else if (offset < 208) {
co657_frmb 0:38ecd3d98f79 42 return (uint8_t)((207 - offset) * 5);
co657_frmb 0:38ecd3d98f79 43 }
co657_frmb 0:38ecd3d98f79 44 return 0;
co657_frmb 0:38ecd3d98f79 45 }
co657_frmb 0:38ecd3d98f79 46
co657_frmb 0:38ecd3d98f79 47
co657_frmb 0:38ecd3d98f79 48 /*
co657_frmb 0:38ecd3d98f79 49 * resets the various counters to their initial state
co657_frmb 0:38ecd3d98f79 50 */
co657_frmb 0:38ecd3d98f79 51 void reset_counters (void)
co657_frmb 0:38ecd3d98f79 52 {
co657_frmb 0:38ecd3d98f79 53 for (int i=0; i<3; i++) {
co657_frmb 0:38ecd3d98f79 54 counters[i] = 0;
co657_frmb 0:38ecd3d98f79 55 bright[i] = brilvl (i * 104);
co657_frmb 0:38ecd3d98f79 56 }
co657_frmb 0:38ecd3d98f79 57 }
co657_frmb 0:38ecd3d98f79 58
co657_frmb 0:38ecd3d98f79 59
co657_frmb 0:38ecd3d98f79 60 /*
co657_frmb 0:38ecd3d98f79 61 * interrupt handlers
co657_frmb 0:38ecd3d98f79 62 */
co657_frmb 0:38ecd3d98f79 63 void rgb_tick_interrupt (void)
co657_frmb 0:38ecd3d98f79 64 {
co657_frmb 0:38ecd3d98f79 65 for (int i=0; i<3; i++) {
co657_frmb 0:38ecd3d98f79 66 counters[i] += (uint16_t)bright[i];
co657_frmb 0:38ecd3d98f79 67 }
co657_frmb 0:38ecd3d98f79 68
co657_frmb 0:38ecd3d98f79 69 r_led = ((counters[0] >> 8) & 1) ^ 1;
co657_frmb 0:38ecd3d98f79 70 g_led = ((counters[1] >> 8) & 1) ^ 1;
co657_frmb 0:38ecd3d98f79 71 b_led = ((counters[2] >> 8) & 1) ^ 1;
co657_frmb 0:38ecd3d98f79 72
co657_frmb 0:38ecd3d98f79 73 for (int i=0; i<3; i++) {
co657_frmb 0:38ecd3d98f79 74 counters[i] &= 0xff;
co657_frmb 0:38ecd3d98f79 75 }
co657_frmb 0:38ecd3d98f79 76 }
co657_frmb 0:38ecd3d98f79 77
co657_frmb 0:38ecd3d98f79 78
co657_frmb 0:38ecd3d98f79 79 void sw2_interrupt (void)
co657_frmb 0:38ecd3d98f79 80 {
co657_frmb 0:38ecd3d98f79 81 sw2_trig = 1;
co657_frmb 0:38ecd3d98f79 82 }
co657_frmb 0:38ecd3d98f79 83
co657_frmb 0:38ecd3d98f79 84
co657_frmb 0:38ecd3d98f79 85 void sw3_interrupt (void)
co657_frmb 0:38ecd3d98f79 86 {
co657_frmb 0:38ecd3d98f79 87 sw3_trig = 1;
co657_frmb 0:38ecd3d98f79 88 }
co657_frmb 0:38ecd3d98f79 89
co657_frmb 0:38ecd3d98f79 90
co657_frmb 0:38ecd3d98f79 91
co657_frmb 0:38ecd3d98f79 92
co657_frmb 0:38ecd3d98f79 93 /*
co657_frmb 0:38ecd3d98f79 94 * start here
co657_frmb 0:38ecd3d98f79 95 */
co657_frmb 0:38ecd3d98f79 96 int main (void)
co657_frmb 0:38ecd3d98f79 97 {
co657_frmb 0:38ecd3d98f79 98 int ctr;
co657_frmb 0:38ecd3d98f79 99
co657_frmb 0:38ecd3d98f79 100 host.baud (38400);
co657_frmb 0:38ecd3d98f79 101 host.printf ("Hello, FRDM-K64F driving-test world!\r\n");
co657_frmb 0:38ecd3d98f79 102
co657_frmb 0:38ecd3d98f79 103 sw2_trig = 0;
co657_frmb 0:38ecd3d98f79 104 sw3_trig = 0;
co657_frmb 0:38ecd3d98f79 105
co657_frmb 0:38ecd3d98f79 106 reset_counters ();
co657_frmb 0:38ecd3d98f79 107
co657_frmb 0:38ecd3d98f79 108 rgb_tick.attach (&rgb_tick_interrupt, 0.001);
co657_frmb 0:38ecd3d98f79 109 ctr = 0;
co657_frmb 0:38ecd3d98f79 110
co657_frmb 0:38ecd3d98f79 111 sw2_int.mode (PullUp);
co657_frmb 0:38ecd3d98f79 112 sw2_int.fall (&sw2_interrupt);
co657_frmb 0:38ecd3d98f79 113
co657_frmb 0:38ecd3d98f79 114 sw3_int.mode (PullUp);
co657_frmb 0:38ecd3d98f79 115 sw3_int.fall (&sw3_interrupt);
co657_frmb 0:38ecd3d98f79 116
co657_frmb 0:38ecd3d98f79 117 /* and then forever.. */
co657_frmb 0:38ecd3d98f79 118 for (;;) {
co657_frmb 0:38ecd3d98f79 119 wait (0.02);
co657_frmb 0:38ecd3d98f79 120
co657_frmb 0:38ecd3d98f79 121 if (sw2_trig) {
co657_frmb 0:38ecd3d98f79 122 ctr += 104;
co657_frmb 0:38ecd3d98f79 123 sw2_trig = 0;
co657_frmb 0:38ecd3d98f79 124 }
co657_frmb 0:38ecd3d98f79 125 if (sw3_trig) {
co657_frmb 0:38ecd3d98f79 126 ctr += 208;
co657_frmb 0:38ecd3d98f79 127 sw3_trig = 0;
co657_frmb 0:38ecd3d98f79 128 }
co657_frmb 0:38ecd3d98f79 129
co657_frmb 0:38ecd3d98f79 130 ctr++;
co657_frmb 0:38ecd3d98f79 131 if (ctr > 311) {
co657_frmb 0:38ecd3d98f79 132 ctr -= 312;
co657_frmb 0:38ecd3d98f79 133 }
co657_frmb 0:38ecd3d98f79 134 for (int i=0; i<3; i++) {
co657_frmb 0:38ecd3d98f79 135 bright[i] = brilvl (ctr + (i * 104));
co657_frmb 0:38ecd3d98f79 136 }
co657_frmb 0:38ecd3d98f79 137 }
co657_frmb 0:38ecd3d98f79 138 }
co657_frmb 0:38ecd3d98f79 139