SEDO subject project
Dependencies: ds3231 mbed-rtos mbed DHT
main_20170502.txt@12:1d544cdab2cf, 2017-05-15 (annotated)
- Committer:
- ValenSalLop
- Date:
- Mon May 15 18:30:20 2017 +0000
- Revision:
- 12:1d544cdab2cf
- Parent:
- 9:5e9c4277151d
final;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ValenSalLop | 9:5e9c4277151d | 1 | /* |
ValenSalLop | 9:5e9c4277151d | 2 | * Sensing operations |
ValenSalLop | 9:5e9c4277151d | 3 | */ |
ValenSalLop | 9:5e9c4277151d | 4 | #include "mbed.h" |
ValenSalLop | 9:5e9c4277151d | 5 | #include "rtos.h" |
ValenSalLop | 9:5e9c4277151d | 6 | |
ValenSalLop | 9:5e9c4277151d | 7 | #include "sensor.h" |
ValenSalLop | 9:5e9c4277151d | 8 | |
ValenSalLop | 9:5e9c4277151d | 9 | extern CirQueue buffer; |
ValenSalLop | 9:5e9c4277151d | 10 | extern DHT DHTSensor; |
ValenSalLop | 9:5e9c4277151d | 11 | extern DigitalOut DHTEnable; |
ValenSalLop | 9:5e9c4277151d | 12 | extern uint32_t initSensor(void const *args) |
ValenSalLop | 9:5e9c4277151d | 13 | { |
ValenSalLop | 9:5e9c4277151d | 14 | |
ValenSalLop | 9:5e9c4277151d | 15 | buffer = CirQueue(); |
ValenSalLop | 9:5e9c4277151d | 16 | DHTSensor = DHT(D6, DHT11); |
ValenSalLop | 9:5e9c4277151d | 17 | DHTEnable = DigitalOut(D7); |
ValenSalLop | 9:5e9c4277151d | 18 | // TODO: Establecer alarma RTC para ejecucin periodica |
ValenSalLop | 9:5e9c4277151d | 19 | |
ValenSalLop | 9:5e9c4277151d | 20 | return 1; |
ValenSalLop | 9:5e9c4277151d | 21 | } |
ValenSalLop | 9:5e9c4277151d | 22 | extern void sensor_thread(void const *args) |
ValenSalLop | 9:5e9c4277151d | 23 | { |
ValenSalLop | 9:5e9c4277151d | 24 | |
ValenSalLop | 9:5e9c4277151d | 25 | int DHTError = 0; |
ValenSalLop | 9:5e9c4277151d | 26 | // TODO: gestion RTC adquirir hora |
ValenSalLop | 9:5e9c4277151d | 27 | time_t ts; |
ValenSalLop | 9:5e9c4277151d | 28 | while (true) { |
ValenSalLop | 9:5e9c4277151d | 29 | DHTError = 0; |
ValenSalLop | 9:5e9c4277151d | 30 | ts = rtc.get_epoch(); |
ValenSalLop | 9:5e9c4277151d | 31 | if(ts<=0) |
ValenSalLop | 9:5e9c4277151d | 32 | // TODO : No hay hora |
ValenSalLop | 9:5e9c4277151d | 33 | SensorData measures; |
ValenSalLop | 9:5e9c4277151d | 34 | DHTError = readDHT(&measures); |
ValenSalLop | 9:5e9c4277151d | 35 | if(DHTError) { |
ValenSalLop | 9:5e9c4277151d | 36 | printf("DHTError: %d\n", DHTError); |
ValenSalLop | 9:5e9c4277151d | 37 | } |
ValenSalLop | 9:5e9c4277151d | 38 | buffer.push(measures); |
ValenSalLop | 9:5e9c4277151d | 39 | // TODO: inicio periodico segun RTC |
ValenSalLop | 9:5e9c4277151d | 40 | Thread::wait(5000); |
ValenSalLop | 9:5e9c4277151d | 41 | } |
ValenSalLop | 9:5e9c4277151d | 42 | } |
ValenSalLop | 9:5e9c4277151d | 43 | |
ValenSalLop | 9:5e9c4277151d | 44 | int DHTread(SensorData* measures) |
ValenSalLop | 9:5e9c4277151d | 45 | { |
ValenSalLop | 9:5e9c4277151d | 46 | int error = 0; |
ValenSalLop | 9:5e9c4277151d | 47 | DHTEnable = 1; |
ValenSalLop | 9:5e9c4277151d | 48 | wait(500); |
ValenSalLop | 9:5e9c4277151d | 49 | error = DHTSensor.readData(); |
ValenSalLop | 9:5e9c4277151d | 50 | if (0 == error) { |
ValenSalLop | 9:5e9c4277151d | 51 | measures->temperature = DHTSensor.ReadTemperature(CELCIUS); |
ValenSalLop | 9:5e9c4277151d | 52 | measures->humidity = DHTSensor.ReadHumidity(); |
ValenSalLop | 9:5e9c4277151d | 53 | measures->dewPoint = DHTSensor.CalcdewPoint(*temperature, *humidity); |
ValenSalLop | 9:5e9c4277151d | 54 | } |
ValenSalLop | 9:5e9c4277151d | 55 | DHTEnable=0; |
ValenSalLop | 9:5e9c4277151d | 56 | return error; |
ValenSalLop | 9:5e9c4277151d | 57 | } |
ValenSalLop | 9:5e9c4277151d | 58 | |
ValenSalLop | 9:5e9c4277151d | 59 | // Circle queue implementation |
ValenSalLop | 9:5e9c4277151d | 60 | CirQueue:: CirQueue() |
ValenSalLop | 9:5e9c4277151d | 61 | { |
ValenSalLop | 9:5e9c4277151d | 62 | front = 0; |
ValenSalLop | 9:5e9c4277151d | 63 | rear = -1; |
ValenSalLop | 9:5e9c4277151d | 64 | count = 0; |
ValenSalLop | 9:5e9c4277151d | 65 | } |
ValenSalLop | 9:5e9c4277151d | 66 | |
ValenSalLop | 9:5e9c4277151d | 67 | int CirQueue:: isFull() |
ValenSalLop | 9:5e9c4277151d | 68 | { |
ValenSalLop | 9:5e9c4277151d | 69 | int full=0; |
ValenSalLop | 9:5e9c4277151d | 70 | |
ValenSalLop | 9:5e9c4277151d | 71 | if( count == SENSOR_QUEUE_LENGTH ) |
ValenSalLop | 9:5e9c4277151d | 72 | full = 1; |
ValenSalLop | 9:5e9c4277151d | 73 | |
ValenSalLop | 9:5e9c4277151d | 74 | return full; |
ValenSalLop | 9:5e9c4277151d | 75 | } |
ValenSalLop | 9:5e9c4277151d | 76 | |
ValenSalLop | 9:5e9c4277151d | 77 | int CirQueue:: isEmpty() |
ValenSalLop | 9:5e9c4277151d | 78 | { |
ValenSalLop | 9:5e9c4277151d | 79 | int empty=0; |
ValenSalLop | 9:5e9c4277151d | 80 | |
ValenSalLop | 9:5e9c4277151d | 81 | if( count == 0 ) |
ValenSalLop | 9:5e9c4277151d | 82 | empty = 1; |
ValenSalLop | 9:5e9c4277151d | 83 | |
ValenSalLop | 9:5e9c4277151d | 84 | return empty; |
ValenSalLop | 9:5e9c4277151d | 85 | } |
ValenSalLop | 9:5e9c4277151d | 86 | |
ValenSalLop | 9:5e9c4277151d | 87 | |
ValenSalLop | 9:5e9c4277151d | 88 | int CirQueue:: pop(SensorData *item) |
ValenSalLop | 9:5e9c4277151d | 89 | { |
ValenSalLop | 9:5e9c4277151d | 90 | if( isEmpty() ) { |
ValenSalLop | 9:5e9c4277151d | 91 | return -1; |
ValenSalLop | 9:5e9c4277151d | 92 | } |
ValenSalLop | 9:5e9c4277151d | 93 | *item = ele[front]; |
ValenSalLop | 9:5e9c4277151d | 94 | front = (front+1) % SENSOR_QUEUE_LENGTH; |
ValenSalLop | 9:5e9c4277151d | 95 | count--; |
ValenSalLop | 9:5e9c4277151d | 96 | return 0; |
ValenSalLop | 9:5e9c4277151d | 97 | } |
ValenSalLop | 9:5e9c4277151d | 98 | |
ValenSalLop | 9:5e9c4277151d | 99 | int CirQueue:: push(SensorData item) |
ValenSalLop | 9:5e9c4277151d | 100 | { |
ValenSalLop | 9:5e9c4277151d | 101 | int res = 0; |
ValenSalLop | 9:5e9c4277151d | 102 | if( isFull() ) { |
ValenSalLop | 9:5e9c4277151d | 103 | SensorData latest_data; |
ValenSalLop | 9:5e9c4277151d | 104 | pop(&latest_data); |
ValenSalLop | 9:5e9c4277151d | 105 | res = -1; |
ValenSalLop | 9:5e9c4277151d | 106 | } |
ValenSalLop | 9:5e9c4277151d | 107 | |
ValenSalLop | 9:5e9c4277151d | 108 | rear= (rear+1) % SENSOR_QUEUE_LENGTH; |
ValenSalLop | 9:5e9c4277151d | 109 | |
ValenSalLop | 9:5e9c4277151d | 110 | ele[rear] = item; |
ValenSalLop | 9:5e9c4277151d | 111 | count++; |
ValenSalLop | 9:5e9c4277151d | 112 | |
ValenSalLop | 9:5e9c4277151d | 113 | return res; |
ValenSalLop | 9:5e9c4277151d | 114 | } |