Arduino UDP 接收组合的 ASCII 和十六进制代码

问题描述 投票:0回答:0

我目前正在做一个更大的 LEDCube 项目,其中的一个组成部分是让它通过 UDP 进行通信,这样它的颜色就可以即时设置。为此,我制作了以下命令的 UDP 数据包布局:

模式:# 重置 数据:十六进制

我面临的问题是数据命令在它真正应该什么都不画的时候画出乱码。传递 00 00 00 结果是彩色立方体,而不是黑色。

UDP解码的代码片段如下。

void processUDPPacket(){
int packetSize = Udp.parsePacket();
if (packetSize) {
  if(DEBUG){
  Serial.print("Received packet of size ");
  Serial.println(packetSize);
  Serial.print("From ");
  IPAddress remoteIp = Udp.remoteIP();
  Serial.print(remoteIp);
  Serial.print(", port ");
  Serial.println(Udp.remotePort());
}
// read the packet into packetBufffer
int len = Udp.read(packetBuffer, 255);
if (len > 0) {
  packetBuffer[len] = 0;
}




if(DEBUG){
  Serial.println("Contents:");
  Serial.println(packetBuffer);
  for(int i = 0; i< 255; i++){
    Serial.print((int)packetBuffer[i],HEX);
  }
  Serial.println();
}


char *command  = strtok(packetBuffer,":"); //pointer to array containing command word
char *payload = strtok(NULL,":"); //pointer to array containing payload 


if(strcmp(command,"mode")==0){
    mode = atoi(payload); //char array to int
    modeSelect();
  }

if(mode == MODE_UDP){
  //command is reset, reset
  if(strcmp(command,"reset")==0){
    reset();
  }
  else if(strcmp(command,"data")==0){

    for(int i = 0; i< NUM_LEDs; i++){
      int r = payload[3*i + 0];
      int g = payload[3*i + 1];
      int b = payload[3*i + 2];
      rCurr[i] = map(r, 0,255, 0, MAX_BRIGHTNESS);
      gCurr[i] = map(g, 0,255, 0, MAX_BRIGHTNESS);
      bCurr[i] = map(b, 0,255, 0, MAX_BRIGHTNESS);
      
      if(DEBUG){
        Serial.print(r);
        Serial.print(",");
        Serial.print(g);
        Serial.print(",");
        Serial.println(b);
      }
    }
  }

}

// send a reply, to the IP address and port that sent us the packet we received
Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
Udp.write(ReplyBuffer);
Udp.endPacket();
}
}

Writeback 工作正常,但那只是字符串。

arduino udp
© www.soinside.com 2019 - 2024. All rights reserved.