Arduino側のコード。Arduino IDEは0.22、PCはMac OS X 10.9で確認。
WireライブラリーはArduino 1.01でメソッドが変更になっていますのでご自分の環境に合わせて適宜修正して使ってください。
wire.read wire.write がそれぞれ wire.receive wire.send に変更
#include
#define SLAVE_ADDRESS 0x04
int number = 0;
int state = 0;
void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
digitalWrite(0, LOW); // set the LED off
digitalWrite(1, LOW); // set the LED off
// initialize i2c as slave
Wire.begin(SLAVE_ADDRESS);
// define callbacks for i2c communication
Wire.onReceive(receiveData);
Wire.onRequest(sendData);
}
void loop() {
delay(100);
}
// callback for received data
void receiveData(int byteCount){
while(Wire.available()) {
number = Wire.receive();
if (number == 1){
if (state == 0){
digitalWrite(1, HIGH); // set the LED on
state = 1;
}
else{
digitalWrite(1, LOW); // set the LED off
state = 0;
}
}
}
}
// callback for sending data
void sendData(){
Wire.send(number);
}
import smbus
import time
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)
# This is the address we setup in the Arduino Program
address = 0x04
def writeNumber(value):
bus.write_byte(address, value)
# bus.write_byte_data(address, 0, value)
return -1
def readNumber():
number = bus.read_byte(address)
# number = bus.read_byte_data(address, 1)
return number
while True:
var = input("Enter 1 - 9: ")
if not var:
continue
writeNumber(var)
print "RPI: Hi Arduino, I sent you ", var
# sleep one second
time.sleep(1)
number = readNumber()
print "Arduino: Hey RPI, I received a digit ", number
print