(八)——與單片機通訊

2018-02-24 15:43 更新

原文出處:https://www.phodal.com/blog/bare-minimum-iot-system-mcu-commucation/

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

Arduino

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

那么讓我們先來看看我們寫的代碼。

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);
  }
}

這個代碼看上去似乎會有點復(fù)雜,但是讓我們看點基礎(chǔ)的,也就是由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
}

這個也就是來自于官方的示例程序,而我們要做的東西也和這個差不多,只是這個是自動的,上面那個是由串口通信來實現(xiàn)的。

串口通信

串行接口是一種可以將接受來自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)流發(fā)送出去,同時可將接受的串行數(shù)據(jù)流轉(zhuǎn)換為并行的數(shù)據(jù)字符供給CPU的器件。一般完成這種功能的電路,我們稱為串行接口電路。

簡單地來說,我們誻就是用這個來實現(xiàn)通信的,用之前的RaspberryPI 發(fā)送1和0給Arduino。那么我們在Arduino上就只是接受和執(zhí)行,這個由loop里面的if來執(zhí)行

初始化串口

如果你真心不喜歡51上的復(fù)雜的串口,那么我想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()

而下面的部分則是剛我們接收到的數(shù)據(jù)轉(zhuǎn)換為1,由于接到的為char類型,那么我們需要轉(zhuǎn)為轉(zhuǎn)為Int進行判斷。

為什么不直接用'1'

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

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號