问题,没有返回数据!用usb-485设备正常,有返回数据,Arduino没有返回数据 返回如下 09:17:01.215 -> 开始发送控制命令。。 09:17:01.249 -> 1 09:17:01.249 -> 3 09:17:01.249 -> 0 09:17:01.249 -> 0 09:17:01.249 -> 0 09:17:01.249 -> 2 09:17:01.249 -> C4 09:17:01.249 -> B
命令举例
读取温度湿度:01 03 00 00 00 02 C4 0B (地址为1,读温度湿度值) 返回:01 03 04 00 B8 03 3F 3A F6 (对应温度:18.4℃,湿度83.1%)
代码如下 #include <SoftwareSerial.h> unsigned char item[8] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B}; //16进制测温命令 String data = ""; // 接收到的16进制字符串 SoftwareSerial tempSerial(8, 7); // RX, TX
float getTemp(String temperature); // 函数声明
void setup() { tempSerial.begin(9600); Serial.begin(9600); }
void loop() { delay(500); // 放慢输出频率 Serial.println("开始发送控制命令。。"); for (int i = 0 ; i < 8; i++) { // 发送测温命令 tempSerial.write(item); // write输出 Serial.println(item,HEX); } delay(100); // 等待测温数据返回 data = ""; while (tempSerial.available()) {//从串口中读取数据 unsigned char in = (unsigned char)tempSerial.read(); // read读取 Serial.print(in, HEX); Serial.print(','); data += in; data += ','; }
if (data.length() > 0) { //先输出一下接收到的数据 Serial.println(); Serial.println(data); Serial.print(getTemp(data)); Serial.println("Temp"); } }
float getTemp(String temp) { int commaPosition = -1; String info[9]; // 用字符串数组存储 for (int i = 0; i < 9; i++) { commaPosition = temp.indexOf(','); if (commaPosition != -1) { info = temp.substring(0, commaPosition); temp = temp.substring(commaPosition + 1, temp.length()); } else { if (temp.length() > 0) { // 最后一个会执行这个 info = temp.substring(0, commaPosition); } } } return (info[3].toInt() * 256 + info[4].toInt()) / 10.0;
}
|