akcelerometr i czujnik swiatla
Dependencies: MAG3110 MMA8451Q SLCD- TSI USBDevice mbed
main_lab2.cpp@0:9f7e045dcaa5, 2014-04-16 (annotated)
- Committer:
- zochmen
- Date:
- Wed Apr 16 12:20:13 2014 +0000
- Revision:
- 0:9f7e045dcaa5
akcelerometr; czujnika swiatla;
Who changed what in which revision?
User | Revision | Line number | New 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 |