将串行字符串数据解析为数组(VVVV到Arduino)

时间:2012-05-06 20:08:57

标签: parsing arduino serial-port

我目前正在大学攻读arduino项目。基本上我要做的是将一串数据从VVVV发送到arduino,但是我需要将数据解析成一个数组,我完全不知道如何做到这一点!

从VVVV发送的字符串是这样的; U,c,R,|,W,H,P和I每次都需要将这些值中的每一个写入特定伺服,因此值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只是断开连接。

3 个答案:

答案 0 :(得分:1)

@ opc0de这个连续剧问题引起了很多困惑。包括对自己。可能类似的问题here

  

我最近涉足了这个问题。 Arduino收到串口后自动复位   来自Arduino IDE以外的大多数东西的通信。这就是为什么   您可以从IDE发送但不能发送node.js。

     

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

答案 1 :(得分:0)

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

希望它有所帮助!

答案 2 :(得分:0)

如果您希望在收到后立即分配值,则可以执行以下操作:

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