Добрый день!
Помогите разобраться в проблеме получения ответа от устройства:
Устройство принимает и обрабатывает полученные данные, в ответ шлет тоже (смотрел ноутом при помощи USB-RS485 преобразователем)
Проблем в том, что я не пойму как мне получить ответ на ардуино и его обработать
Помогите разобраться в проблеме получения ответа от устройства:
Устройство принимает и обрабатывает полученные данные, в ответ шлет тоже (смотрел ноутом при помощи USB-RS485 преобразователем)
Проблем в том, что я не пойму как мне получить ответ на ардуино и его обработать
C++:
#include <SoftwareSerial.h>
SoftwareSerial RS485(36, 34); // RX, TX
uint8_t crc16storage[2];
char rs485_buffer[8];
void CRC16ModbusCalc(uint8_t frame[], uint8_t len, uint8_t crc16stor[]){
uint16_t crcReg = 0xFFFF;
for (uint8_t i = 0; i < len; i++){
crcReg ^= frame[i];
for (uint8_t j=0; j<8; j++){
if (crcReg & 0x01) {
crcReg = (crcReg >>=1) ^ 0xA001;
}
else crcReg >>= 1;
}
}
*crc16stor = crcReg & 0x00FF;
crc16stor ++;
*crc16stor = crcReg >> 8;
};
void rx(){
if(RS485.available()) {
int numberOfBytes = RS485.readBytes(rs485_buffer, 7);
Serial.println("--------------------------");
Serial.println("numberOfBytes: " + String(numberOfBytes));
Serial.println("data: ");
for(uint8_t i = 0; i < numberOfBytes; i++){
Serial.print(rs485_buffer[i], HEX);
}
Serial.println("--------------------------");
}
}
void setup() {
Serial.begin(9600);
RS485.begin(9600);
delay(1000);
uint8_t query[6] = {0x01, 0x03, 0x70, 0x01, 0x00, 0x01};
CRC16ModbusCalc(query, 6, crc16storage);
delay(10);
RS485.write(query, 6);
RS485.write(crc16storage, 2);
}
void loop() {
rx();
}
Изменено: