我是Arduino的新手,也是编程方面的新手。我试图通过UDP向MaxMSP发送一个整数数组。使用WiFiUDP库中的.print方法可以为每个数据包发送一个整数:
void loop() {
Udp.beginPacket(hostIP, HOST_PORT);
Udp.print("start");
for (int i = 0; i < NUMBER_OF_SENSORS; i++) {
int adcValue = analogRead(i);
Udp.print(adcValue);
}
Udp.endPacket();
Udp.flush();
}
问题是这很慢。我在Max端为每个传感器获得大约10 ms的刷新率,我假设通过将所有整数(此刻只有4个)写入单个缓冲区并将其发送到它自己的数据包,我能够将速度提高四倍。我试过这个:
void loop() {
byte sensorBuffer [NUMBER_OF_SENSORS * 2];
for (int i = 0; i < NUMBER_OF_SENSORS; i++) {
int adcValue = analogRead(i);
sensorBuffer[i*2] = highByte(adcValue);
sensorBuffer[i*2+1] = lowByte(adcValue);
}
Udp.beginPacket(hostIP, HOST_PORT);
Udp.write(sensorBuffer, NUMBER_OF_SENSORS * 2);
Udp.endPacket();
Udp.flush();
}
这会在Max端产生垃圾。我有一个模糊的想法为什么会这样 - 数组被格式化为7位ASCII值? - 但我还没有弄清楚如何让它发挥作用。任何意见都非常感谢。
答案 0 :(得分:-1)
你需要在void循环中给出一个适当的延迟,因为它需要一个确定的时间来形成一个数据包并且void循环运行得很快并且一些数据包可能会丢失或甚至不会形成