2015-09-11 32 views
0

嗨這是我第一次發佈,所以忍受着我。Arduino兆到2倍UNO在串行

我的問題是與Arduino Mega和2x Arduino UNO之間的串行通信。

我的設置包括一個兆作爲我的主設備和1x UNO + Adafruit的隔音罩& 1X UNO + Adafruit的電機盾。我有他們通過串行端口,即Serial1 RxTx在UNO上的大型串行TxRx和同樣再次爲Serial2爲其他UNO,(我有x2 UNO的兩個sheild佔用整個UNO的PWM引腳)

Serial.begin(9600); //<--mega// 
Serial1.begin(9600); //<--mega// 
Serial2.begin(9600); //<--mega// 
Serial.begin(9600); //<--UNO Sound// 
Serial.begin(9600); //<--UNO motor// 

兆碼:

Serial.println("Entering While loop1");    // Debug // 

    while(CommFlag1 == 0){ 


    while (Serial2.available()){ 

     SerialReceive2 = Serial2.read(); 
     RxContent2.concat(SerialReceive2);             //Store Content of Serial Data into Global Variable// 
     delay(10); 
    } 


    Serial.print("Sound MCU: ");              // Debug // 
    Serial.println(RxContent2);              // Debug // 
    delay(100);                  // Debug // 




    if (RxContent2 == "Alive$$$") { 
     Serial2.println("CommEst"); 
     Serial.println("Alive Response Recieved Sound MCU");       // Debug // 
     RxContent2 = ""; 
     CommFlag1 = 1; 
     } 
    } 


     Serial.println("Entering While loop2");           // Debug // 

     while(CommFlag2 == 0){ 

     while (Serial1.available()){ 
      SerialReceive1 = Serial1.read();         //Store Content of Serial Data into Global Variable// 
      RxContent1.concat(SerialReceive1); 
      delay(10);  
     } 

      Serial.print("Motor MCU: ");            // Debug //        
      Serial.println(RxContent1);             // Debug // 
      delay(100);                 // Debug // 

      if (RxContent1 == "Alive"){ 
      Serial1.println("CommEst"); 
      Serial.println("Alive Response Recieved Motor MCU"); 
      RxContent1 = ""; 
      CommFlag2 = 1; 
      } 
     } 

UNO碼(兩者都是除了Serial.print聲明這是活着的電機一樣):

Serial.println("Alive$$$"); 

while(CommFlag == 0){ 

delay(250); 
    while (Serial.available()){ 
     SerialReceive = Serial.read(); 
     RxContent.concat(SerialReceive); 
      delay(50); 


     if (RxContent == "CommEst"){ 

     CommFlag = 1; 
     RxContent = ""; 

     } 
    } 
} 

在串行窗口,我可以看到UNO的「一個Live $$$「響應當PC連接到USB(串行)在兆,但巨型似乎並不接受響應值,並不執行if語句?

我做錯了什麼?任何幫助將不勝感激!

豐富

回答

0

在UNO的代碼通過使用Serial.println(),這意味着該字符串是\ r \ n字符的前綴字符串發送。但是,當你比較不是以\ r \ n結尾時。請在比較字符串末尾加\ r \ n來更改語句。

if (RxContent2 == "Alive$$$\r\n") 

和UNO

if (RxContent1 == "Alive\r\n") 

或更改代碼打印不調用println

Serial.print("Alive$$$"); 

Serial.print("Alive"); 
+0

嗨Adisak,遲來的謝謝你的建議,我有終於嘗試過,現在它在UNO上工作聲音控制,但我還沒有能夠在UNO上進行電機控制。 兩者之間的唯一區別在於聲音UNO是在子程序中執行的,該子程序在安裝中打開串口後執行,並且電機不是子程序,並且直接在串口初始化之後? 你認爲這會有所作爲嗎? –

+0

motor uno code: Serial.println(「Alive」); 主控代碼: 如果(RxContent1 ==「活着\ r \ n」){} ..... 我在主控制這下面的代碼,所以我可以看到什麼是從電機UNO 未來Serial.print(「Motor MCU:」); Serial.println(RxContent1); 我串行窗口上得到什麼: 汽車MCU: 活着 這是因爲如果它的接收\ r \ n輸入文本字符串前面,但我的代碼不應該這樣做呢? 你認爲可能是什麼原因?或者這可能是初始化串行端口時的時間問題? 任何援助將不勝感激。 Thanks Rich –