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 15:34:29 2015 +0000
Revision:
1:a6827c4eef14
Parent:
dtest.cpp@0:38ecd3d98f79
Child:
2:2b973afc0924
Added C12832 and LM75B libraries

Who changed what in which revision?

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