簡體   English   中英

通過C#將int發送到arduino

[英]Sending int to arduino through C#

因此,我試圖通過C#程序將int發送到arduino。 我有C#程序和arduino互相交談就很好。 我可以很好地發送單個ASCII字節,並讓arduino做出反應; 但是,當我嘗試發送一個較大的值(例如35)時,我可以弄清楚如何獲取arduino來從串行端口獲取該信息,並將其轉換為int,以便以后可以將該值用於一些數學函數。 有提示/代碼嗎? 謝謝堆疊的家伙! :)

這是一種偽代碼,因為您聲明與微指令的通信是好的。 在arduino上:

    char buffer[5]; // or 6 or 7 or... To store numerical chars

您需要一種讓arduino知道某個數字即將降臨的方法。 假設您的電話號碼打包在一個“數據包”中,如下所示:

    [I123]

方括號表示數據包的開始和結束,I表示整數,即數據有效載荷。 因此,在Serial.Read()函數中,您必須測試數據包的開始([),然后測試指示整數(I)的下一個字符,然后其余字符應保存在緩沖區中,最多但不包括(] )。 然后使用value = atoi(buffer)獲得該值。

/*
 Simple code to read in an integer value sent over the Serial port.
 */

char ch;         // incoming serial character

char chStartPacket = '[';
char chEndpacket =']';
char integerDataType = 'I';
char buf[10];
int index = 0;
int intValue = 0;

void setup()
{
  // start serial port at 9600 bps:
  Serial.begin(9600);

}

void loop()
{
  // assume packet of format [Xddd], where X is packet data type, ddd is data payload
  // this is code which compiles, but not tested. Neither is any check done on the payload data 
  // to ensure good data

  if(Serial.available() > 0){

    if(Serial.peek() == chStartPacket ){
      index = 0;                                // reset index of next integer in buffer
      Serial.read();                            // get rid of start of packet in serial port buffer
    }  
    else if (Serial.peek()  == integerDataType){
      Serial.read();                           // get rid of data type character in serial port buffer
    }
    else if (Serial.peek() == chEndpacket){    // all data received, get integer value
      Serial.read();                           // get rid of end of packet in serial port buffer
      intValue = atoi(buf);
      Serial.println(intValue);                // for visual feedback
    }
    else{                                      //must be payload data, add to buffer
      buf[index] = Serial.read();
      index++;
      buf[index] = '\0';
    }

  }
}

它在某種程度上取決於所需的協議。 您是要使用緊湊的數據格式,還是要使用人類可讀/可寫的格式?

如果您選擇緊湊的數據結構,則應考慮序列化的概念。 如果您希望使用易於讀寫的格式,則必須自行實現某種協議。 首先,我認為我會建議稍后。

從可以將字符流打包成字符串的東西開始,然后將其提供給atoi函數。

抱歉,這里不是預先准備好的解決方案。

您可能想要使用CmdMessenger庫,或者想要使用此處概述在我的博客中的示例中實現的有限狀態機。

我已經在這里回答了這個問題。 您可以使用“ atoi”。 C#的代碼非常簡單。 在我的答案/鏈接中,您找到了Arduino的代碼。 基本上,這充當協議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM