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

Parsing 将串行字符串数据解析为数组(VV到Arduino),parsing,arduino,serial-port,Parsing,Arduino,Serial Port,我目前在大学里从事一个arduino项目。基本上我想做的是从VVV向arduino发送一串数据,但是我需要将数据解析成一个数组,我完全不知道怎么做 从VVV发送的字符串如下所示:;U、 c,R,|,W,H,P和我每次都需要将这些值写入特定的伺服,所以值1需要转到伺服1,依此类推 这是我目前的代码,我意识到它的编码非常糟糕,我确实打算在我研究出如何解析数据后,使其更加有效 #include <Servo.h> Servo servo1; Servo servo2; Servo serv

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

从VVV发送的字符串如下所示:;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]);


}
}
#包括
伺服伺服1;
伺服2;
伺服3;
伺服4;
字符数组1[4]={0',0',0',0'}//midi变量数组
无效设置()
{
//开始串行通信
Serial.begin(9600);
伺服1.连接(2);
2.连接(3);
3.连接(4);
4.连接(5);
}
void循环(){
while(Serial.available()==0){
阵列1[0]=0;
阵列1[1]=0;
阵列1[2]=0;
阵列1[3]=0;
}
{
//检查是否已从计算机发送数据
如果(Serial.available()>=4){
对于(int i=0;i<4;i++)
array1[i]=Serial.read();
}
Serial.print(array1[0]);
串行打印(array1[1]);
串行打印(array1[2]);
串行打印(array1[3]);
伺服1.写入(array1[0]);
伺服2.写入(数组1[1]);
伺服3.写入(数组1[2]);
伺服4.写入(array1[3]);
}
}
编辑-我可能应该提到,我最终希望使用7伺服,但目前我只是在我的电路中使用4。另外,当我上传这个补丁并启用VVV时,arduino只是断开了连接

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

希望有帮助

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

我最近涉足了这一领域。Arduino在收到串行数据时自动复位 来自Arduino IDE以外的大多数事物的通信。这就是为什么 可以从IDE发送,但不能从node.js发送

我有一个Uno,在复位和接地之间放了一个电容器 页面上有一些关于这个主题的好信息。祝你好运


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

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();
}
if(Serial.available()>=3){
对于(i=0;i<4;i++){
数组[i]=Serial.read();
}
Serial.flush();
}

您好,谢谢您的帮助,但不幸的是,这并没有解决问题:(当我启用VVV补丁(开始发送数据)时,arduino会自动断开连接。你是对的,这是一个电源问题(男孩,我觉得很傻)似乎因为我当时只发送一个ascii字符,所以我可以让servo1读取字节1等等。如果我弄明白了,我会发布代码。再次感谢。)我猜,伺服使用更多的权力,然后是从USB端口可用。因此,当发送第一个字节且伺服打开时,电压下降,微动复位。