Serial port 将数据从处理发送到arduino

Serial port 将数据从处理发送到arduino,serial-port,arduino,processing,serial-communication,Serial Port,Arduino,Processing,Serial Communication,我试图将70个值从处理发送到Arduino(尽可能快),以便Arduino用这些值提供伺服驱动器屏蔽。我在代码中试图做的是一个接一个地发送数据,每次收到一个值时,Arduino都会将该值确认给Processing,以便移动到下一个值。但是,我的代码不能正常工作。请看下面,看看我有什么错误,或者如果你有一个更好的解决方案的程序,请分享它!谢谢你抽出时间 阿杜伊诺代码 int-val[70]; 无效设置(){ Serial.begin(9600); } void循环(){ 串行写入(0); 对于(i

我试图将70个值从处理发送到Arduino(尽可能快),以便Arduino用这些值提供伺服驱动器屏蔽。我在代码中试图做的是一个接一个地发送数据,每次收到一个值时,Arduino都会将该值确认给Processing,以便移动到下一个值。但是,我的代码不能正常工作。请看下面,看看我有什么错误,或者如果你有一个更好的解决方案的程序,请分享它!谢谢你抽出时间

阿杜伊诺代码
int-val[70];
无效设置(){
Serial.begin(9600);
}
void循环(){
串行写入(0);
对于(int i=0;i0)
{ 
val[i]=Serial.read();
串行写入(i);
Serial.flush();
}
}
if(val[0]==1&val[1]==2)
{
序列号。打印号(“完成”);
}否则{
Serial.println(“错误”);
}
延迟(500);
}
处理代码
import processing.serial.*;
串行端口;
int last;
字节a[]={111、112、113、99、99、99、99、99、99、99、99、,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
99, 99, 99, 99, 99, 99, 99, 114, 115, 116 };
无效设置()
{
大小(200200);
字符串portName=Serial.list()[6];
myPort=新序列号(此端口名为9600);
延迟(2000年);
}
作废提款()
{
while(myPort.available()>0)
{

对于(int i=0;我会这么说的!除了“它不能正常工作”之外,你能更具体地说明你遇到的问题吗?此外,删除代码行之间多余的空行将使你的帖子更容易阅读。尽可能快地发送是违反直觉的,与发件人确认每个字节的数据:)只要让arduino以最快的速度读取字节,并按照您定义的逻辑处理它们就行了。此外,while(myPort.available()>=0)没有意义。如果没有可用的数据,while读取端口缓冲区?改为:while(myPort.available()>0)谢谢您的回复!我理解了我的错误(myPort.available()>0)。即使我没有确认每个值,我也必须在发送新值之前确认数据字符串已正确加载。有什么想法吗?好吧,你知道数据数组的大小。当数据到达Arduino时,将字节保存到一个类似的数组中。然后,当所有数据到达后,使用数据执行它们想要执行的操作要确认数据的有效性,一种方法是使用CRC对数据生成校验和。因此,在发送方发送数据之前,生成校验和,发送数据,发送校验和。在接收方,将数据保存在数组中,将校验和保存在变量中。然后对接收到的数据生成校验和。如果生成的结果为将收到的校验和与数据一致。
int val[70];
void setup()   {
  Serial.begin(9600);
}
void loop() {
 Serial.write(0);
   for (int i=0;i<70;i++){       
     if(Serial.available()>0)
{ 
     val[i]=Serial.read();
     Serial.write(i);     
     Serial.flush();        
   }
    }
if (val[0]==1 & val[1]==2)
{
    Serial.println("done");
} else {
    Serial.println("error");
  }
  delay(500);
}
import processing.serial.*;
Serial myPort;
int last;
byte a[] = { 111, 112, 113, 99, 99, 99, 99, 99, 99, 99,
             99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
             99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
             99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
             99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
             99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
             99, 99, 99, 99, 99, 99, 99, 114, 115, 116 };
void setup()
{
  size (200, 200);
  String portName = Serial.list()[6];
  myPort = new Serial (this, portName, 9600);
   delay(2000);
}
void draw()
{
  while (myPort.available()>0)
  {
    for (int i=0; i<70; i++)
    {
      last = myPort.read();
      if (int(last) == i-1)
      { 
        myPort.clear();
        myPort.write(a[i]);
      }
    }
  }
}