Sensor reporting over USB CDC

Dependencies:   MAG3110 MMA8451Q SLCD- TSI USBDevice mbed

Committer:
wue
Date:
Wed Apr 16 12:20:12 2014 +0000
Revision:
0:7b58cdacf811
Sensor reporting over USB CDC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wue 0:7b58cdacf811 1 //USB Academy - Lab2 rev 00
wue 0:7b58cdacf811 2 //_____________________________________________________________//
wue 0:7b58cdacf811 3 //======== INCLUDES ===========================================//
wue 0:7b58cdacf811 4 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
wue 0:7b58cdacf811 5 #include "mbed.h"
wue 0:7b58cdacf811 6 #include "MMA8451Q.h"
wue 0:7b58cdacf811 7 #include "MAG3110.h"
wue 0:7b58cdacf811 8 #include "SLCD.h"
wue 0:7b58cdacf811 9 #include "TSISensor.h"
wue 0:7b58cdacf811 10
wue 0:7b58cdacf811 11 //#include "USBMouse.h" //Lab1-Hid
wue 0:7b58cdacf811 12 //#include "USBSerial.h" //Lab2-cdc
wue 0:7b58cdacf811 13 //#include "USBHostMSD.h" //Lab3-Msd
wue 0:7b58cdacf811 14
wue 0:7b58cdacf811 15 //_____________________________________________________________//
wue 0:7b58cdacf811 16 //======== DEFINES & VARIABLES ================================//
wue 0:7b58cdacf811 17 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
wue 0:7b58cdacf811 18
wue 0:7b58cdacf811 19 SLCD slcd; //[88:88][8.8.8.8] SegmentLCD
wue 0:7b58cdacf811 20
wue 0:7b58cdacf811 21 AnalogIn light(PTE22); //analog-light input
wue 0:7b58cdacf811 22
wue 0:7b58cdacf811 23 TSISensor slider; //Capacitive Touch Slider
wue 0:7b58cdacf811 24
wue 0:7b58cdacf811 25 MAG3110 mag(PTE25, PTE24); //Magnetometer
wue 0:7b58cdacf811 26
wue 0:7b58cdacf811 27 Serial usb_osda(USBTX, USBRX); //OpenSDA Terminal
wue 0:7b58cdacf811 28 #define pf usb_osda //printf out -> osda (lab1,2,3)
wue 0:7b58cdacf811 29
wue 0:7b58cdacf811 30
wue 0:7b58cdacf811 31
wue 0:7b58cdacf811 32
wue 0:7b58cdacf811 33 #define LED_ON 0 //outON, pwmON
wue 0:7b58cdacf811 34 #define LED_OFF 1 //outOFF,pwmOFF
wue 0:7b58cdacf811 35 DigitalOut gLED(LED_GREEN); //PTD5
wue 0:7b58cdacf811 36
wue 0:7b58cdacf811 37 #define rLEDperiod 150 //[ms]
wue 0:7b58cdacf811 38 PwmOut rLED(LED_RED); //PTE29
wue 0:7b58cdacf811 39
wue 0:7b58cdacf811 40 #define PRESS_ON 0
wue 0:7b58cdacf811 41 #define PRESS_OFF 1
wue 0:7b58cdacf811 42 DigitalIn sw1(PTC3); //if(sw1) Release else Press
wue 0:7b58cdacf811 43 DigitalIn sw3(PTC12); //while(sw3); wait for Press
wue 0:7b58cdacf811 44
wue 0:7b58cdacf811 45 #define MMA8451_I2C_ADDRESS (0x1d<<1)
wue 0:7b58cdacf811 46 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
wue 0:7b58cdacf811 47
wue 0:7b58cdacf811 48 struct KL46_SENSOR_DATA {
wue 0:7b58cdacf811 49 int sw1State;
wue 0:7b58cdacf811 50 int sw3State;
wue 0:7b58cdacf811 51 float accValX;
wue 0:7b58cdacf811 52 float accValY;
wue 0:7b58cdacf811 53 float accValZ;
wue 0:7b58cdacf811 54
wue 0:7b58cdacf811 55 float slider;
wue 0:7b58cdacf811 56 float light;
wue 0:7b58cdacf811 57 int magValX;
wue 0:7b58cdacf811 58 int magValY;
wue 0:7b58cdacf811 59 int magValZ;
wue 0:7b58cdacf811 60 } sensorData;
wue 0:7b58cdacf811 61 #define sD sensorData
wue 0:7b58cdacf811 62
wue 0:7b58cdacf811 63
wue 0:7b58cdacf811 64 //Lab2add
wue 0:7b58cdacf811 65 void SLCD_blinking_msg_wait(char *slcd_msg1, char *slcd_msg2)
wue 0:7b58cdacf811 66 {
wue 0:7b58cdacf811 67 char wait4sw1=0; //~500ms blinking
wue 0:7b58cdacf811 68 slcd.CharPosition=0;
wue 0:7b58cdacf811 69 //wait for Press SW1 - to start mag calibration
wue 0:7b58cdacf811 70 while(sw1 == PRESS_ON); //wait for release
wue 0:7b58cdacf811 71 while(sw1 == PRESS_OFF) { //wait for press
wue 0:7b58cdacf811 72 if (++wait4sw1 < 150) //300ms
wue 0:7b58cdacf811 73 slcd.printf(slcd_msg1);
wue 0:7b58cdacf811 74 else //200ms
wue 0:7b58cdacf811 75 slcd.printf(slcd_msg2);
wue 0:7b58cdacf811 76 wait(0.002);
wue 0:7b58cdacf811 77 slcd.CharPosition=0;
wue 0:7b58cdacf811 78 }
wue 0:7b58cdacf811 79 while(sw1 == PRESS_ON); //wait for release
wue 0:7b58cdacf811 80 }
wue 0:7b58cdacf811 81
wue 0:7b58cdacf811 82
wue 0:7b58cdacf811 83 //_____________________________________________________________//
wue 0:7b58cdacf811 84 //======== MAIN() =============================================//
wue 0:7b58cdacf811 85 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
wue 0:7b58cdacf811 86 int main(void)
wue 0:7b58cdacf811 87 {
wue 0:7b58cdacf811 88 //---- MAIN/Inits -----------------------------------------//
wue 0:7b58cdacf811 89
wue 0:7b58cdacf811 90 sw1.mode(PullUp);
wue 0:7b58cdacf811 91 sw3.mode(PullUp);
wue 0:7b58cdacf811 92
wue 0:7b58cdacf811 93 SLCD_blinking_msg_wait(" o","PrES");
wue 0:7b58cdacf811 94
wue 0:7b58cdacf811 95 usb_osda.baud(115200);
wue 0:7b58cdacf811 96 usb_osda.printf("\n___________________________________\r\n");
wue 0:7b58cdacf811 97 usb_osda.printf("\nFRDM-KL46Z_Lab\r\n \r\n I am a CDC serial port @OpenSDA/mUSB. Baud=115200 \r\n");
wue 0:7b58cdacf811 98
wue 0:7b58cdacf811 99
wue 0:7b58cdacf811 100
wue 0:7b58cdacf811 101 gLED = LED_ON; //Green LED ON to indicate running/writing
wue 0:7b58cdacf811 102 rLED = LED_OFF; //Red LED OFF
wue 0:7b58cdacf811 103 rLED.period(rLEDperiod); //Red LED (rLED) tsi/accZ/mag
wue 0:7b58cdacf811 104
wue 0:7b58cdacf811 105 //---- MAIN/Inits (Wait4SW1) -> Start! --------------------//
wue 0:7b58cdacf811 106
wue 0:7b58cdacf811 107 //---- MAIN/Inits Interface -------------------------------//
wue 0:7b58cdacf811 108
wue 0:7b58cdacf811 109 //---- MAIN/Inits Labs ------------------------------------//
wue 0:7b58cdacf811 110
wue 0:7b58cdacf811 111 //---- MAIN/Inits (Wait4SW1) -> Calib. eCompass -----------//
wue 0:7b58cdacf811 112
wue 0:7b58cdacf811 113 //---- MAIN/Inits Done! (Wait4SW1) -> MANI/Loop -----------//
wue 0:7b58cdacf811 114
wue 0:7b58cdacf811 115 gLED = LED_OFF; //Inits are done
wue 0:7b58cdacf811 116
wue 0:7b58cdacf811 117 //---- MAIN/Loop -----------------------------------------//
wue 0:7b58cdacf811 118 while (1) {
wue 0:7b58cdacf811 119
wue 0:7b58cdacf811 120 slcd.DP(0, false); slcd.DP(1, false); slcd.DP(2, false);
wue 0:7b58cdacf811 121
wue 0:7b58cdacf811 122 sD.sw1State = sw1; sD.sw3State = sw3;
wue 0:7b58cdacf811 123 sD.accValX = acc.getAccX(); //accX[-1..1]->mouse (Lab1)
wue 0:7b58cdacf811 124 sD.accValY = acc.getAccY(); //accY[-1..1]->mouse (Lab1)
wue 0:7b58cdacf811 125 sD.accValZ = acc.getAccZ(); //accZ[-1..1]->rLED
wue 0:7b58cdacf811 126
wue 0:7b58cdacf811 127 sD.slider = slider.readPercentage() * 100;
wue 0:7b58cdacf811 128 sD.light = light;
wue 0:7b58cdacf811 129 sD.magValX = mag.readVal(MAG_OUT_X_MSB);
wue 0:7b58cdacf811 130 sD.magValY = mag.readVal(MAG_OUT_Y_MSB);
wue 0:7b58cdacf811 131 sD.magValZ = mag.readVal(MAG_OUT_Z_MSB);
wue 0:7b58cdacf811 132
wue 0:7b58cdacf811 133 if (sD.sw1State != PRESS_OFF) { gLED = !gLED; //blinking
wue 0:7b58cdacf811 134 pf.printf(" \r\n");
wue 0:7b58cdacf811 135 pf.printf(" Switches. Light . Slider . Accelerometer . Magnetometer . Compass\r\n");
wue 0:7b58cdacf811 136 pf.printf(" SW1:SW2| LUX | TSI | accX : accY : accZ | magX: magY: maxZ | Heading\r\n");
wue 0:7b58cdacf811 137 pf.printf(" %d : %d | %1.3f | %2.0f %% | %+1.3f:%+1.3f:%+1.3f| %5d:%5d:%5d | Lab3 \r\n",
wue 0:7b58cdacf811 138 sD.sw1State, sD.sw3State, sD.light, sD.slider, sD.accValX, sD.accValY, sD.accValZ,
wue 0:7b58cdacf811 139 (short)sD.magValX, (short)sD.magValY, (short)sD.magValZ);
wue 0:7b58cdacf811 140 } gLED = LED_OFF;
wue 0:7b58cdacf811 141
wue 0:7b58cdacf811 142 rLED = abs(sD.accValZ);
wue 0:7b58cdacf811 143
wue 0:7b58cdacf811 144 if (sD.slider) slcd.printf(" %3.0f", sD.slider); //left->right .. 0->100%
wue 0:7b58cdacf811 145 else slcd.printf("%1.3f", sD.light); //night->light .. 1->0
wue 0:7b58cdacf811 146
wue 0:7b58cdacf811 147 wait(0.05); //wait 50ms
wue 0:7b58cdacf811 148 }
wue 0:7b58cdacf811 149 }
wue 0:7b58cdacf811 150
wue 0:7b58cdacf811 151
wue 0:7b58cdacf811 152
wue 0:7b58cdacf811 153
wue 0:7b58cdacf811 154
wue 0:7b58cdacf811 155 //_____________________________________________________________//
wue 0:7b58cdacf811 156 //======== FUNC() =============================================//
wue 0:7b58cdacf811 157 //¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯//
wue 0:7b58cdacf811 158