#include "Arduino.h" #include "LowLevel.h" #include "SerialChannel.h" #include "OneWireSlave.h" #define LEDPin 13 #define OWPin 2 SerialChannel debug("debug"); Pin led(LEDPin); byte owROM[7] = { 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }; byte buffer1[8]; byte buffer2[8]; volatile byte* backBuffer = buffer1; volatile byte bufferPos = 0; byte sendBuffer[8]; void owReceive(OneWireSlave::ReceiveEvent evt, byte data); void setup() { led.outputMode(); led.writeLow(); OneWire.setReceiveCallback(&owReceive); OneWire.begin(owROM, OWPin); Serial.begin(9600); } int count = 0; void loop() { delay(1); if (count++ == 1000) { led.write(!led.read()); count = 0; } cli();//disable interrupts SerialChannel::swap(); byte* frontBuffer = (byte*)backBuffer; byte frontBufferSize = bufferPos; backBuffer = backBuffer == buffer1 ? buffer2 : buffer1; bufferPos = 0; sei();//enable interrupts SerialChannel::flush(); for (int i = 0; i < frontBufferSize; ++i) { char msg[16]; sprintf(msg, "Received byte: %d", (int)frontBuffer[i]); debug.write(msg); if (frontBuffer[i] == 0x42) { sendBuffer[0] = 0xBA; sendBuffer[1] = 0xAD; sendBuffer[2] = 0xF0; sendBuffer[3] = 0x0D; OneWire.write(sendBuffer, 4, 0); } } } void owReceive(OneWireSlave::ReceiveEvent evt, byte data) { switch (evt) { case OneWireSlave::RE_Byte: backBuffer[bufferPos++] = data; break; default: ; } }