HaTemp - Home automation temperature measurement module.
Dependencies: DS1820 RF12B mbed
main.cpp@0:e3445bf3717d, 2016-06-09 (annotated)
- Committer:
- jari
- Date:
- Thu Jun 09 15:12:35 2016 +0000
- Revision:
- 0:e3445bf3717d
reads several sensors and new communication protocol
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jari | 0:e3445bf3717d | 1 | #include "mbed.h" |
jari | 0:e3445bf3717d | 2 | #include "RF12B.h" |
jari | 0:e3445bf3717d | 3 | #include "DS1820.h" |
jari | 0:e3445bf3717d | 4 | #include "Ticker.h" |
jari | 0:e3445bf3717d | 5 | #include "time.h" |
jari | 0:e3445bf3717d | 6 | |
jari | 0:e3445bf3717d | 7 | //#define USE_RF12 |
jari | 0:e3445bf3717d | 8 | //#define USE_RTC |
jari | 0:e3445bf3717d | 9 | |
jari | 0:e3445bf3717d | 10 | //----------------------------------------------------------------------------- |
jari | 0:e3445bf3717d | 11 | #ifdef USE_RF12 |
jari | 0:e3445bf3717d | 12 | RF12B rfm12b(PB_4, PB_5, PB_3, PA_8, PA_10); // sdi, sdo, sclk, ncs, nirq |
jari | 0:e3445bf3717d | 13 | #endif |
jari | 0:e3445bf3717d | 14 | Ticker tick1; |
jari | 0:e3445bf3717d | 15 | DigitalOut led1(LED1); |
jari | 0:e3445bf3717d | 16 | |
jari | 0:e3445bf3717d | 17 | const int MAX_PROBES = 4; |
jari | 0:e3445bf3717d | 18 | DS1820* probe[MAX_PROBES]; |
jari | 0:e3445bf3717d | 19 | float temp[MAX_PROBES]; |
jari | 0:e3445bf3717d | 20 | |
jari | 0:e3445bf3717d | 21 | //----------------------------------------------------------------------------- |
jari | 0:e3445bf3717d | 22 | void tick() |
jari | 0:e3445bf3717d | 23 | { |
jari | 0:e3445bf3717d | 24 | led1 = !led1; |
jari | 0:e3445bf3717d | 25 | printf("tick\n"); |
jari | 0:e3445bf3717d | 26 | } |
jari | 0:e3445bf3717d | 27 | |
jari | 0:e3445bf3717d | 28 | //----------------------------------------------------------------------------- |
jari | 0:e3445bf3717d | 29 | int search_ds1820() |
jari | 0:e3445bf3717d | 30 | { |
jari | 0:e3445bf3717d | 31 | int i; |
jari | 0:e3445bf3717d | 32 | int found=0; |
jari | 0:e3445bf3717d | 33 | |
jari | 0:e3445bf3717d | 34 | // Initialize the probe array to DS1820 objects |
jari | 0:e3445bf3717d | 35 | for (i = 0; i < MAX_PROBES; i++) |
jari | 0:e3445bf3717d | 36 | probe[i] = new DS1820(PA_3); |
jari | 0:e3445bf3717d | 37 | |
jari | 0:e3445bf3717d | 38 | // Initialize global state variables |
jari | 0:e3445bf3717d | 39 | probe[0]->search_ROM_setup(); |
jari | 0:e3445bf3717d | 40 | |
jari | 0:e3445bf3717d | 41 | // Loop to find all devices on the data line |
jari | 0:e3445bf3717d | 42 | while (probe[found]->search_ROM() && found < (MAX_PROBES-1)) |
jari | 0:e3445bf3717d | 43 | found++; |
jari | 0:e3445bf3717d | 44 | |
jari | 0:e3445bf3717d | 45 | // If maximum number of probes are found, |
jari | 0:e3445bf3717d | 46 | // bump the counter to include the last array entry |
jari | 0:e3445bf3717d | 47 | if (probe[found]->ROM[0] != 0xFF) |
jari | 0:e3445bf3717d | 48 | found++; |
jari | 0:e3445bf3717d | 49 | |
jari | 0:e3445bf3717d | 50 | return found; |
jari | 0:e3445bf3717d | 51 | } |
jari | 0:e3445bf3717d | 52 | |
jari | 0:e3445bf3717d | 53 | //----------------------------------------------------------------------------- |
jari | 0:e3445bf3717d | 54 | int main() |
jari | 0:e3445bf3717d | 55 | { |
jari | 0:e3445bf3717d | 56 | int dsCount; |
jari | 0:e3445bf3717d | 57 | int counter = 0; |
jari | 0:e3445bf3717d | 58 | |
jari | 0:e3445bf3717d | 59 | // init RTC |
jari | 0:e3445bf3717d | 60 | // |
jari | 0:e3445bf3717d | 61 | #ifdef USE_RTC |
jari | 0:e3445bf3717d | 62 | struct tm clock; |
jari | 0:e3445bf3717d | 63 | clock.tm_year = 2015; |
jari | 0:e3445bf3717d | 64 | clock.tm_mon = 7; |
jari | 0:e3445bf3717d | 65 | clock.tm_mday = 12; |
jari | 0:e3445bf3717d | 66 | clock.tm_hour = 12; |
jari | 0:e3445bf3717d | 67 | clock.tm_min = 00; |
jari | 0:e3445bf3717d | 68 | |
jari | 0:e3445bf3717d | 69 | set_time(mktime(&clock)); |
jari | 0:e3445bf3717d | 70 | #endif |
jari | 0:e3445bf3717d | 71 | |
jari | 0:e3445bf3717d | 72 | dsCount = search_ds1820(); |
jari | 0:e3445bf3717d | 73 | printf("sensors: %d\n", dsCount); |
jari | 0:e3445bf3717d | 74 | |
jari | 0:e3445bf3717d | 75 | tick1.attach(&tick, 2.0); |
jari | 0:e3445bf3717d | 76 | #ifdef USE_RF12 |
jari | 0:e3445bf3717d | 77 | rfm12b.init(2, RF12_868MHZ, 5); //id = 2, band 868, group 5 |
jari | 0:e3445bf3717d | 78 | rfm12b.rf12_recvStart(); |
jari | 0:e3445bf3717d | 79 | #endif |
jari | 0:e3445bf3717d | 80 | while(1) { |
jari | 0:e3445bf3717d | 81 | wait(4.0); |
jari | 0:e3445bf3717d | 82 | |
jari | 0:e3445bf3717d | 83 | #ifdef USE_RTC |
jari | 0:e3445bf3717d | 84 | time_t seconds = time(NULL); |
jari | 0:e3445bf3717d | 85 | char tstr[16]; |
jari | 0:e3445bf3717d | 86 | |
jari | 0:e3445bf3717d | 87 | strftime(tstr, 16, "%d/%m %H:%M:%S", localtime(&seconds)); |
jari | 0:e3445bf3717d | 88 | printf("%s", tstr); |
jari | 0:e3445bf3717d | 89 | #endif |
jari | 0:e3445bf3717d | 90 | for (int i=0; i<dsCount; i++) { |
jari | 0:e3445bf3717d | 91 | probe[i]->convert_temperature(DS1820::all_devices); |
jari | 0:e3445bf3717d | 92 | temp[i] = probe[i]->temperature(); |
jari | 0:e3445bf3717d | 93 | } |
jari | 0:e3445bf3717d | 94 | |
jari | 0:e3445bf3717d | 95 | #ifdef USE_RF12 |
jari | 0:e3445bf3717d | 96 | rfm12b.sendStart(0, &temp, sizeof(temp)); |
jari | 0:e3445bf3717d | 97 | #endif |
jari | 0:e3445bf3717d | 98 | printf("m %d %f %f 0.0 0.0\n", counter, temp[0], temp[1]); |
jari | 0:e3445bf3717d | 99 | } |
jari | 0:e3445bf3717d | 100 | } |