akcelerometr i czujnik swiatla

Dependencies:   MAG3110 MMA8451Q SLCD- TSI USBDevice mbed

Committer:
zochmen
Date:
Wed Apr 16 12:20:13 2014 +0000
Revision:
0:9f7e045dcaa5
akcelerometr; czujnika swiatla;

Who changed what in which revision?

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