Доброго времени суток, есть вопрос по работе modbus. Есть система из малинки и дуи соединенная через rs485. Не идет сигнал не rx не tx , нужно и получать и отправлять значения, подскажите как с этим сдюжить. Прикрепляю код
#include <microDS18B20.h>
#include <ModbusRtu.h>
constexpr int sensorPin1 = 22;
constexpr int sensorPin2 = 23;
constexpr int sensorPin3 = 24;
constexpr int sensorPin4 = 25;
MicroDS18B20<sensorPin1> sensor1;
MicroDS18B20<sensorPin2> sensor2;
MicroDS18B20<sensorPin3> sensor3;
MicroDS18B20<sensorPin4> sensor4;
float temperature1 = 0.0;
float temperature2 = 0.0;
float temperature3 = 0.0;
float temperature4 = 0.0;
uint16_t au16data[5];
// Инициализируем объект Modbus с использованием UART1 (Serial1) и пинов для управления направлением передачи (TXEN)
Modbus slave(1, Serial1, 2); // this is slave @1 and RS-485
void setup() {
Serial1.begin(57600); // Инициализируем Serial1 на скорости 19200 бод
slave.start();
}
void loop() {
// Запрашиваем температуру с каждого датчика
sensor1.requestTemp();
if (sensor1.readTemp()) temperature1 = sensor1.getTemp();
sensor2.requestTemp();
if (sensor2.readTemp()) temperature2 = sensor2.getTemp();
sensor3.requestTemp();
if (sensor3.readTemp()) temperature3 = sensor3.getTemp();
sensor4.requestTemp();
if (sensor4.readTemp()) temperature4 = sensor4.getTemp();
// Считываем и выводим температуру с каждого датчика
au16data[0] = static_cast<uint16_t>(temperature1 * 100);
au16data[1] = static_cast<uint16_t>(temperature2 * 100);
au16data[2] = static_cast<uint16_t>(temperature3 * 100);
au16data[3] = static_cast<uint16_t>(temperature4 * 100);
if (slave.poll(au16data, 5) > 0){}
}
Данный код отлично работает на uno но никак не хочет работать с дуе
я уверен, что гайверовское поделие не рассчитано на работу с Дуе и будет глючить.
Основная идея использования “микро-” библиотек от Гайвера - экономия места. Но на Дуе его хоть попой ешь… извините. Зачем вам этот гемор, возьмите стандартную библиотеку.