# 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 :
;
}
}