Device identification and simple command listening (not tested yet)
This commit is contained in:
parent
8be66217dd
commit
16dbbc37e4
@ -1,7 +1,62 @@
|
||||
void setup() {
|
||||
#include "OWSlave.h"
|
||||
|
||||
#define LEDPin 13
|
||||
#define OWPin 2
|
||||
#define InterruptNumber 0 // Must correspond to the OWPin to correctly detect state changes. On Arduino Uno, interrupt 0 is for digital pin 2
|
||||
|
||||
unsigned char rom[8] = {0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00};
|
||||
|
||||
volatile long prevInt = 0; // Previous Interrupt micros
|
||||
volatile boolean owReset = false;
|
||||
|
||||
OWSlave oneWire(OWPin);
|
||||
|
||||
void setup()
|
||||
{
|
||||
pinMode(LEDPin, OUTPUT);
|
||||
pinMode(OWPin, INPUT);
|
||||
|
||||
digitalWrite(LEDPin, LOW);
|
||||
|
||||
attachInterrupt(InterruptNumber,onewireInterrupt,CHANGE);
|
||||
|
||||
oneWire.setRom(rom);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
void loop()
|
||||
{
|
||||
if (owReset) owHandler();
|
||||
}
|
||||
|
||||
}
|
||||
void owHandler(void)
|
||||
{
|
||||
detachInterrupt(InterruptNumber);
|
||||
owReset=false;
|
||||
|
||||
if (oneWire.presence()) {
|
||||
if (oneWire.recvAndProcessCmd()) {
|
||||
uint8_t cmd = oneWire.recv();
|
||||
if (cmd == 0x44) {
|
||||
digitalWrite(LEDPin, HIGH);
|
||||
}
|
||||
if (cmd == 0xBE) {
|
||||
for( int i = 0; i < 9; i++) {
|
||||
oneWire.send((byte)0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
attachInterrupt(InterruptNumber,onewireInterrupt,CHANGE);
|
||||
}
|
||||
|
||||
void onewireInterrupt(void)
|
||||
{
|
||||
volatile long lastMicros = micros() - prevInt;
|
||||
prevInt = micros();
|
||||
if (lastMicros >= 410 && lastMicros <= 550)
|
||||
{
|
||||
// OneWire Reset Detected
|
||||
owReset=true;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user