Example to show how to read various sensors with STM32 Nucleo board
Dependencies: mbed
main.cpp@4:de41ec16d765, 2014-08-27 (annotated)
- Committer:
- joe_tijerina
- Date:
- Wed Aug 27 17:35:24 2014 +0000
- Revision:
- 4:de41ec16d765
- Parent:
- 3:6d8574d8c9c1
Added descriptions for each sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:005629fe3609 | 1 | #include "mbed.h" |
joe_tijerina | 3:6d8574d8c9c1 | 2 | #include "ADXL345_I2C.h" |
joe_tijerina | 3:6d8574d8c9c1 | 3 | |
screamer | 0:005629fe3609 | 4 | |
joe_tijerina | 4:de41ec16d765 | 5 | //#define LED // Grove LED |
joe_tijerina | 4:de41ec16d765 | 6 | //#define ACCEL // SEN04051P Grove - 3-Axis Digital Accelerometer(±16g) |
joe_tijerina | 4:de41ec16d765 | 7 | //#define LIGHT_SENSOR // Grove Light Sensor using GL5528 photoresistor |
joe_tijerina | 4:de41ec16d765 | 8 | //#define WATER_SENSOR // Grove Water Sensor |
joe_tijerina | 4:de41ec16d765 | 9 | //#define GAS_SENSOR // SEN90512P Grove - Gas Sensor(MQ2) |
joe_tijerina | 4:de41ec16d765 | 10 | #define TEMP_SENSOR // Grove Temperature Sensor using TTC03 Thermistor |
screamer | 0:005629fe3609 | 11 | |
joe_tijerina | 3:6d8574d8c9c1 | 12 | |
joe_tijerina | 3:6d8574d8c9c1 | 13 | AnalogIn temp_sensor(A0); |
joe_tijerina | 3:6d8574d8c9c1 | 14 | AnalogIn analog_light_sensor_read(A1); |
joe_tijerina | 3:6d8574d8c9c1 | 15 | DigitalIn water_sensor(A2); |
joe_tijerina | 3:6d8574d8c9c1 | 16 | AnalogIn gas_sensor(A3); |
joe_tijerina | 3:6d8574d8c9c1 | 17 | DigitalOut my_led(D7); |
joe_tijerina | 3:6d8574d8c9c1 | 18 | ADXL345_I2C accelerometer(D14, D15); |
joe_tijerina | 3:6d8574d8c9c1 | 19 | |
joe_tijerina | 3:6d8574d8c9c1 | 20 | |
screamer | 0:005629fe3609 | 21 | int main() { |
joe_tijerina | 3:6d8574d8c9c1 | 22 | |
joe_tijerina | 3:6d8574d8c9c1 | 23 | float vol; |
joe_tijerina | 3:6d8574d8c9c1 | 24 | float Rsensor; |
joe_tijerina | 3:6d8574d8c9c1 | 25 | int gas_sensor_value; |
joe_tijerina | 3:6d8574d8c9c1 | 26 | int sound_sensor_value; |
joe_tijerina | 3:6d8574d8c9c1 | 27 | int adc_scale = 4096; |
joe_tijerina | 3:6d8574d8c9c1 | 28 | int readings[3] = {0, 0, 0}; |
joe_tijerina | 3:6d8574d8c9c1 | 29 | int sensorValue; |
joe_tijerina | 3:6d8574d8c9c1 | 30 | int B = 3975; |
joe_tijerina | 3:6d8574d8c9c1 | 31 | float resistance; |
joe_tijerina | 3:6d8574d8c9c1 | 32 | float temperature; |
joe_tijerina | 3:6d8574d8c9c1 | 33 | float temperature_f; |
joe_tijerina | 3:6d8574d8c9c1 | 34 | char amb_temp[6]; |
joe_tijerina | 3:6d8574d8c9c1 | 35 | int a; |
joe_tijerina | 3:6d8574d8c9c1 | 36 | |
joe_tijerina | 3:6d8574d8c9c1 | 37 | #ifdef ACCEL |
joe_tijerina | 3:6d8574d8c9c1 | 38 | printf("Starting ADXL345 test...\n\r"); |
joe_tijerina | 3:6d8574d8c9c1 | 39 | wait(.001); |
joe_tijerina | 3:6d8574d8c9c1 | 40 | printf("Device ID is: 0x%02x\n\r", accelerometer.getDeviceID()); |
joe_tijerina | 3:6d8574d8c9c1 | 41 | wait(.001); |
joe_tijerina | 3:6d8574d8c9c1 | 42 | |
joe_tijerina | 3:6d8574d8c9c1 | 43 | // These are here to test whether any of the initialization fails. It will print the failure |
joe_tijerina | 3:6d8574d8c9c1 | 44 | if (accelerometer.setPowerControl(0x00)) |
joe_tijerina | 3:6d8574d8c9c1 | 45 | { |
joe_tijerina | 3:6d8574d8c9c1 | 46 | printf("didn't intitialize power control\n"); |
joe_tijerina | 3:6d8574d8c9c1 | 47 | return 0; |
joe_tijerina | 3:6d8574d8c9c1 | 48 | } |
joe_tijerina | 3:6d8574d8c9c1 | 49 | |
joe_tijerina | 3:6d8574d8c9c1 | 50 | //Full resolution, +/-16g, 4mg/LSB. |
joe_tijerina | 3:6d8574d8c9c1 | 51 | wait(.001); |
joe_tijerina | 3:6d8574d8c9c1 | 52 | |
joe_tijerina | 3:6d8574d8c9c1 | 53 | if(accelerometer.setDataFormatControl(0x0B)) |
joe_tijerina | 3:6d8574d8c9c1 | 54 | { |
joe_tijerina | 3:6d8574d8c9c1 | 55 | printf("didn't set data format\n"); |
joe_tijerina | 3:6d8574d8c9c1 | 56 | return 0; |
joe_tijerina | 3:6d8574d8c9c1 | 57 | } |
joe_tijerina | 3:6d8574d8c9c1 | 58 | wait(.001); |
joe_tijerina | 3:6d8574d8c9c1 | 59 | |
joe_tijerina | 3:6d8574d8c9c1 | 60 | //3.2kHz data rate. |
joe_tijerina | 3:6d8574d8c9c1 | 61 | if(accelerometer.setDataRate(ADXL345_3200HZ)) |
joe_tijerina | 3:6d8574d8c9c1 | 62 | { |
joe_tijerina | 3:6d8574d8c9c1 | 63 | printf("didn't set data rate\n"); |
joe_tijerina | 3:6d8574d8c9c1 | 64 | return 0; |
joe_tijerina | 3:6d8574d8c9c1 | 65 | } |
joe_tijerina | 3:6d8574d8c9c1 | 66 | wait(.001); |
joe_tijerina | 3:6d8574d8c9c1 | 67 | |
joe_tijerina | 3:6d8574d8c9c1 | 68 | //Measurement mode. |
joe_tijerina | 3:6d8574d8c9c1 | 69 | if(accelerometer.setPowerControl(MeasurementMode)) |
joe_tijerina | 3:6d8574d8c9c1 | 70 | { |
joe_tijerina | 3:6d8574d8c9c1 | 71 | printf("didn't set the power control to measurement\n"); |
joe_tijerina | 3:6d8574d8c9c1 | 72 | return 0; |
joe_tijerina | 3:6d8574d8c9c1 | 73 | } |
joe_tijerina | 3:6d8574d8c9c1 | 74 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 75 | |
joe_tijerina | 3:6d8574d8c9c1 | 76 | while(1) |
joe_tijerina | 3:6d8574d8c9c1 | 77 | { |
joe_tijerina | 3:6d8574d8c9c1 | 78 | #ifdef LED |
joe_tijerina | 3:6d8574d8c9c1 | 79 | my_led = 1; // LED is ON |
bcostm | 2:b60cb847489c | 80 | wait(0.2); // 200 ms |
joe_tijerina | 3:6d8574d8c9c1 | 81 | my_led = 0; // LED is OFF |
bcostm | 2:b60cb847489c | 82 | wait(1.0); // 1 sec |
joe_tijerina | 3:6d8574d8c9c1 | 83 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 84 | |
joe_tijerina | 3:6d8574d8c9c1 | 85 | #ifdef WATER_SENSOR |
joe_tijerina | 3:6d8574d8c9c1 | 86 | printf("water_sensor: %d \n\r", water_sensor.read()); |
joe_tijerina | 3:6d8574d8c9c1 | 87 | wait(0.5); |
joe_tijerina | 3:6d8574d8c9c1 | 88 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 89 | |
joe_tijerina | 3:6d8574d8c9c1 | 90 | #ifdef GAS_SENSOR |
joe_tijerina | 3:6d8574d8c9c1 | 91 | gas_sensor_value = gas_sensor.read_u16(); |
joe_tijerina | 3:6d8574d8c9c1 | 92 | printf("gas_sensor_value: 0x%X \n\r", gas_sensor_value); |
joe_tijerina | 3:6d8574d8c9c1 | 93 | |
joe_tijerina | 3:6d8574d8c9c1 | 94 | vol = (float)gas_sensor_value/adc_scale*5.0; |
joe_tijerina | 3:6d8574d8c9c1 | 95 | printf("gas vol: %f \n\r", vol); |
joe_tijerina | 3:6d8574d8c9c1 | 96 | wait(1); |
joe_tijerina | 3:6d8574d8c9c1 | 97 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 98 | |
joe_tijerina | 3:6d8574d8c9c1 | 99 | #ifdef ACCEL |
joe_tijerina | 3:6d8574d8c9c1 | 100 | accelerometer.getOutput(readings); |
joe_tijerina | 3:6d8574d8c9c1 | 101 | wait(0.1); // 100 ms |
joe_tijerina | 3:6d8574d8c9c1 | 102 | |
joe_tijerina | 3:6d8574d8c9c1 | 103 | /* x-axis, y-axis and z-axis */ |
joe_tijerina | 3:6d8574d8c9c1 | 104 | printf("%d, %d, %d\n\r", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]); |
joe_tijerina | 3:6d8574d8c9c1 | 105 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 106 | |
joe_tijerina | 3:6d8574d8c9c1 | 107 | #ifdef LIGHT_SENSOR |
joe_tijerina | 3:6d8574d8c9c1 | 108 | sensorValue = analog_light_sensor_read.read_u16(); |
joe_tijerina | 3:6d8574d8c9c1 | 109 | Rsensor=(float)(adc_scale-sensorValue)*10/sensorValue; |
joe_tijerina | 3:6d8574d8c9c1 | 110 | printf("Light Sensor Analog Reading is 0x%X = %d ", sensorValue, sensorValue); |
joe_tijerina | 3:6d8574d8c9c1 | 111 | printf("The sensor resistance is %f \n\n\r", Rsensor); |
joe_tijerina | 3:6d8574d8c9c1 | 112 | wait(1); // 1s |
joe_tijerina | 3:6d8574d8c9c1 | 113 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 114 | |
joe_tijerina | 3:6d8574d8c9c1 | 115 | #ifdef TEMP_SENSOR |
joe_tijerina | 3:6d8574d8c9c1 | 116 | a = temp_sensor.read_u16(); |
joe_tijerina | 3:6d8574d8c9c1 | 117 | |
joe_tijerina | 3:6d8574d8c9c1 | 118 | resistance = (float)(adc_scale-a)*10000/a; //get the resistance of the sensor; |
joe_tijerina | 3:6d8574d8c9c1 | 119 | temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15; //convert to temperature via datasheet ; |
joe_tijerina | 3:6d8574d8c9c1 | 120 | temperature_f = (1.8 * temperature) + 32.0; |
joe_tijerina | 3:6d8574d8c9c1 | 121 | sprintf(amb_temp, "%0.2f", temperature_f); |
joe_tijerina | 3:6d8574d8c9c1 | 122 | |
joe_tijerina | 3:6d8574d8c9c1 | 123 | printf("Temp Sensor Analog Reading is 0x%X = %d ", a, a); |
joe_tijerina | 3:6d8574d8c9c1 | 124 | printf("Current Temperature: %f C %f F \n\r", temperature, temperature_f); |
joe_tijerina | 3:6d8574d8c9c1 | 125 | wait(1); // 1s |
joe_tijerina | 3:6d8574d8c9c1 | 126 | #endif |
joe_tijerina | 3:6d8574d8c9c1 | 127 | |
screamer | 0:005629fe3609 | 128 | } |
screamer | 0:005629fe3609 | 129 | } |