首页 文章

通过C#将int发送到arduino

提问于
浏览
1

所以,我试图通过C#程序向一个arduino发送一个int . 我有C#程序和arduino互相交谈就好了 . 我可以发送单个ASCII字节,并让arduino做出反应;但是,当我尝试发送一个更大的值 - 比如35 - 我可以弄清楚如何让arduino从串口获取信息,将其转换为int,以便稍后我可以将该值用于某些数学函数 . 任何提示/代码?谢谢堆叠家伙! :)

4 回答

  • 0

    这里有一种伪代码,因为你说微通信是好的 . 关于arduino:

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

    你需要一种方法让arduino知道一个数字正在下线 . 假设您的号码打包在“数据包”中,如下所示:

    [I123]
    

    括号表示数据包的开始和结束,I表示整数是数据有效负载 . 所以在Serial.Read()函数中你必须测试数据包的开始([),然后测试表示整数(I)的下一个字符,然后剩余的字符应保存在缓冲区中但不包括(] ) . 然后使用value = atoi(缓冲区)获取值 .

    /*
     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';
        }
    
      }
    }
    
  • 0

    它取决于所需的协议 . 您想要一种紧凑的数据格式,还是想要一种人类可读/可写的格式?

    如果你选择紧凑的数据结构,你应该研究 serialization 的概念 . 如果您更喜欢易于阅读和手写的格式,那么您必须自己实施某种协议 . 首先,我想我会建议后者 .

    从可以将字符串打包成字符串的内容开始,然后将其提供给 atoi 函数 .

    对不起,这里不是预先解决的解决方案 .

  • 1

    您可能想要使用CmdMessenger library,或者您可能希望将有限状态机用作outlined hereimplemented in an example in my blog .

  • 0

    我已经回答了这个问题here . 你可以使用"atoi" . c#的代码非常简单 . 在我的回答/链接中,您可以找到Arduino的代码 . 基本上这是一个协议 .

相关问题