HaTemp - Home automation temperature measurement module.

Dependencies:   DS1820 RF12B mbed

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?

UserRevisionLine numberNew 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 }