Seeed Studio Grove Sensors Example
Dependencies: mbed DHT DigitDisplay
Fork of STM32_Read_Sensors_Example by
main.cpp@7:d52c3793a04a, 2014-12-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |