Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Serial port arduino使用RS485发送十六进制帧_Serial Port_Arduino - Fatal编程技术网

Serial port arduino使用RS485发送十六进制帧

Serial port arduino使用RS485发送十六进制帧,serial-port,arduino,Serial Port,Arduino,嗨,我有一个莱昂纳多,我正在尝试与一个设备进行通信。我需要发送以下十六进制代码 FF 01 AA 我试图将它存储为一个字节数组并在其中循环,但它似乎不起作用。我还期待着设备的回复 int byteReceived; int byteSend; int byteSentSuccessfully; uint8_t byteToSend[3] = { 0xFF, 0x01, 0xAA, }; char buffer[8]; void setup() {

嗨,我有一个莱昂纳多,我正在尝试与一个设备进行通信。我需要发送以下十六进制代码 FF 01 AA 我试图将它存储为一个字节数组并在其中循环,但它似乎不起作用。我还期待着设备的回复

int byteReceived;
int byteSend;
int byteSentSuccessfully;
uint8_t byteToSend[3] = {
       0xFF,
  0x01,
  0xAA,

    };
   char buffer[8];
void setup()   
{
  // Start the hardware serial
  Serial1.begin(9600);

}

void  loop()
{
  byteSentSuccessfully = Serial1.write(byteToSend,sizeof(byteToSend));
  if (byteSentSuccessfully)
  {
    Serial.println("Wrote to device");

  }

  if (Serial1.available()){

    byteReceived = Serial1.readBytes( buffer,sizeof(buffer)); 
    if (byteReceived){
      Serial.println("She is talking to me");//check on com port

    }
  }
}//END OF MAIN LOOP

我也试着用一个字符发送它,但没有运气-

void setup() {
  Serial.begin(9600);
delay(10000);//enough time to start up my com port monitor
  String myStr = "FF0101AAAC";
  char* buffer = (char*) malloc(sizeof(char)*myStr.length()+1);

  Serial.println("Using toCharArray");
  myStr.toCharArray(buffer, myStr.length()+1);

  Serial.println(buffer);

  free(buffer);

  Serial1.write(buffer);
}

void loop() {
 //only need to do this once

}
你试过了吗

而(!Serial1){}

在Serial1.0之后,是否在设置循环中开始


此外,如果您试图通过RS485与设备通信,您使用的转换器是什么?

是否收到错误消息或什么都没有?如果你有错误信息,你应该发布它。谢谢回复。没有错误,机器只是没有响应。当我使用RS485将相同的代码发送到Realterm的USB时,它工作正常。所以我认为这与我发送的格式有关。也许Arduino使用串行发送的数据被转换为ASCII?我不知道如何找到答案。我不熟悉arduino编程,但我有java等方面的经验。是的,谢谢。我尝试了if Serial1.available(),然后写入等。我使用的RS485转换器是来自sparkfun的RS485屏蔽DEV-11959。它安装在arduino的顶部,我将设备的两根电线连接到屏蔽上的A&B点。我假设板载芯片将该RS485数据转换为arduino可读的串行格式,并将其输入硬件RX/TX。也许我天真地假设这一点?不幸的是,关于这个屏蔽的文档并不多。再加上我的经验不足,这是一个需要克服的挑战。这个屏蔽确实会将转换后的串行发送到Tx/Rx引脚。您是否尝试过使用Serial.write()而不是Serial.print()发送十六进制数?是的,我使用了Serial1.write()-就像上面的代码-Serial1.write(byteToSend,sizeof(byteToSend));我还尝试在for循环中遍历数组,并一次写入1个字节。