Commit d1a4b55a6c856a2f7ebe9d2d6f8c819db2bb9d0c
1 parent
71236059
--no commit message
Showing
3 changed files
with
115 additions
and
13 deletions
Project/applications/smartcities/include/sensors.h
... | ... | @@ -26,12 +26,15 @@ typedef struct { |
26 | 26 | char* additional_info; |
27 | 27 | } sensor; |
28 | 28 | |
29 | -uint8_t register_sensor(sensor sens); | |
29 | +void wakeup(uint8_t logic_address); | |
30 | 30 | |
31 | 31 | //SENSOR DEFINITIONS |
32 | 32 | extern sensor light_sensor; |
33 | 33 | extern sensor ultrasound_sensor; |
34 | 34 | extern sensor pressure_sensor; |
35 | +extern sensor humidity_temp_sensor; | |
36 | +extern sensor sound_sensor; | |
37 | +extern sensor battery; | |
35 | 38 | |
36 | 39 | //SENSOR FUNCTIONS |
37 | 40 | |
... | ... | @@ -65,10 +68,12 @@ typedef struct { |
65 | 68 | } bmp085_callibration; |
66 | 69 | |
67 | 70 | uint16_t get_pressure_data(void); |
71 | +uint16_t get_pressure_temperature_data(void); | |
68 | 72 | bmp085_callibration get_pressure_callibration_data(void); |
69 | 73 | char* callibration_pressure_data_csv(bmp085_callibration parameters); |
70 | -char* pressure_value(uint16_t pressure); | |
74 | +char* pressure_value(uint16_t pressure,uint16_t temperature); | |
71 | 75 | void init_pressure(void); |
76 | +void init_pressure_temperature(void); | |
72 | 77 | |
73 | 78 | //HUMIDITY AND TEMPERATURE SENSOR |
74 | 79 | |
... | ... | @@ -87,6 +92,6 @@ char* sound_value(uint32_t sound); |
87 | 92 | |
88 | 93 | void init_battery(void); |
89 | 94 | uint32_t get_battery_data(void); |
90 | -char* battery_value(uint32_t sound); | |
95 | +char* battery_value(uint32_t battery); | |
91 | 96 | |
92 | 97 | #endif | ... | ... |
Project/applications/smartcities/main.c
... | ... | @@ -153,7 +153,7 @@ int main(void) |
153 | 153 | } |
154 | 154 | } |
155 | 155 | else if(res==HARD_REACHED){ |
156 | - printf("--------------hard limit-------------\r\n"); | |
156 | + /*printf("--------------hard limit-------------\r\n"); | |
157 | 157 | |
158 | 158 | // fem servir 085 de prova, però haurem de fer servir sensor_id[0] |
159 | 159 | while( send(buffers[0],&ind[0],&sizes[0], mod.ID, sensor_id[j]) != JSON_POST_OK ) |
... | ... | @@ -182,7 +182,7 @@ int main(void) |
182 | 182 | else if(ok ==JSON_POST_OK){ |
183 | 183 | printf(" send OK \r\n"); |
184 | 184 | } |
185 | - } | |
185 | + }*/ | |
186 | 186 | } |
187 | 187 | } |
188 | 188 | //chThdSleepMilliseconds(100); | ... | ... |
Project/applications/smartcities/sensors.c
... | ... | @@ -2,11 +2,77 @@ |
2 | 2 | |
3 | 3 | sensor light_sensor = {LIGHT_ADDR, "Light sensor", "illumination", "lux",NULL}; |
4 | 4 | sensor ultrasound_sensor = {DISTANCE_ADDR, "Ultrasound sensor", "distance", "cm",NULL}; |
5 | -sensor pressure_sensor = {PRESSURE_ADDR, "Pressure sensor", "pressure", "kPa",NULL}; | |
5 | +sensor pressure_sensor = {PRESSURE_ADDR, "Pressure sensor", "pressure", "hPa",NULL}; | |
6 | 6 | sensor humidity_temp_sensor = {HUMIDITY_TEMP_ADDR, "Humidity and Temperature","ºC,RH",NULL}; |
7 | 7 | sensor sound_sensor = {SOUND_ADDR, "Sound sensor","mV",NULL}; |
8 | 8 | sensor battery = {BATTERY_ADDR, "Battery Level","mV",NULL}; |
9 | 9 | |
10 | +void wakeup(uint8_t logic_address) | |
11 | +{ | |
12 | + /* Aquí habría que implementar un control | |
13 | + * inteligente de la alimentación de los | |
14 | + * sensores, levantándolos y durmiéndolos | |
15 | + * cuando tocara | |
16 | + */ | |
17 | + | |
18 | + // X X X PA7 PA6 PA5 PA4 PA3 | |
19 | + // b7 b6 b5 b4 b3 b2 b1 b0 | |
20 | + | |
21 | + printf("GRAB A BRUSH AND PUT A LITTLE MAKE-UP\r\n"); | |
22 | + GPIO_InitTypeDef GPIO_InitStructure; | |
23 | + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); | |
24 | + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; | |
25 | + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; | |
26 | + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
27 | + GPIO_Init(ADCsound_GPIO_PORT, &GPIO_InitStructure); | |
28 | + | |
29 | + if(logic_address & 0x1) | |
30 | + { | |
31 | + printf("Woken Pin 3\r\n"); | |
32 | + GPIO_SetBits(GPIOA,GPIO_Pin_3); | |
33 | + } | |
34 | + else | |
35 | + { | |
36 | + GPIO_ResetBits(GPIOA,GPIO_Pin_3); | |
37 | + } | |
38 | + if(logic_address & 0x2) | |
39 | + { | |
40 | + printf("Woken Pin 4\r\n"); | |
41 | + GPIO_SetBits(GPIOA,GPIO_Pin_4); | |
42 | + } | |
43 | + else | |
44 | + { | |
45 | + GPIO_ResetBits(GPIOA,GPIO_Pin_4); | |
46 | + } | |
47 | + if(logic_address & 0x4) | |
48 | + { | |
49 | + printf("Woken Pin 5\r\n"); | |
50 | + GPIO_SetBits(GPIOA,GPIO_Pin_5); | |
51 | + } | |
52 | + else | |
53 | + { | |
54 | + GPIO_ResetBits(GPIOA,GPIO_Pin_5); | |
55 | + } | |
56 | + if(logic_address & 0x8) | |
57 | + { | |
58 | + printf("Woken Pin 6\r\n"); | |
59 | + GPIO_SetBits(GPIOA,GPIO_Pin_6); | |
60 | + } | |
61 | + else | |
62 | + { | |
63 | + GPIO_ResetBits(GPIOA,GPIO_Pin_6); | |
64 | + } | |
65 | + if(logic_address & 0x10) | |
66 | + { | |
67 | + printf("Woken Pin 7\r\n"); | |
68 | + GPIO_SetBits(GPIOA,GPIO_Pin_7); | |
69 | + } | |
70 | + else | |
71 | + { | |
72 | + GPIO_ResetBits(GPIOA,GPIO_Pin_7); | |
73 | + } | |
74 | +} | |
75 | + | |
10 | 76 | uint32_t get_light_data(void) |
11 | 77 | { |
12 | 78 | uint32_t data = 0; |
... | ... | @@ -123,6 +189,22 @@ uint16_t get_pressure_data(void) |
123 | 189 | return data; |
124 | 190 | } |
125 | 191 | |
192 | +uint16_t get_pressure_temperature_data(void) | |
193 | +{ | |
194 | + uint16_t data; | |
195 | + init_pressure_temperature(); | |
196 | + | |
197 | + I2C_start(I2C1,DISTANCE_ADDR << 1, I2C_Direction_Transmitter); | |
198 | + I2C_write(I2C1, 0xF6); | |
199 | + I2C_stop(I2C1); | |
200 | + | |
201 | + I2C_start(I2C1, DISTANCE_ADDR << 1, I2C_Direction_Receiver); | |
202 | + data = I2C_read_ack(I2C1); | |
203 | + data = data << 8; | |
204 | + data = data | I2C_read_nack(I2C1); | |
205 | + return data; | |
206 | +} | |
207 | + | |
126 | 208 | bmp085_callibration get_pressure_callibration_data(void) |
127 | 209 | { |
128 | 210 | bmp085_callibration calib_data; |
... | ... | @@ -234,6 +316,16 @@ void init_pressure(void) |
234 | 316 | chThdSleepMilliseconds(5); |
235 | 317 | } |
236 | 318 | |
319 | +void init_pressure_temperature(void) | |
320 | +{ | |
321 | + I2C_start(I2C1,PRESSURE_ADDR << 1, I2C_Direction_Transmitter); | |
322 | + I2C_write(I2C1, 0xF4); | |
323 | + I2C_write(I2C1, 0x2E); | |
324 | + I2C_stop(I2C1); | |
325 | + | |
326 | + chThdSleepMilliseconds(5); | |
327 | +} | |
328 | + | |
237 | 329 | void init_humidity_temp(void) |
238 | 330 | { |
239 | 331 | I2C_start(I2C1,HUMIDITY_TEMP_ADDR << 1, I2C_Direction_Transmitter); |
... | ... | @@ -241,6 +333,7 @@ void init_humidity_temp(void) |
241 | 333 | } |
242 | 334 | uint16_t get_humidity_data(void) |
243 | 335 | { |
336 | + init_humidity_temp(); | |
244 | 337 | uint16_t data = 0; |
245 | 338 | I2C_start(I2C1,PRESSURE_ADDR << 1, I2C_Direction_Receiver); |
246 | 339 | data = I2C_read_ack(I2C1) & 0x3F; |
... | ... | @@ -251,6 +344,7 @@ uint16_t get_humidity_data(void) |
251 | 344 | } |
252 | 345 | uint16_t get_temperature_data(void) |
253 | 346 | { |
347 | + init_humidity_temp(); | |
254 | 348 | uint16_t data = 0; |
255 | 349 | I2C_start(I2C1,PRESSURE_ADDR << 1, I2C_Direction_Receiver); |
256 | 350 | I2C_read_ack(I2C1); |
... | ... | @@ -275,15 +369,15 @@ char* distance_value(uint16_t distance) |
275 | 369 | sprintf(value,"%d",distance); |
276 | 370 | return value; |
277 | 371 | } |
278 | -char* pressure_value(uint16_t pressure) | |
372 | +char* pressure_value(uint16_t pressure, uint16_t temperature) | |
279 | 373 | { |
280 | - char *value = chHeapAlloc(NULL,5 + 1); | |
281 | - sprintf(value,"%d",pressure); | |
374 | + char *value = chHeapAlloc(NULL,11 + 1); | |
375 | + sprintf(value,"%d,%d",pressure,temperature); | |
282 | 376 | return value; |
283 | 377 | } |
284 | 378 | char* temp_humidity_value(uint16_t temp, uint16_t humidity) |
285 | 379 | { |
286 | - char *value = chHeapAlloc(NULL,21 + 1); | |
380 | + char *value = chHeapAlloc(NULL,11 + 1); | |
287 | 381 | sprintf(value,"%d,%d",temp,humidity); |
288 | 382 | return value; |
289 | 383 | } |
... | ... | @@ -295,6 +389,7 @@ void init_sound(void) |
295 | 389 | } |
296 | 390 | uint32_t get_sound_data(void) |
297 | 391 | { |
392 | + init_sound(); | |
298 | 393 | return adc_sound_process(); |
299 | 394 | } |
300 | 395 | char* sound_value(uint32_t sound) |
... | ... | @@ -345,15 +440,17 @@ void init_battery(void) |
345 | 440 | |
346 | 441 | uint32_t get_battery_data(void) |
347 | 442 | { |
443 | + init_battery(); | |
348 | 444 | return adc_batt_process(); |
349 | 445 | } |
350 | 446 | |
351 | -char* battery_value(uint32_t sound) | |
447 | +char* battery_value(uint32_t battery) | |
352 | 448 | { |
353 | 449 | char *value = chHeapAlloc(NULL,11 + 1); |
354 | - sprintf(value,"%4u",(unsigned int)sound); | |
450 | + sprintf(value,"%4u",(unsigned int)battery); | |
355 | 451 | return value; |
356 | 452 | } |
357 | 453 | |
358 | 454 | //light_value(get_light_data()); |
359 | -//temp_humidity_value(get_temperature_data(),get_humidity_data()); | |
360 | 455 | \ No newline at end of file |
456 | +//temp_humidity_value(get_temperature_data(),get_humidity_data()); | |
457 | +//pressure_value(get_pressure_data(), get_pressure_temperature_data()); | |
361 | 458 | \ No newline at end of file | ... | ... |