Interface layer for the mbed boards ready for the JAVA library

Dependencies:   C12832 LM75B MMA7660 mbed FXOS8700Q

Fork of frdm_serial by Michael Berry

Committer:
Condo2k4
Date:
Fri Nov 20 22:10:58 2015 +0000
Revision:
2:2dcdbb85cae0
Parent:
1:38f32fc3db2c
Child:
3:990f8380da21
It actually compiles now...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
azazeal88 1:38f32fc3db2c 1 #include "mbed.h"
co657_mjrb6 0:6891aea05ef2 2 #include "C12832.h"
co657_mjrb6 0:6891aea05ef2 3 #include "LM75B.h"
azazeal88 1:38f32fc3db2c 4 #include "MMA7660.h"
azazeal88 1:38f32fc3db2c 5 #include "FXOS8700CQ.h"
azazeal88 1:38f32fc3db2c 6
azazeal88 1:38f32fc3db2c 7 //OUTPUTS
azazeal88 1:38f32fc3db2c 8
azazeal88 1:38f32fc3db2c 9 PwmOut lr(LED_RED), lg(LED_GREEN), lb(LED_BLUE), xr(D5), xg(D9), xb(PTC12);
azazeal88 1:38f32fc3db2c 10 C12832 lcd(D11, D13, D12, D7, D10);
co657_mjrb6 0:6891aea05ef2 11
azazeal88 1:38f32fc3db2c 12 //INPUTS
azazeal88 1:38f32fc3db2c 13
azazeal88 1:38f32fc3db2c 14 LM75B temp(D14, D15);
Condo2k4 2:2dcdbb85cae0 15 MMA7660 accel(D14, D15);
Condo2k4 2:2dcdbb85cae0 16 FXOS8700CQ magAccel(D14, D15, FXOS8700CQ_SLAVE_ADDR1);
azazeal88 1:38f32fc3db2c 17
azazeal88 1:38f32fc3db2c 18 InterruptIn sw2_int(PTC6), sw3_int(PTA4), up_int(A2), down_int(A3), left_int(A4), right_int(A5), fire_int(D5);
Condo2k4 2:2dcdbb85cae0 19 DigitalIn sw2(PTC6), sw3(PTA4), up(A2), down(A3), left(A4), right(A5), fire(D5);
azazeal88 1:38f32fc3db2c 20
azazeal88 1:38f32fc3db2c 21 AnalogIn pot1(A0), pot2(A1);
co657_mjrb6 0:6891aea05ef2 22
azazeal88 1:38f32fc3db2c 23 //FLAGS
co657_mjrb6 0:6891aea05ef2 24
azazeal88 1:38f32fc3db2c 25 uint16_t flags;
azazeal88 1:38f32fc3db2c 26 #define SW2_DOWN 0x0001
azazeal88 1:38f32fc3db2c 27 #define SW2_UP 0x0002
azazeal88 1:38f32fc3db2c 28 #define SW3_UP 0x0004
azazeal88 1:38f32fc3db2c 29 #define SW3_DOWN 0x0008
azazeal88 1:38f32fc3db2c 30 #define UP_UP 0x0010
azazeal88 1:38f32fc3db2c 31 #define UP_DOWN 0x0020
azazeal88 1:38f32fc3db2c 32 #define DOWN_UP 0x0040
azazeal88 1:38f32fc3db2c 33 #define DOWN_DOWN 0x0080
azazeal88 1:38f32fc3db2c 34 #define LEFT_UP 0x0100
azazeal88 1:38f32fc3db2c 35 #define LEFT_DOWN 0x0200
azazeal88 1:38f32fc3db2c 36 #define RIGHT_UP 0x0400
azazeal88 1:38f32fc3db2c 37 #define RIGHT_DOWN 0x0800
azazeal88 1:38f32fc3db2c 38 #define FIRE_UP 0x1000
azazeal88 1:38f32fc3db2c 39 #define FIRE_DOWN 0x2000
co657_mjrb6 0:6891aea05ef2 40
azazeal88 1:38f32fc3db2c 41 //COMMS
co657_mjrb6 0:6891aea05ef2 42
co657_mjrb6 0:6891aea05ef2 43 Serial pc(USBTX, USBRX);
co657_mjrb6 0:6891aea05ef2 44
Condo2k4 2:2dcdbb85cae0 45 //INTERRUPT HANDLERS
Condo2k4 2:2dcdbb85cae0 46
azazeal88 1:38f32fc3db2c 47 void sw2Down(){ flags |= SW2_DOWN; }
azazeal88 1:38f32fc3db2c 48 void sw2Up() { flags |= SW2_UP; }
azazeal88 1:38f32fc3db2c 49
azazeal88 1:38f32fc3db2c 50 void sw3Down(){ flags |= SW3_DOWN; }
azazeal88 1:38f32fc3db2c 51 void sw3Up() { flags |= SW3_UP; }
azazeal88 1:38f32fc3db2c 52
azazeal88 1:38f32fc3db2c 53 void upDown(){ flags |= UP_DOWN; }
azazeal88 1:38f32fc3db2c 54 void upUp() { flags |= UP_UP; }
azazeal88 1:38f32fc3db2c 55
azazeal88 1:38f32fc3db2c 56 void downDown(){ flags |= DOWN_DOWN; }
azazeal88 1:38f32fc3db2c 57 void downUp() { flags |= DOWN_UP; }
azazeal88 1:38f32fc3db2c 58
azazeal88 1:38f32fc3db2c 59 void leftDown(){ flags |= LEFT_DOWN; }
azazeal88 1:38f32fc3db2c 60 void leftUp() { flags |= LEFT_UP; }
azazeal88 1:38f32fc3db2c 61
azazeal88 1:38f32fc3db2c 62 void rightDown(){ flags |= RIGHT_DOWN; }
azazeal88 1:38f32fc3db2c 63 void rightUp() { flags |= RIGHT_UP; }
azazeal88 1:38f32fc3db2c 64
azazeal88 1:38f32fc3db2c 65 void fireDown(){ flags |= FIRE_DOWN; }
azazeal88 1:38f32fc3db2c 66 void fireUp() { flags |= FIRE_UP; }
azazeal88 1:38f32fc3db2c 67
Condo2k4 2:2dcdbb85cae0 68 /*
Condo2k4 2:2dcdbb85cae0 69 Return the state of a requested pin
Condo2k4 2:2dcdbb85cae0 70 */
azazeal88 1:38f32fc3db2c 71 void readDigitalIn() {
azazeal88 1:38f32fc3db2c 72 bool val;
azazeal88 1:38f32fc3db2c 73 switch(pc.getc()) {
azazeal88 1:38f32fc3db2c 74 case '2': val=sw2; break;
Condo2k4 2:2dcdbb85cae0 75 case '3': val=sw3; break;
azazeal88 1:38f32fc3db2c 76 case 'u': val=up; break;
azazeal88 1:38f32fc3db2c 77 case 'd': val=down; break;
azazeal88 1:38f32fc3db2c 78 case 'l': val=left; break;
azazeal88 1:38f32fc3db2c 79 case 'r': val=right; break;
azazeal88 1:38f32fc3db2c 80 case 'f': val=fire; break;
azazeal88 1:38f32fc3db2c 81 default: return;
co657_mjrb6 0:6891aea05ef2 82 }
azazeal88 1:38f32fc3db2c 83 pc.printf(val?"t;":"f;");
co657_mjrb6 0:6891aea05ef2 84 }
co657_mjrb6 0:6891aea05ef2 85
Condo2k4 2:2dcdbb85cae0 86 /*
Condo2k4 2:2dcdbb85cae0 87 Return the state of a requested potentiometer
Condo2k4 2:2dcdbb85cae0 88 */
azazeal88 1:38f32fc3db2c 89 void readPot() {
azazeal88 1:38f32fc3db2c 90 float val;
azazeal88 1:38f32fc3db2c 91 switch(pc.getc()) {
azazeal88 1:38f32fc3db2c 92 case '1': val=pot1; break;
azazeal88 1:38f32fc3db2c 93 case '2': val=pot2; break;
azazeal88 1:38f32fc3db2c 94 default: return;
azazeal88 1:38f32fc3db2c 95 }
azazeal88 1:38f32fc3db2c 96 pc.printf("%6.4f;",val);
co657_mjrb6 0:6891aea05ef2 97 }
co657_mjrb6 0:6891aea05ef2 98
co657_mjrb6 0:6891aea05ef2 99 int main() {
azazeal88 1:38f32fc3db2c 100 //SETUP
azazeal88 1:38f32fc3db2c 101
azazeal88 1:38f32fc3db2c 102 xr = xg = xb = 0;
azazeal88 1:38f32fc3db2c 103 lr = lg = lb = 0;
co657_mjrb6 0:6891aea05ef2 104
co657_mjrb6 0:6891aea05ef2 105 sw2_int.mode (PullUp);
co657_mjrb6 0:6891aea05ef2 106 sw2_int.fall(&sw2Down);
co657_mjrb6 0:6891aea05ef2 107 sw2_int.rise(&sw2Up);
co657_mjrb6 0:6891aea05ef2 108
co657_mjrb6 0:6891aea05ef2 109 sw3_int.mode (PullUp);
co657_mjrb6 0:6891aea05ef2 110 sw3_int.fall(&sw3Down);
co657_mjrb6 0:6891aea05ef2 111 sw3_int.rise(&sw3Up);
co657_mjrb6 0:6891aea05ef2 112
azazeal88 1:38f32fc3db2c 113 up_int.mode (PullUp);
azazeal88 1:38f32fc3db2c 114 up_int.fall(&upDown);
azazeal88 1:38f32fc3db2c 115 up_int.rise(&upUp);
azazeal88 1:38f32fc3db2c 116 up_int.disable_irq();
azazeal88 1:38f32fc3db2c 117
azazeal88 1:38f32fc3db2c 118 down_int.mode (PullUp);
azazeal88 1:38f32fc3db2c 119 down_int.fall(&downDown);
azazeal88 1:38f32fc3db2c 120 down_int.rise(&downUp);
azazeal88 1:38f32fc3db2c 121
azazeal88 1:38f32fc3db2c 122 left_int.mode (PullUp);
azazeal88 1:38f32fc3db2c 123 left_int.fall(&leftDown);
azazeal88 1:38f32fc3db2c 124 left_int.rise(&leftUp);
azazeal88 1:38f32fc3db2c 125
azazeal88 1:38f32fc3db2c 126 right_int.mode (PullUp);
azazeal88 1:38f32fc3db2c 127 right_int.fall(&rightDown);
azazeal88 1:38f32fc3db2c 128 right_int.rise(&rightUp);
azazeal88 1:38f32fc3db2c 129
azazeal88 1:38f32fc3db2c 130 fire_int.mode (PullUp);
azazeal88 1:38f32fc3db2c 131 fire_int.fall(&fireDown);
azazeal88 1:38f32fc3db2c 132 fire_int.rise(&fireUp);
co657_mjrb6 0:6891aea05ef2 133
co657_mjrb6 0:6891aea05ef2 134 pc.baud(115200);
azazeal88 1:38f32fc3db2c 135
azazeal88 1:38f32fc3db2c 136 for(;;) {
Condo2k4 2:2dcdbb85cae0 137 //Check if any interrupts fired
azazeal88 1:38f32fc3db2c 138 if(flags&SW2_UP) {
azazeal88 1:38f32fc3db2c 139 pc.printf("!2u;"); flags&=!SW2_UP;
azazeal88 1:38f32fc3db2c 140 }
azazeal88 1:38f32fc3db2c 141 if(flags&SW2_DOWN) {
azazeal88 1:38f32fc3db2c 142 pc.printf("!2d;"); flags&=!SW2_DOWN;
azazeal88 1:38f32fc3db2c 143 }
azazeal88 1:38f32fc3db2c 144 if(flags&SW3_UP) {
azazeal88 1:38f32fc3db2c 145 pc.printf("!3u;"); flags&=!SW3_UP;
azazeal88 1:38f32fc3db2c 146 }
azazeal88 1:38f32fc3db2c 147 if(flags&SW3_DOWN) {
azazeal88 1:38f32fc3db2c 148 pc.printf("!3d;"); flags&=!SW3_DOWN;
azazeal88 1:38f32fc3db2c 149 }
azazeal88 1:38f32fc3db2c 150 if(flags&UP_UP) {
azazeal88 1:38f32fc3db2c 151 pc.printf("!uu;"); flags&=!UP_UP;
azazeal88 1:38f32fc3db2c 152 }
azazeal88 1:38f32fc3db2c 153 if(flags&UP_DOWN) {
azazeal88 1:38f32fc3db2c 154 pc.printf("!ud;"); flags&=!UP_DOWN;
co657_mjrb6 0:6891aea05ef2 155 }
azazeal88 1:38f32fc3db2c 156 if(flags&DOWN_UP) {
azazeal88 1:38f32fc3db2c 157 pc.printf("!du;"); flags&=!DOWN_UP;
azazeal88 1:38f32fc3db2c 158 }
azazeal88 1:38f32fc3db2c 159 if(flags&DOWN_DOWN) {
azazeal88 1:38f32fc3db2c 160 pc.printf("!dd;"); flags&=!DOWN_DOWN;
azazeal88 1:38f32fc3db2c 161 }
azazeal88 1:38f32fc3db2c 162 if(flags&LEFT_UP) {
azazeal88 1:38f32fc3db2c 163 pc.printf("!lu;"); flags&=!LEFT_UP;
azazeal88 1:38f32fc3db2c 164 }
azazeal88 1:38f32fc3db2c 165 if(flags&LEFT_DOWN) {
azazeal88 1:38f32fc3db2c 166 pc.printf("!ld;"); flags&=!LEFT_DOWN;
co657_mjrb6 0:6891aea05ef2 167 }
azazeal88 1:38f32fc3db2c 168 if(flags&RIGHT_UP) {
azazeal88 1:38f32fc3db2c 169 pc.printf("!ru;"); flags&=!RIGHT_UP;
azazeal88 1:38f32fc3db2c 170 }
azazeal88 1:38f32fc3db2c 171 if(flags&RIGHT_DOWN) {
azazeal88 1:38f32fc3db2c 172 pc.printf("!rd;"); flags&=!RIGHT_DOWN;
azazeal88 1:38f32fc3db2c 173 }
azazeal88 1:38f32fc3db2c 174 if(flags&FIRE_UP) {
azazeal88 1:38f32fc3db2c 175 pc.printf("!fu;"); flags&=!FIRE_UP;
azazeal88 1:38f32fc3db2c 176 }
azazeal88 1:38f32fc3db2c 177 if(flags&FIRE_DOWN) {
azazeal88 1:38f32fc3db2c 178 pc.printf("!fd;"); flags&=!FIRE_DOWN;
co657_mjrb6 0:6891aea05ef2 179 }
azazeal88 1:38f32fc3db2c 180
azazeal88 1:38f32fc3db2c 181 //Check for host requests
co657_mjrb6 0:6891aea05ef2 182 if(pc.readable()) {
azazeal88 1:38f32fc3db2c 183 switch(pc.getc()) {
azazeal88 1:38f32fc3db2c 184 case 'R': { //read digital input
azazeal88 1:38f32fc3db2c 185 readDigitalIn();
azazeal88 1:38f32fc3db2c 186 break;
azazeal88 1:38f32fc3db2c 187 }
azazeal88 1:38f32fc3db2c 188 case 'p': {
azazeal88 1:38f32fc3db2c 189 readPot();
azazeal88 1:38f32fc3db2c 190 }
azazeal88 1:38f32fc3db2c 191 case 't': { //read temp
Condo2k4 2:2dcdbb85cae0 192 pc.printf("%.4f;",temp.read());
azazeal88 1:38f32fc3db2c 193 break;
azazeal88 1:38f32fc3db2c 194 }
azazeal88 1:38f32fc3db2c 195 case 'a': {//read shield accel
azazeal88 1:38f32fc3db2c 196 pc.printf("%.4f;%.4f;%.4f;",accel.x(),accel.y(),accel.z());
azazeal88 1:38f32fc3db2c 197 break;
azazeal88 1:38f32fc3db2c 198 }
azazeal88 1:38f32fc3db2c 199 case 'l': { //shield led
azazeal88 1:38f32fc3db2c 200 float r, g, b;
azazeal88 1:38f32fc3db2c 201 pc.scanf("%f;%f;%f", &r, &g, &b);
azazeal88 1:38f32fc3db2c 202 xr = r; xg = g; xb = b;
azazeal88 1:38f32fc3db2c 203 break;
azazeal88 1:38f32fc3db2c 204 }
azazeal88 1:38f32fc3db2c 205 case 'L': { // board led
azazeal88 1:38f32fc3db2c 206 float r, g, b;
azazeal88 1:38f32fc3db2c 207 pc.scanf("%f;%f;%f", &r, &g, &b);
azazeal88 1:38f32fc3db2c 208 lr = r; lg = g; lb = b;
azazeal88 1:38f32fc3db2c 209 break;
azazeal88 1:38f32fc3db2c 210 }
azazeal88 1:38f32fc3db2c 211 case 'M': { //read board magno
azazeal88 1:38f32fc3db2c 212 SRAWDATA m, a;
azazeal88 1:38f32fc3db2c 213 magAccel.get_data(&a,&m);
azazeal88 1:38f32fc3db2c 214 pc.printf("%d;%d;%d;",m.x,m.y,m.z);
azazeal88 1:38f32fc3db2c 215 break;
azazeal88 1:38f32fc3db2c 216 }
azazeal88 1:38f32fc3db2c 217 case 'A': { //read board accel
azazeal88 1:38f32fc3db2c 218 SRAWDATA m, a;
azazeal88 1:38f32fc3db2c 219 magAccel.get_data(&a,&m);
azazeal88 1:38f32fc3db2c 220 pc.printf("%d;%d;%d;",a.x,a.y,a.z);
azazeal88 1:38f32fc3db2c 221 break;
azazeal88 1:38f32fc3db2c 222 }
azazeal88 1:38f32fc3db2c 223 case 'P': { //set lcd position
azazeal88 1:38f32fc3db2c 224 int x, y;
azazeal88 1:38f32fc3db2c 225 pc.scanf("%d;%d", &x, &y);
azazeal88 1:38f32fc3db2c 226 lcd.locate(x,y);
azazeal88 1:38f32fc3db2c 227 }
azazeal88 1:38f32fc3db2c 228 case 'S': { //print lcd text
azazeal88 1:38f32fc3db2c 229 char c = pc.getc();
azazeal88 1:38f32fc3db2c 230 while(c!='"') {
azazeal88 1:38f32fc3db2c 231 if(c=='\\') lcd.putc(pc.getc());
azazeal88 1:38f32fc3db2c 232 else lcd.putc(c);
azazeal88 1:38f32fc3db2c 233 }
azazeal88 1:38f32fc3db2c 234 }
azazeal88 1:38f32fc3db2c 235 case 'D': { //print lcd text
azazeal88 1:38f32fc3db2c 236 int x, y, c;
azazeal88 1:38f32fc3db2c 237 pc.scanf("%d;%d;%d", &x, &y, &c);
azazeal88 1:38f32fc3db2c 238 lcd.pixel(x,y,c);
azazeal88 1:38f32fc3db2c 239 }
azazeal88 1:38f32fc3db2c 240 case 'C': { //clear lcd
azazeal88 1:38f32fc3db2c 241 lcd.cls();
azazeal88 1:38f32fc3db2c 242 }
azazeal88 1:38f32fc3db2c 243 default: break;
co657_mjrb6 0:6891aea05ef2 244 }
co657_mjrb6 0:6891aea05ef2 245 }
co657_mjrb6 0:6891aea05ef2 246 }
co657_mjrb6 0:6891aea05ef2 247 }
co657_mjrb6 0:6891aea05ef2 248