ArduinoをA/D変換などのデコーダやモータードライバとして使うために、ラズパイからArduinoに指令を出せるようにしました。
1.配線
今回はラズパイの3B+での配線なので、パターンが違う別のボードではつなぐピンが違うので気を付けてください。
図のように配線すると、SDA,SCL,GND同士をつなぐことができます。

2. Arduinoのプログラム
このあいだArduino-Arduino間のI2Cをした時のプログラムと大体同じ感じになってます。
1.配線
今回はラズパイの3B+での配線なので、パターンが違う別のボードではつなぐピンが違うので気を付けてください。
図のように配線すると、SDA,SCL,GND同士をつなぐことができます。

2. Arduinoのプログラム
このあいだArduino-Arduino間のI2Cをした時のプログラムと大体同じ感じになってます。
#include <Wire.h>
int add = 0x04; //I2Cのアドレスを0x04に設定
int out = 13;
int Ain = A0;
boolean toggle = false; //LEDの点灯制御用
void setup(){
pinMode(out, OUTPUT);
//I2C接続を開始する
Wire.begin(add);
//Raspberry Piから何かを受け取るたび、receive関数を呼び出す
Wire.onReceive(receive);
//Raspberry Piから要求された場合に、send関数を呼び出す
Wire.onRequest(send);
}
void loop(){
}
void receive(int n){
char ch = Wire.read();
if (ch == '1'){
LED();
}
}
//LEDの点灯・消灯用の関数
void LED(){
toggle = !toggle; //trueとfalseの入れ替え
digitalWrite(out, toggle);
}
//Analogピンの数値を読み、Raspberry Piに送る
void send(){
int reading = analogRead(Ain);
Wire.write(reading >> 2); //ビットを2つ右にずらした数値を送る
}
3.Raspberry Piのプログラム
これはとても簡単で、shellに打ち込まれた文字によってArduinoに対する出力を変えることと、Arduinoからの入力を表示することを行っています。
3.Raspberry Piのプログラム
これはとても簡単で、shellに打ち込まれた文字によってArduinoに対する出力を変えることと、Arduinoからの入力を表示することを行っています。
import smbus
import time
bus = smbus.SMBus(1)
add = 0x04
def request_reading():
reading = int(bus.read_byte(add))
print(reading)
while True:
command = input("Enter command: 1-Toggle LED, r-read A0:")
if command == '1':
bus.write_byte(add, ord('1'))
elif command == 'r':
request_reading()