最小物聯網系統(八)——與微控制器通訊

Phodal發表於2014-03-06

在我們完成了前面的幾部分之後,我們也需要把這最後一部分解決,這裡更多的是硬體,Arduino的存在可以讓硬體更簡單。

Arduino

Arduino 是一款便捷靈活、方便上手的開源電子原型平臺,包含硬體(各種型號的arduino板)和軟體(arduino IDE)。它適用於藝術家、設計師、愛好者和對於“互動”有興趣的朋友們。

那麼讓我們先來看看我們寫的程式碼。

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
}

int serialData;
void loop() {
  String inString = "";
  while (Serial.available()> 0)
  {
    int inChar = Serial.read();
    if (isDigit(inChar)) {
      inString += (char)inChar; 
    }
    serialData=inString.toInt();
    Serial.print(serialData);
  }
  if(serialData==1){
    digitalWrite(13,HIGH);
  }else{
    digitalWrite(13,LOW);
  }
}

這個程式碼看上去似乎會有點複雜,但是讓我們看點基礎的,也就是由Arduino來控制一個LED的亮和滅。

int led = 13;

void setup() {                
  pinMode(led, OUTPUT);     
}

void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

這個也就是來自於官方的示例程式,而我們要做的東西也和這個差不多,只是這個是自動的,上面那個是由串列埠通訊來實現的。

串列埠通訊

序列介面是一種可以將接受來自CPU的並行資料字元轉換為連續的序列資料流傳送出去,同時可將接受的序列資料流轉換為並行的資料字元供給CPU的器件。一般完成這種功能的電路,我們稱為序列介面電路。

簡單地來說,我們誻就是用這個來實現通訊的,用之前的RaspberryPI 傳送1和0給Arduino。那麼我們在Arduino上就只是接受和執行,這個由loop裡面的if來執行

初始化串列埠

如果你真心不喜歡51上的複雜的串列埠,那麼我想Arduino又是解放雙手的東西了。

 Serial.begin(9600);

這個就是串列埠初始化,速率為9600。

串列埠讀取

 while (Serial.available()<0)
  {
    int inChar = Serial.read();
    if (isDigit(inChar)) {
      inString += (char)inChar; 
    }
    serialData=inString.toInt();

用於讀取的就是這麼一行

 int inChar=Serial.read()

而下面的部分則是剛我們接收到的資料轉換為1,由於接到的為char型別,那麼我們需要轉為轉為Int進行判斷。

為什麼不直接用'1'

只是為了寫給需要的同學用的,也可以直接在上面用if(serialData=='1'),上面寫可以讓後期擴充套件的時候方便一點。

相關文章