【问题标题】:Parsing serial string data into an array (VVVV to Arduino)将串行字符串数据解析成数组(VVVV to Arduino)
【发布时间】:2012-05-15 11:25:09
【问题描述】:

我目前正在大学从事一个 arduino 项目。基本上我想做的是将一串数据从 VVVV 发送到 arduino,但是我需要将数据解析成一个数组,我完全不知道该怎么做!

从 VVVV 发送的字符串是这样的; U,c,R,|,W,H,P 并且我每次都需要将这些值中的每一个写入特定的伺服,因此值 1 需要转到伺服 1,依此类推。

这是我目前的代码,我意识到它的编码很糟糕,我打算在弄清楚如何解析数据后让它更高效。

#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

char array1[4] = { '0', '0', '0', '0'}; //array for midi variables

void setup()
{
 // begin the serial communication
 Serial.begin(9600);

 servo1.attach(2);
 servo2.attach(3);
 servo3.attach(4);
 servo4.attach(5);

}

void loop(){
  while (Serial.available() == 0)  {
    array1[0] = 0;
    array1[1] = 0;
    array1[2] = 0;
    array1[3] = 0;
  }

{


 // check if data has been sent from the computer
 if (Serial.available() >= 4) {
    for ( int i = 0; i < 4; i++)
    array1[i] = Serial.read();


  }


   Serial.print(array1[0]);
   Serial.print(array1[1]);
   Serial.print(array1[2]);
   Serial.print(array1[3]);



   servo1.write(array1[0]);
   servo2.write(array1[1]);
   servo3.write(array1[2]);
   servo4.write(array1[3]);


}
}

编辑 - 我可能应该提到我最终希望使用 7 个伺服系统,但目前我只在我的电路中使用 4 个。另外,当我上传这个补丁并启用 VVVV 时,arduino 只是断开连接。

【问题讨论】:

    标签: parsing arduino serial-port


    【解决方案1】:
    if (Serial.available() > 3)
    {
        for (int i=0; i < 4 ; i++)
        {
            array[i] = Serial.read();
        }
        Serial.flush();
    }
    

    希望对你有帮助!

    【讨论】:

    • 您好,感谢您的帮助,但不幸的是,这并没有解决问题。 :( 当我启用 VVVV 补丁(开始发送数据)时,arduino 会自行断开连接。
    • 你说得对,这是一个电源问题(男孩,我觉得很傻)似乎因为我当时只发送一个 ascii 字符,我只能让伺服 1 读取 byte1 等等.当/如果我弄清楚时,我会发布代码。再次感谢。 :)
    • 我猜伺服器使用的功率比 USB 端口的功率大。因此,当发送第一个字节并且伺服打开时,电压下降并且微复位。
    【解决方案2】:

    @opc0de 这个系列问题引起了很多混乱。包括对我自己。可能类似问题here

    我最近涉足这个领域。 Arduino收到串口后会自动重置 与 Arduino IDE 以外的大多数事物进行通信。这就是为什么 您可以从 IDE 发送,但不能从 node.js 发送。

    我有一个 Uno,并在 Reset 和 Ground 之间放置了一个电容器。这是一个 页面上有一些关于这个主题的好信息。祝你好运。 http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

    【讨论】:

      【解决方案3】:

      如果您想在收到后立即分配值,您可以这样做:

      if(Serial.available() >= 3) {
      
          servo1.write(Serial.read());
          servo2.write(Serial.read());
          servo3.write(Serial.read());
          servo4.write(Serial.read());
      
          Serial.flush();
      }
      

      如果您希望将接收到的值存储在数组中以便稍后执行更多操作,那么:

      if(Serial.available() >= 3) {
      
          for(i = 0; i < 4; i ++) {
      
              array[i] = Serial.read();
          }
          Serial.flush();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        相关资源
        最近更新 更多