//
// ATtiny I2Cスレーブ sample
//
#include <TinyWireS.h> //
https://github.com/rambo/TinyWire
#define SLAVE_ADDRESS 0x08
// The default buffer size, Can't recall the scope of
defines right now
#ifndef TWI_RX_BUFFER_SIZE
#define TWI_RX_BUFFER_SIZE ( 16 )
#endif
#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
#if defined(__AVR_ATtiny44__)
#define LED1 2
#define LED2 3
#define MODEL 44
#else
#define LED1 2
#define LED2 3
#define MODEL 84
#endif
#elif defined(__AVR_ATtiny45__) ||
defined(__AVR_ATtiny85__)
#if defined(__AVR_ATtiny45__)
#define LED1 3
#define LED2 4
#define MODEL 45
#else
#define LED1 3
#define LED2 4
#define MODEL 85
#endif
#elif defined(__AVR_ATtiny461__) ||
defined(__AVR_ATtiny861__)
#if defined(__AVR_ATtiny461__)
#define LED1 3
#define LED2 4
#define MODEL 46
#else
#define LED1 3
#define LED2 4
#define MODEL 86
#endif
#elif defined(__AVR_ATtiny2313__) ||
defined(__AVR_ATtiny4313__)
#if defined(__AVR_ATtiny461__)
#define LED1 3
#define LED2 4
#define MODEL 23
#else
#define LED1 3
#define LED2 4
#define MODEL 43
#endif
#endif
int status = 0;
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
digitalWrite(LED1, LOW); // set the LED off
digitalWrite(LED2, LOW); // set the LED off
// initialize i2c as slave
TinyWireS.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
TinyWireS.onReceive(receiveEvent);
TinyWireS.onRequest(requestEvent);
}
void loop() {
TinyWireS_stop_check();
}
// callback for received data
void receiveEvent(uint8_t byteCount){
int number;
while(TinyWireS.available()) {
number = TinyWireS.receive();
if (number == 1){
digitalWrite(LED1, HIGH);
// set the LED on
status=HIGH;
} else if (number == 2) {
digitalWrite(LED1,
LOW); // set the LED off
status=LOW;
} else if (number == 3) {
digitalWrite(LED2, HIGH);
// set the LED off
status=HIGH;
} else if (number == 4) {
digitalWrite(LED2,
LOW); // set the LED off
status=LOW;
}
}
}
// callback for sending data
void requestEvent(){
TinyWireS.send(MODEL);
} |