最近迷上了這個小東西,覺得還蠻有趣,以後可能會 POST 一些相關的測試上來。
先貼個 I2C 主從架構的連接通訊
主機是 UNO,從機是 Pro Mini
Pin 腳是固定的,接線(固定這樣接)
UNO --- Pro Mini
-------------------
A4 ------ A4 (SDA)
A5 ------ A5 (SCL)
5V ------ VCC
GND ------ GND
主機程式 (Master)
#include <Wire.h>
void setup(){
Wire.begin();
Serial.begin(9600);
Serial.println("Ready Master");
}
void loop(){
int val;
if(Serial.available()>0){
val=Serial.read();
if(val==49){//49='1'
Wire.beginTransmission(4);//connect to slave 4
Wire.write(1);
Wire.endTransmission();
Serial.println("49 TURN ON LED");
delay(10);
}else if(val==50){//2
Wire.beginTransmission(4);//connect to slave 4
Wire.write(0);
Wire.endTransmission();
Serial.println("50 TURN OFF LED");
delay(10);
}else{
Wire.beginTransmission(4);//connect to slave 4
Wire.write(val-48);
Wire.endTransmission();
Serial.print(val-48);
Serial.println(" <-- Undefine command."); }
}
}
從機程式 (Slave)
#include <Wire.h>
int pinLed = 13;
void setup(){
Wire.begin(4);
Wire.onReceive(rxEvent);
pinMode(pinLed,OUTPUT);
}
void loop(){
delay(100);
}
void rxEvent(int count){
int c = Wire.read();
if(c==1){
digitalWrite(pinLed,HIGH);
}else if(c==0){
digitalWrite(pinLed,LOW);
}else{
for(int i=0;i<c;i++){
digitalWrite(pinLed,HIGH);delay(300);
digitalWrite(pinLed,LOW);delay(300);
}
}
}
連線後,從主機打開串口視窗,從這發出命令,
輸入1,從機 LED 點亮
輸入2,從機 LED 熄滅
輸入其他,就一直走迴圈,亮到該鍵的數值走完為止。
沒有留言:
張貼留言
請提供您的寶貴意見 ;-)