Serial port arduino使用RS485发送十六进制帧
嗨,我有一个莱昂纳多,我正在尝试与一个设备进行通信。我需要发送以下十六进制代码 FF 01 AA 我试图将它存储为一个字节数组并在其中循环,但它似乎不起作用。我还期待着设备的回复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() {
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个字节。