kL46Z-Lab3-lodz

Dependencies:   KL46Z-USBHost MAG3110 MMA8451Q SLCD- TSI mbed

Committer:
wue
Date:
Wed Apr 16 13:14:42 2014 +0000
Revision:
0:12f4c24b108b
kL46Z-Lab3-lodz

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wue 0:12f4c24b108b 1 #include "mbed.h"
wue 0:12f4c24b108b 2 #include "MMA8451Q.h"
wue 0:12f4c24b108b 3 #include "MAG3110.h"
wue 0:12f4c24b108b 4 #include "SLCD.h"
wue 0:12f4c24b108b 5 #include "TSISensor.h"
wue 0:12f4c24b108b 6 #include "USBHostMSD.h"
wue 0:12f4c24b108b 7
wue 0:12f4c24b108b 8
wue 0:12f4c24b108b 9 #define LED_ON 0 //outON, pwmON
wue 0:12f4c24b108b 10 #define LED_OFF 1 //outOFF,pwmOFF
wue 0:12f4c24b108b 11 #define PRESS_ON 0
wue 0:12f4c24b108b 12 #define PRESS_OFF 1
wue 0:12f4c24b108b 13
wue 0:12f4c24b108b 14 #define LED_PERIOD 150 //[ms]
wue 0:12f4c24b108b 15
wue 0:12f4c24b108b 16 #define MMA8451_I2C_ADDRESS (0x1d<<1)
wue 0:12f4c24b108b 17
wue 0:12f4c24b108b 18
wue 0:12f4c24b108b 19 struct KL46_SENSOR_DATA {
wue 0:12f4c24b108b 20 int sw1state;
wue 0:12f4c24b108b 21 int sw2state;
wue 0:12f4c24b108b 22 float accValX;
wue 0:12f4c24b108b 23 float accValY;
wue 0:12f4c24b108b 24 float accValZ;
wue 0:12f4c24b108b 25 float slider;
wue 0:12f4c24b108b 26 float light;
wue 0:12f4c24b108b 27 int magValX;
wue 0:12f4c24b108b 28 int magValY;
wue 0:12f4c24b108b 29 int magValZ;
wue 0:12f4c24b108b 30 } sensorData;
wue 0:12f4c24b108b 31
wue 0:12f4c24b108b 32
wue 0:12f4c24b108b 33 MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS);
wue 0:12f4c24b108b 34 DigitalOut gLED(LED_GREEN); //PTD5
wue 0:12f4c24b108b 35 PwmOut rLED(LED_RED); //PTE29
wue 0:12f4c24b108b 36 DigitalIn sw1(PTC3); //if(sw1) Release else Press
wue 0:12f4c24b108b 37 DigitalIn sw2(PTC12); //while(sw3); wait for Press
wue 0:12f4c24b108b 38
wue 0:12f4c24b108b 39 SLCD slcd; //[88:88][8.8.8.8] SegmentLCD
wue 0:12f4c24b108b 40 AnalogIn light(PTE22); //analog-light input
wue 0:12f4c24b108b 41 TSISensor slider; //Capacitive Touch Slider
wue 0:12f4c24b108b 42 MAG3110 mag(PTE25, PTE24); //Magnetometer
wue 0:12f4c24b108b 43 Serial usb_osda(USBTX, USBRX); //OpenSDA Terminal
wue 0:12f4c24b108b 44
wue 0:12f4c24b108b 45
wue 0:12f4c24b108b 46
wue 0:12f4c24b108b 47 //Lab2add
wue 0:12f4c24b108b 48 void SLCD_blinking_msg_wait(char *slcd_msg1, char *slcd_msg2)
wue 0:12f4c24b108b 49 {
wue 0:12f4c24b108b 50 char wait4sw1=0; //~500ms blinking
wue 0:12f4c24b108b 51 slcd.CharPosition=0;
wue 0:12f4c24b108b 52 //wait for Press SW1 - to start mag calibration
wue 0:12f4c24b108b 53 while(sw1 == PRESS_ON); //wait for release
wue 0:12f4c24b108b 54 while(sw1 == PRESS_OFF) { //wait for press
wue 0:12f4c24b108b 55 if (++wait4sw1 < 150) //300ms
wue 0:12f4c24b108b 56 slcd.printf(slcd_msg1);
wue 0:12f4c24b108b 57 else //200ms
wue 0:12f4c24b108b 58 slcd.printf(slcd_msg2);
wue 0:12f4c24b108b 59 wait(0.002);
wue 0:12f4c24b108b 60 slcd.CharPosition=0;
wue 0:12f4c24b108b 61 }
wue 0:12f4c24b108b 62 while(sw1 == PRESS_ON); //wait for release
wue 0:12f4c24b108b 63 }
wue 0:12f4c24b108b 64
wue 0:12f4c24b108b 65
wue 0:12f4c24b108b 66
wue 0:12f4c24b108b 67 int main(void)
wue 0:12f4c24b108b 68 {
wue 0:12f4c24b108b 69
wue 0:12f4c24b108b 70
wue 0:12f4c24b108b 71 FILE *fp;
wue 0:12f4c24b108b 72
wue 0:12f4c24b108b 73
wue 0:12f4c24b108b 74 sw1.mode(PullUp);
wue 0:12f4c24b108b 75 sw2.mode(PullUp);
wue 0:12f4c24b108b 76
wue 0:12f4c24b108b 77 gLED = LED_ON;
wue 0:12f4c24b108b 78 rLED = LED_OFF;
wue 0:12f4c24b108b 79 //rLED.period(LED_PERIOD);
wue 0:12f4c24b108b 80
wue 0:12f4c24b108b 81 SLCD_blinking_msg_wait(" o","MSd ");//Lab1=Hid;2=cdc;3=Msd
wue 0:12f4c24b108b 82
wue 0:12f4c24b108b 83 usb_osda.baud(115200);
wue 0:12f4c24b108b 84 usb_osda.printf("\r\n Lab3: pls plug USB-stick into mUSB/KL46Z \r\n");
wue 0:12f4c24b108b 85
wue 0:12f4c24b108b 86 slcd.printf("USb~"); //Lab1=Hid;2=cdc;3=Msd
wue 0:12f4c24b108b 87
wue 0:12f4c24b108b 88 USBHostMSD msd("usb"); //wait for plugged USB-stick
wue 0:12f4c24b108b 89 if (!msd.connect()) {
wue 0:12f4c24b108b 90 error(" USB Flash drive not found.\r\n");
wue 0:12f4c24b108b 91 }
wue 0:12f4c24b108b 92
wue 0:12f4c24b108b 93 //Attempt to crete file /usb/usb_lab3.txt @USB-stick.
wue 0:12f4c24b108b 94 fp = fopen("/usb/usb_lab3.txt", "w"); //rewrite, or create
wue 0:12f4c24b108b 95 if (fp) {
wue 0:12f4c24b108b 96 usb_osda.printf(" ... sucess file-open (/usb/usb_lab3.txt @USB-stick)!\r\n\r\n");
wue 0:12f4c24b108b 97 fprintf(fp, " Lab3: from FRDM-KL46Z \r\n\r\n");
wue 0:12f4c24b108b 98 fclose(fp); fp=NULL;
wue 0:12f4c24b108b 99 } else usb_osda.printf(" ... failed file-open (/usb/usb_lab3.txt @USB-stick)!\r\n\r\n");
wue 0:12f4c24b108b 100
wue 0:12f4c24b108b 101
wue 0:12f4c24b108b 102 while (1) {
wue 0:12f4c24b108b 103
wue 0:12f4c24b108b 104 //disable all SLCD DPs
wue 0:12f4c24b108b 105 slcd.DP(0, false); slcd.DP(1, false); slcd.DP(2, false);
wue 0:12f4c24b108b 106
wue 0:12f4c24b108b 107 sensorData.accValX = acc.getAccX();
wue 0:12f4c24b108b 108 sensorData.accValY = acc.getAccY();
wue 0:12f4c24b108b 109 sensorData.accValZ = acc.getAccZ();
wue 0:12f4c24b108b 110 sensorData.sw1state = sw1;
wue 0:12f4c24b108b 111 sensorData.sw2state = sw2;
wue 0:12f4c24b108b 112
wue 0:12f4c24b108b 113 sensorData.slider = slider.readPercentage() * 100;
wue 0:12f4c24b108b 114 sensorData.light = light;
wue 0:12f4c24b108b 115 sensorData.magValX = mag.readVal(MAG_OUT_X_MSB);
wue 0:12f4c24b108b 116 sensorData.magValY = mag.readVal(MAG_OUT_Y_MSB);
wue 0:12f4c24b108b 117 sensorData.magValZ = mag.readVal(MAG_OUT_Z_MSB);
wue 0:12f4c24b108b 118
wue 0:12f4c24b108b 119 //sensor -> terminal
wue 0:12f4c24b108b 120 if (fp) { gLED = !gLED; //blinkig
wue 0:12f4c24b108b 121 usb_osda.printf("% 1.2f\r\n", sensorData.accValZ); //->terminal
wue 0:12f4c24b108b 122 fprintf(fp,"% 1.2f\r\n", sensorData.accValZ); //->usb_file
wue 0:12f4c24b108b 123 } else gLED = LED_OFF;
wue 0:12f4c24b108b 124
wue 0:12f4c24b108b 125 if(!fp && sw1==PRESS_ON) fp=fopen("/usb/usb_lab3.txt", "a");
wue 0:12f4c24b108b 126 else
wue 0:12f4c24b108b 127 if(fp && sw1==PRESS_OFF) {fclose(fp); fp=NULL; gLED=LED_OFF;}
wue 0:12f4c24b108b 128
wue 0:12f4c24b108b 129 slcd.CharPosition=0; //prevent slcd rolling
wue 0:12f4c24b108b 130 slcd.printf("% 3.0f", sensorData.accValZ);
wue 0:12f4c24b108b 131
wue 0:12f4c24b108b 132 //rLED = abs(sensorData.accValZ);
wue 0:12f4c24b108b 133
wue 0:12f4c24b108b 134 if (sensorData.slider)
wue 0:12f4c24b108b 135 slcd.printf(" %3.0f", sensorData.slider); //night->light .. 1->0
wue 0:12f4c24b108b 136 else
wue 0:12f4c24b108b 137 slcd.printf("%1.3f", sensorData.light); //left->right .. 0->100%
wue 0:12f4c24b108b 138
wue 0:12f4c24b108b 139 wait(0.05);
wue 0:12f4c24b108b 140 }
wue 0:12f4c24b108b 141 }