kowala's home

kowala's home
這裡是我的學習筆記,陸續增加中。
http://kowala21.blogspot.com

2014-03-19

Arduino I2C Test

最近迷上了這個小東西,覺得還蠻有趣,以後可能會 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 熄滅
輸入其他,就一直走迴圈,亮到該鍵的數值走完為止。


沒有留言:

張貼留言

請提供您的寶貴意見 ;-)