kL46Z-Lab3-lodz
Dependencies: KL46Z-USBHost MAG3110 MMA8451Q SLCD- TSI mbed
main.cpp@0:12f4c24b108b, 2014-04-16 (annotated)
- Committer:
- wue
- Date:
- Wed Apr 16 13:14:42 2014 +0000
- Revision:
- 0:12f4c24b108b
kL46Z-Lab3-lodz
Who changed what in which revision?
User | Revision | Line number | New 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 | } |