Seeed Studio Grove Sensors Example

Dependencies:   mbed DHT DigitDisplay

Fork of STM32_Read_Sensors_Example by AT&T Developer Summit Hackathon 2016

Committer:
dangriffin
Date:
Thu Dec 18 18:00:17 2014 +0000
Revision:
7:d52c3793a04a
Parent:
6:d25c6da3f0b6
Minor correction to message scrolling loop.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:005629fe3609 1 #include "mbed.h"
joe_tijerina 3:6d8574d8c9c1 2 #include "ADXL345_I2C.h"
dangriffin 5:41a15c0653e8 3 #include "DHT.h"
dangriffin 6:d25c6da3f0b6 4 #include "DigitDisplay.h"
joe_tijerina 3:6d8574d8c9c1 5
screamer 0:005629fe3609 6
joe_tijerina 4:de41ec16d765 7 //#define LED // Grove LED
joe_tijerina 4:de41ec16d765 8 //#define ACCEL // SEN04051P Grove - 3-Axis Digital Accelerometer(±16g)
joe_tijerina 4:de41ec16d765 9 //#define LIGHT_SENSOR // Grove Light Sensor using GL5528 photoresistor
joe_tijerina 4:de41ec16d765 10 //#define WATER_SENSOR // Grove Water Sensor
joe_tijerina 4:de41ec16d765 11 //#define GAS_SENSOR // SEN90512P Grove - Gas Sensor(MQ2)
dangriffin 5:41a15c0653e8 12 //#define TEMP_SENSOR // Grove Temperature Sensor using TTC03 Thermistor
dangriffin 6:d25c6da3f0b6 13 //#define TEMP_HUMID_SENSOR // Grove Temp/Humidity Sensor (DHT11)
dangriffin 6:d25c6da3f0b6 14 #define DIGIT_DISPLAY // Grove 4-digit display
screamer 0:005629fe3609 15
joe_tijerina 3:6d8574d8c9c1 16
joe_tijerina 3:6d8574d8c9c1 17 AnalogIn temp_sensor(A0);
joe_tijerina 3:6d8574d8c9c1 18 AnalogIn analog_light_sensor_read(A1);
joe_tijerina 3:6d8574d8c9c1 19 DigitalIn water_sensor(A2);
joe_tijerina 3:6d8574d8c9c1 20 AnalogIn gas_sensor(A3);
joe_tijerina 3:6d8574d8c9c1 21 DigitalOut my_led(D7);
joe_tijerina 3:6d8574d8c9c1 22 ADXL345_I2C accelerometer(D14, D15);
dangriffin 5:41a15c0653e8 23 DHT temp_humid_sensor(A0, DHT11); // See DHT.h for other supported sensor types
dangriffin 6:d25c6da3f0b6 24 DigitDisplay DigitalDisplay(D2, D3); // For connection to port D2 on Grove shield
joe_tijerina 3:6d8574d8c9c1 25
screamer 0:005629fe3609 26 int main() {
joe_tijerina 3:6d8574d8c9c1 27
joe_tijerina 3:6d8574d8c9c1 28 float vol;
joe_tijerina 3:6d8574d8c9c1 29 float Rsensor;
joe_tijerina 3:6d8574d8c9c1 30 int gas_sensor_value;
joe_tijerina 3:6d8574d8c9c1 31 int sound_sensor_value;
joe_tijerina 3:6d8574d8c9c1 32 int adc_scale = 4096;
joe_tijerina 3:6d8574d8c9c1 33 int readings[3] = {0, 0, 0};
joe_tijerina 3:6d8574d8c9c1 34 int sensorValue;
joe_tijerina 3:6d8574d8c9c1 35 int B = 3975;
joe_tijerina 3:6d8574d8c9c1 36 float resistance;
joe_tijerina 3:6d8574d8c9c1 37 float temperature;
joe_tijerina 3:6d8574d8c9c1 38 float temperature_f;
dangriffin 5:41a15c0653e8 39 float humidity;
dangriffin 5:41a15c0653e8 40 float dewpoint;
joe_tijerina 3:6d8574d8c9c1 41 char amb_temp[6];
joe_tijerina 3:6d8574d8c9c1 42 int a;
joe_tijerina 3:6d8574d8c9c1 43
joe_tijerina 3:6d8574d8c9c1 44 #ifdef ACCEL
joe_tijerina 3:6d8574d8c9c1 45 printf("Starting ADXL345 test...\n\r");
joe_tijerina 3:6d8574d8c9c1 46 wait(.001);
joe_tijerina 3:6d8574d8c9c1 47 printf("Device ID is: 0x%02x\n\r", accelerometer.getDeviceID());
joe_tijerina 3:6d8574d8c9c1 48 wait(.001);
joe_tijerina 3:6d8574d8c9c1 49
joe_tijerina 3:6d8574d8c9c1 50 // These are here to test whether any of the initialization fails. It will print the failure
joe_tijerina 3:6d8574d8c9c1 51 if (accelerometer.setPowerControl(0x00))
joe_tijerina 3:6d8574d8c9c1 52 {
joe_tijerina 3:6d8574d8c9c1 53 printf("didn't intitialize power control\n");
joe_tijerina 3:6d8574d8c9c1 54 return 0;
joe_tijerina 3:6d8574d8c9c1 55 }
joe_tijerina 3:6d8574d8c9c1 56
joe_tijerina 3:6d8574d8c9c1 57 //Full resolution, +/-16g, 4mg/LSB.
joe_tijerina 3:6d8574d8c9c1 58 wait(.001);
joe_tijerina 3:6d8574d8c9c1 59
joe_tijerina 3:6d8574d8c9c1 60 if(accelerometer.setDataFormatControl(0x0B))
joe_tijerina 3:6d8574d8c9c1 61 {
joe_tijerina 3:6d8574d8c9c1 62 printf("didn't set data format\n");
joe_tijerina 3:6d8574d8c9c1 63 return 0;
joe_tijerina 3:6d8574d8c9c1 64 }
joe_tijerina 3:6d8574d8c9c1 65 wait(.001);
joe_tijerina 3:6d8574d8c9c1 66
joe_tijerina 3:6d8574d8c9c1 67 //3.2kHz data rate.
joe_tijerina 3:6d8574d8c9c1 68 if(accelerometer.setDataRate(ADXL345_3200HZ))
joe_tijerina 3:6d8574d8c9c1 69 {
joe_tijerina 3:6d8574d8c9c1 70 printf("didn't set data rate\n");
joe_tijerina 3:6d8574d8c9c1 71 return 0;
joe_tijerina 3:6d8574d8c9c1 72 }
joe_tijerina 3:6d8574d8c9c1 73 wait(.001);
joe_tijerina 3:6d8574d8c9c1 74
joe_tijerina 3:6d8574d8c9c1 75 //Measurement mode.
joe_tijerina 3:6d8574d8c9c1 76 if(accelerometer.setPowerControl(MeasurementMode))
joe_tijerina 3:6d8574d8c9c1 77 {
joe_tijerina 3:6d8574d8c9c1 78 printf("didn't set the power control to measurement\n");
joe_tijerina 3:6d8574d8c9c1 79 return 0;
joe_tijerina 3:6d8574d8c9c1 80 }
joe_tijerina 3:6d8574d8c9c1 81 #endif
joe_tijerina 3:6d8574d8c9c1 82
joe_tijerina 3:6d8574d8c9c1 83 while(1)
joe_tijerina 3:6d8574d8c9c1 84 {
joe_tijerina 3:6d8574d8c9c1 85 #ifdef LED
joe_tijerina 3:6d8574d8c9c1 86 my_led = 1; // LED is ON
bcostm 2:b60cb847489c 87 wait(0.2); // 200 ms
joe_tijerina 3:6d8574d8c9c1 88 my_led = 0; // LED is OFF
bcostm 2:b60cb847489c 89 wait(1.0); // 1 sec
joe_tijerina 3:6d8574d8c9c1 90 #endif
joe_tijerina 3:6d8574d8c9c1 91
joe_tijerina 3:6d8574d8c9c1 92 #ifdef WATER_SENSOR
joe_tijerina 3:6d8574d8c9c1 93 printf("water_sensor: %d \n\r", water_sensor.read());
joe_tijerina 3:6d8574d8c9c1 94 wait(0.5);
joe_tijerina 3:6d8574d8c9c1 95 #endif
joe_tijerina 3:6d8574d8c9c1 96
joe_tijerina 3:6d8574d8c9c1 97 #ifdef GAS_SENSOR
joe_tijerina 3:6d8574d8c9c1 98 gas_sensor_value = gas_sensor.read_u16();
joe_tijerina 3:6d8574d8c9c1 99 printf("gas_sensor_value: 0x%X \n\r", gas_sensor_value);
joe_tijerina 3:6d8574d8c9c1 100
joe_tijerina 3:6d8574d8c9c1 101 vol = (float)gas_sensor_value/adc_scale*5.0;
joe_tijerina 3:6d8574d8c9c1 102 printf("gas vol: %f \n\r", vol);
joe_tijerina 3:6d8574d8c9c1 103 wait(1);
joe_tijerina 3:6d8574d8c9c1 104 #endif
joe_tijerina 3:6d8574d8c9c1 105
joe_tijerina 3:6d8574d8c9c1 106 #ifdef ACCEL
joe_tijerina 3:6d8574d8c9c1 107 accelerometer.getOutput(readings);
joe_tijerina 3:6d8574d8c9c1 108 wait(0.1); // 100 ms
joe_tijerina 3:6d8574d8c9c1 109
joe_tijerina 3:6d8574d8c9c1 110 /* x-axis, y-axis and z-axis */
joe_tijerina 3:6d8574d8c9c1 111 printf("%d, %d, %d\n\r", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
joe_tijerina 3:6d8574d8c9c1 112 #endif
joe_tijerina 3:6d8574d8c9c1 113
joe_tijerina 3:6d8574d8c9c1 114 #ifdef LIGHT_SENSOR
joe_tijerina 3:6d8574d8c9c1 115 sensorValue = analog_light_sensor_read.read_u16();
joe_tijerina 3:6d8574d8c9c1 116 Rsensor=(float)(adc_scale-sensorValue)*10/sensorValue;
joe_tijerina 3:6d8574d8c9c1 117 printf("Light Sensor Analog Reading is 0x%X = %d ", sensorValue, sensorValue);
joe_tijerina 3:6d8574d8c9c1 118 printf("The sensor resistance is %f \n\n\r", Rsensor);
joe_tijerina 3:6d8574d8c9c1 119 wait(1); // 1s
joe_tijerina 3:6d8574d8c9c1 120 #endif
joe_tijerina 3:6d8574d8c9c1 121
joe_tijerina 3:6d8574d8c9c1 122 #ifdef TEMP_SENSOR
joe_tijerina 3:6d8574d8c9c1 123 a = temp_sensor.read_u16();
joe_tijerina 3:6d8574d8c9c1 124
joe_tijerina 3:6d8574d8c9c1 125 resistance = (float)(adc_scale-a)*10000/a; //get the resistance of the sensor;
joe_tijerina 3:6d8574d8c9c1 126 temperature = 1/(log(resistance/10000)/B+1/298.15)-273.15; //convert to temperature via datasheet ;
joe_tijerina 3:6d8574d8c9c1 127 temperature_f = (1.8 * temperature) + 32.0;
joe_tijerina 3:6d8574d8c9c1 128 sprintf(amb_temp, "%0.2f", temperature_f);
joe_tijerina 3:6d8574d8c9c1 129
joe_tijerina 3:6d8574d8c9c1 130 printf("Temp Sensor Analog Reading is 0x%X = %d ", a, a);
joe_tijerina 3:6d8574d8c9c1 131 printf("Current Temperature: %f C %f F \n\r", temperature, temperature_f);
joe_tijerina 3:6d8574d8c9c1 132 wait(1); // 1s
joe_tijerina 3:6d8574d8c9c1 133 #endif
dangriffin 5:41a15c0653e8 134
dangriffin 5:41a15c0653e8 135 #ifdef TEMP_HUMID_SENSOR
dangriffin 5:41a15c0653e8 136 temp_humid_sensor.readData();
dangriffin 5:41a15c0653e8 137
dangriffin 5:41a15c0653e8 138 temperature = temp_humid_sensor.ReadTemperature(CELCIUS);
dangriffin 5:41a15c0653e8 139 temperature_f = temp_humid_sensor.ReadTemperature(FARENHEIT);
dangriffin 5:41a15c0653e8 140 humidity = temp_humid_sensor.ReadHumidity();
dangriffin 5:41a15c0653e8 141 dewpoint = temp_humid_sensor.CalcdewPointFast(temperature, humidity);
dangriffin 5:41a15c0653e8 142
dangriffin 5:41a15c0653e8 143 printf("\r\n");
dangriffin 5:41a15c0653e8 144 printf("Temperature: %f C / %f F\r\n", temperature, temperature_f);
dangriffin 5:41a15c0653e8 145 printf("Humidity: %f%%\r\n", humidity);
dangriffin 5:41a15c0653e8 146 printf("Dewpoint: %f C / %f F\r\n", dewpoint, (dewpoint * 1.8f) + 32);
dangriffin 5:41a15c0653e8 147 wait(1);
dangriffin 5:41a15c0653e8 148 #endif
dangriffin 5:41a15c0653e8 149
dangriffin 6:d25c6da3f0b6 150 #ifdef DIGIT_DISPLAY
dangriffin 6:d25c6da3f0b6 151 static int16_t message[] = {0xF, 0xE, 0xE, 0xD, 0xC, 0x0, 0xD, 0xE};
dangriffin 6:d25c6da3f0b6 152 static int ArraySize = sizeof(message)/sizeof(message[0]);
dangriffin 6:d25c6da3f0b6 153 static int MessageStart = 0;
dangriffin 6:d25c6da3f0b6 154 DigitalDisplay.on();
dangriffin 6:d25c6da3f0b6 155
dangriffin 6:d25c6da3f0b6 156 for (int position = 0; position <= 3; position++)
dangriffin 6:d25c6da3f0b6 157 {
dangriffin 6:d25c6da3f0b6 158 DigitalDisplay.write(position, message[(position + MessageStart) % ArraySize]);
dangriffin 6:d25c6da3f0b6 159 }
dangriffin 7:d52c3793a04a 160 MessageStart = (MessageStart + 1) % ArraySize;
dangriffin 6:d25c6da3f0b6 161
dangriffin 6:d25c6da3f0b6 162 wait(.3);
dangriffin 6:d25c6da3f0b6 163 #endif
dangriffin 6:d25c6da3f0b6 164
screamer 0:005629fe3609 165 }
screamer 0:005629fe3609 166 }