树莓派通过I2C总线控制Arduino点亮LED灯



上一篇博客写了树莓派和Arduino通过I2C总线进行通信[树莓派(pi3)和Arduino之间用I2C总线通信](http://blog.csdn.net/u010667011/article/details/61922127)
书接上文,今天说一个简单的pi和Arduino通信的实例,树莓派通过I2C控制Arduino点亮LED灯。
树莓派和Arduino之间怎么连线见上一篇博客。准备好面包板,LED灯,电阻。连线如下图所示:
图片来源:http://www.51hei.com/bbs/dpj-41337-1.html

树莓派通过I2C总线控制Arduino点亮LED灯_第1张图片

 

Arduino代码如下:

#include 
#define SLAVE_ADDRESS 0x55
int led = 13;  // 定义针脚号,数字类型为整型
int number ;
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  Wire.begin(SLAVE_ADDRESS);
  Wire.onReceive(receiveData);//从机 接收 主机 发来的数据
  Wire.onRequest(sendData); //从机 请求 主机 发送数据
 Serial.println("OK......");
}
void loop() {
  delay(1000);
}
void receiveData(int byteCount){
while(Wire.available()) {
number = Wire.read();
Serial.print("command received: ");
Serial.println(number);
if (number >= 125)
 digitalWrite(13, LOW); // set the LED on
 else{
 digitalWrite(13, HIGH);
 }
 }
 }
 void sendData(){
 Wire.write(number);
 }

上次树莓派端用的是python,这次改为C代码,用到了树莓派的wiringPiI2C库。

#include 
#include 
int main(void)
{
        int value,back_val;
        const int devId = 0x55;
        int fd = wiringPiI2CSetup(devId);
        if (fd < 0) {
                printf("Error setup I2C device %d\n", devId);
                return 1;
        }
        while(1){
	printf("please enter a number(0-255):\n");
	scanf("%d",&value);
	wiringPiI2CWrite(fd,value);
	printf("RPI:Hello Arduino ,I send a digital %d\n",value);
	back_val=wiringPiI2CRead(fd);
	printf("back_val=%d\n",back_val);
	}
        return 0;
}


 在树莓派命令行下运行程序,不要忘了加上       -lwiringPi

树莓派通过I2C总线控制Arduino点亮LED灯_第2张图片

程序的功能是:树莓派向Arduino发送一个数字命令,Arduino判断这个数字的大小,大于等于125则将13号引脚置为低电平,否则就是高电平点亮LED。

 

 

 


 

你可能感兴趣的:(树莓派)