Interface layer for the mbed boards ready for the JAVA library
Dependencies: C12832 LM75B MMA7660 mbed FXOS8700Q
Fork of frdm_serial by
main.cpp
- Committer:
- azazeal88
- Date:
- 2015-11-20
- Revision:
- 1:38f32fc3db2c
- Parent:
- 0:6891aea05ef2
- Child:
- 2:2dcdbb85cae0
File content as of revision 1:38f32fc3db2c:
#include "mbed.h" #include "C12832.h" #include "LM75B.h" #include "MMA7660.h" #include "FXOS8700CQ.h" //OUTPUTS PwmOut lr(LED_RED), lg(LED_GREEN), lb(LED_BLUE), xr(D5), xg(D9), xb(PTC12); C12832 lcd(D11, D13, D12, D7, D10); //INPUTS LM75B temp(D14, D15); MMA7660 accel(SDA,SCL); FXOS8700CQ magAccel(SDA,SCL,FXOS8700CQ_SLAVE_ADDR1); InterruptIn sw2_int(PTC6), sw3_int(PTA4), up_int(A2), down_int(A3), left_int(A4), right_int(A5), fire_int(D5); DigitalIn sw2(PTC6), sw3(PTA4), up(A2), down(A2A3, left(A4), right(A5), fire(D5); AnalogIn pot1(A0), pot2(A1); //FLAGS uint16_t flags; #define SW2_DOWN 0x0001 #define SW2_UP 0x0002 #define SW3_UP 0x0004 #define SW3_DOWN 0x0008 #define UP_UP 0x0010 #define UP_DOWN 0x0020 #define DOWN_UP 0x0040 #define DOWN_DOWN 0x0080 #define LEFT_UP 0x0100 #define LEFT_DOWN 0x0200 #define RIGHT_UP 0x0400 #define RIGHT_DOWN 0x0800 #define FIRE_UP 0x1000 #define FIRE_DOWN 0x2000 //COMMS Serial pc(USBTX, USBRX); void sw2Down(){ flags |= SW2_DOWN; } void sw2Up() { flags |= SW2_UP; } void sw3Down(){ flags |= SW3_DOWN; } void sw3Up() { flags |= SW3_UP; } void upDown(){ flags |= UP_DOWN; } void upUp() { flags |= UP_UP; } void downDown(){ flags |= DOWN_DOWN; } void downUp() { flags |= DOWN_UP; } void leftDown(){ flags |= LEFT_DOWN; } void leftUp() { flags |= LEFT_UP; } void rightDown(){ flags |= RIGHT_DOWN; } void rightUp() { flags |= RIGHT_UP; } void fireDown(){ flags |= FIRE_DOWN; } void fireUp() { flags |= FIRE_UP; } void readDigitalIn() { bool val; switch(pc.getc()) { case '2': val=sw2; break; case '3': val=sw3 break; case 'u': val=up; break; case 'd': val=down; break; case 'l': val=left; break; case 'r': val=right; break; case 'f': val=fire; break; default: return; } pc.printf(val?"t;":"f;"); } void readPot() { float val; switch(pc.getc()) { case '1': val=pot1; break; case '2': val=pot2; break; default: return; } pc.printf("%6.4f;",val); } int main() { //SETUP xr = xg = xb = 0; lr = lg = lb = 0; sw2_int.mode (PullUp); sw2_int.fall(&sw2Down); sw2_int.rise(&sw2Up); sw3_int.mode (PullUp); sw3_int.fall(&sw3Down); sw3_int.rise(&sw3Up); up_int.mode (PullUp); up_int.fall(&upDown); up_int.rise(&upUp); up_int.disable_irq(); down_int.mode (PullUp); down_int.fall(&downDown); down_int.rise(&downUp); left_int.mode (PullUp); left_int.fall(&leftDown); left_int.rise(&leftUp); right_int.mode (PullUp); right_int.fall(&rightDown); right_int.rise(&rightUp); fire_int.mode (PullUp); fire_int.fall(&fireDown); fire_int.rise(&fireUp); tempSender.attach(&sendTemp, 2.0); pc.baud(115200); for(;;) { //Check for interrupts if(flags&SW2_UP) { pc.printf("!2u;"); flags&=!SW2_UP; } if(flags&SW2_DOWN) { pc.printf("!2d;"); flags&=!SW2_DOWN; } if(flags&SW3_UP) { pc.printf("!3u;"); flags&=!SW3_UP; } if(flags&SW3_DOWN) { pc.printf("!3d;"); flags&=!SW3_DOWN; } if(flags&UP_UP) { pc.printf("!uu;"); flags&=!UP_UP; } if(flags&UP_DOWN) { pc.printf("!ud;"); flags&=!UP_DOWN; } if(flags&DOWN_UP) { pc.printf("!du;"); flags&=!DOWN_UP; } if(flags&DOWN_DOWN) { pc.printf("!dd;"); flags&=!DOWN_DOWN; } if(flags&LEFT_UP) { pc.printf("!lu;"); flags&=!LEFT_UP; } if(flags&LEFT_DOWN) { pc.printf("!ld;"); flags&=!LEFT_DOWN; } if(flags&RIGHT_UP) { pc.printf("!ru;"); flags&=!RIGHT_UP; } if(flags&RIGHT_DOWN) { pc.printf("!rd;"); flags&=!RIGHT_DOWN; } if(flags&FIRE_UP) { pc.printf("!fu;"); flags&=!FIRE_UP; } if(flags&FIRE_DOWN) { pc.printf("!fd;"); flags&=!FIRE_DOWN; } //Check for host requests if(pc.readable()) { switch(pc.getc()) { case 'R': { //read digital input readDigitalIn(); break; } case 'p': { readPot(); } case 't': { //read temp pc.printf("%.4f;",temp.temp()); break; } case 'a': {//read shield accel pc.printf("%.4f;%.4f;%.4f;",accel.x(),accel.y(),accel.z()); break; } case 'l': { //shield led float r, g, b; pc.scanf("%f;%f;%f", &r, &g, &b); xr = r; xg = g; xb = b; break; } case 'L': { // board led float r, g, b; pc.scanf("%f;%f;%f", &r, &g, &b); lr = r; lg = g; lb = b; break; } case 'M': { //read board magno SRAWDATA m, a; magAccel.get_data(&a,&m); pc.printf("%d;%d;%d;",m.x,m.y,m.z); break; } case 'A': { //read board accel SRAWDATA m, a; magAccel.get_data(&a,&m); pc.printf("%d;%d;%d;",a.x,a.y,a.z); break; } case 'P': { //set lcd position int x, y; pc.scanf("%d;%d", &x, &y); lcd.locate(x,y); } case 'S': { //print lcd text int x, y; char c = pc.getc(); while(c!='"') { if(c=='\\') lcd.putc(pc.getc()); else lcd.putc(c); } } case 'D': { //print lcd text int x, y, c; pc.scanf("%d;%d;%d", &x, &y, &c); lcd.pixel(x,y,c); } case 'C': { //clear lcd lcd.cls(); } default: break; } } } }