Arduino-OWI
One-Wire Interface (OWI) library for Arduino
Alarm.ino
Go to the documentation of this file.
1 #include "GPIO.h"
2 #include "OWI.h"
3 #include "Software/OWI.h"
4 #include "Driver/DS18B20.h"
5 #include "assert.h"
6 
8 DS18B20 sensor(owi);
9 
10 void setup()
11 {
12  Serial.begin(57600);
13  while (!Serial);
14 
15  // Set thermometer sensor alarm triggers (20..25 C) and resolution
16  // (10 bits). Iterate all sensors and write configuration.
17  uint8_t* rom = sensor.rom();
18  int8_t last = owi.FIRST;
19  do {
20  last = owi.search_rom(sensor.FAMILY_CODE, rom, last);
21  if (last == owi.ERROR) break;
22  sensor.resolution(10);
23  sensor.set_trigger(20, 25);
24  ASSERT(sensor.write_scratchpad(false));
25  } while (last != owi.LAST);
26 }
27 
28 void loop()
29 {
30  // Check if any thermometer sersors have exceeded thresholds.
31  // Broadcast a convert request to all sensors: Print timestamp,
32  // sensor identity (rom) and temperature for all that report an
33  // alarm
34 
35  int8_t last = owi.FIRST;
36  uint8_t* rom = sensor.rom();
37  static uint16_t timestamp = 0;
38  uint8_t id = 0;
39  if (!sensor.convert_request(true)) return;
40  delay(sensor.conversion_time());
41  do {
42  last = owi.alarm_search(rom, last);
43  if (last == owi.ERROR) break;
44  ASSERT(sensor.read_scratchpad(false));
45  Serial.print(timestamp);
46  Serial.print('.');
47  Serial.print(id++);
48  Serial.print(F(":rom="));
49  for (size_t i = 0; i < owi.ROM_MAX; i++) {
50  if (rom[i] < 0x10) Serial.print(0);
51  Serial.print(rom[i], HEX);
52  }
53  Serial.print(F(",temperature="));
54  Serial.println(sensor.temperature());
55  } while (last != owi.LAST);
56  timestamp += 1;
57  delay(1000);
58 }
int8_t alarm_search(uint8_t *code, int8_t last=FIRST)
Definition: OWI.h:261
static const uint8_t FAMILY_CODE
Definition: DS18B20.h:44
Error during search.
Definition: OWI.h:192
void setup()
Definition: Alarm.ino:10
bool read_scratchpad(bool match=true)
Definition: DS18B20.h:185
int8_t search_rom(uint8_t family, uint8_t *code, int8_t last=FIRST)
Definition: OWI.h:204
bool convert_request(bool broadcast=false)
Definition: DS18B20.h:125
Software::Serial< BOARD::D0 > Serial
Definition: Alarm.ino:8
DS18B20 sensor(owi)
void resolution(uint8_t bits)
Definition: DS18B20.h:70
Software::OWI< BOARD::D7 > owi
Definition: Alarm.ino:7
bool write_scratchpad(bool match=true)
Definition: DS18B20.h:199
void rom(const uint8_t *rom)
Definition: OWI.h:303
Last position, search completed.
Definition: OWI.h:193
Start position of search.
Definition: OWI.h:191
void set_trigger(int8_t low, int8_t high)
Definition: DS18B20.h:82
static const size_t ROM_MAX
Definition: OWI.h:32
float temperature() const
Definition: DS18B20.h:94
uint16_t conversion_time()
Definition: DS18B20.h:143
void loop()
Definition: Alarm.ino:28