NTUES lab 2 sensor_shield

Dependencies:   mbed X_NUCLEO_IKS01A2

Committer:
whz861025
Date:
Tue May 14 13:01:48 2019 +0000
Revision:
0:aa329ecdcc9b
sensor shield done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
whz861025 0:aa329ecdcc9b 1 /* Includes */
whz861025 0:aa329ecdcc9b 2 #include "mbed.h"
whz861025 0:aa329ecdcc9b 3 #include "XNucleoIKS01A2.h"
whz861025 0:aa329ecdcc9b 4
whz861025 0:aa329ecdcc9b 5 // create a DigitalOut objects for the LED
whz861025 0:aa329ecdcc9b 6 DigitalOut led(LED1);
whz861025 0:aa329ecdcc9b 7
whz861025 0:aa329ecdcc9b 8 /* Instantiate the expansion board */
whz861025 0:aa329ecdcc9b 9 static XNucleoIKS01A2 *sensor = XNucleoIKS01A2::instance(D14, D15, D4, D5);
whz861025 0:aa329ecdcc9b 10
whz861025 0:aa329ecdcc9b 11
whz861025 0:aa329ecdcc9b 12 // Create 2 Ticker objects for a recurring interrupts. One for blink a LED and the other one to update the sensor lectures periodicly.
whz861025 0:aa329ecdcc9b 13 Ticker blinky;
whz861025 0:aa329ecdcc9b 14 Ticker update;
whz861025 0:aa329ecdcc9b 15
whz861025 0:aa329ecdcc9b 16 /* create a serial objects to communicate via USB */
whz861025 0:aa329ecdcc9b 17 Serial pc(USBTX, USBRX);
whz861025 0:aa329ecdcc9b 18
whz861025 0:aa329ecdcc9b 19 volatile float TEMPERATURE_C;
whz861025 0:aa329ecdcc9b 20 volatile float TEMPERATURE_F;
whz861025 0:aa329ecdcc9b 21 volatile float TEMPERATURE_K;
whz861025 0:aa329ecdcc9b 22 volatile float HUMIDITY;
whz861025 0:aa329ecdcc9b 23 volatile float PRESSURE;
whz861025 0:aa329ecdcc9b 24
whz861025 0:aa329ecdcc9b 25 bool measurement_update = false;
whz861025 0:aa329ecdcc9b 26
whz861025 0:aa329ecdcc9b 27 void blinky_handler()
whz861025 0:aa329ecdcc9b 28 {
whz861025 0:aa329ecdcc9b 29 led = !led;
whz861025 0:aa329ecdcc9b 30 }
whz861025 0:aa329ecdcc9b 31
whz861025 0:aa329ecdcc9b 32 void sensor_handler()
whz861025 0:aa329ecdcc9b 33 {
whz861025 0:aa329ecdcc9b 34 measurement_update = true;
whz861025 0:aa329ecdcc9b 35 }
whz861025 0:aa329ecdcc9b 36
whz861025 0:aa329ecdcc9b 37 int main()
whz861025 0:aa329ecdcc9b 38 {
whz861025 0:aa329ecdcc9b 39 /* Attach a function to be called by the Ticker objects at a specific interval in seconds*/
whz861025 0:aa329ecdcc9b 40 blinky.attach(&blinky_handler, 0.5);
whz861025 0:aa329ecdcc9b 41 update.attach(&sensor_handler, 3);
whz861025 0:aa329ecdcc9b 42
whz861025 0:aa329ecdcc9b 43 while(1){
whz861025 0:aa329ecdcc9b 44 if (measurement_update == true){
whz861025 0:aa329ecdcc9b 45 /* read the enviornmental data from sensors */
whz861025 0:aa329ecdcc9b 46 sensor->ht_sensor->get_temperature((float *)&TEMPERATURE_C);
whz861025 0:aa329ecdcc9b 47 sensor->ht_sensor->get_humidity((float *)&HUMIDITY);
whz861025 0:aa329ecdcc9b 48 sensor->pt_sensor->get_pressure((float *)&PRESSURE);
whz861025 0:aa329ecdcc9b 49
whz861025 0:aa329ecdcc9b 50 TEMPERATURE_F = (TEMPERATURE_C * 1.8f) + 32.0f; //Convert the temperature from Celsius to Fahrenheit
whz861025 0:aa329ecdcc9b 51 TEMPERATURE_K = (TEMPERATURE_C + 273.15f); //Convert the temperature from Celsius to Kelvin
whz861025 0:aa329ecdcc9b 52 pc.printf("Temperature:\t %.2f C / %.2f F / %.2f K\r\n", TEMPERATURE_C, TEMPERATURE_F, TEMPERATURE_K);
whz861025 0:aa329ecdcc9b 53 pc.printf("Humidity:\t %.2f%%\r\n", HUMIDITY);
whz861025 0:aa329ecdcc9b 54 pc.printf("Pressure:\t %.2f hPa\r\n", PRESSURE);
whz861025 0:aa329ecdcc9b 55 pc.printf("\r\n");
whz861025 0:aa329ecdcc9b 56 measurement_update = false;
whz861025 0:aa329ecdcc9b 57 }
whz861025 0:aa329ecdcc9b 58 __wfi();
whz861025 0:aa329ecdcc9b 59 }
whz861025 0:aa329ecdcc9b 60 }