Arduino RS485 и I2C одновременно
У меня есть Arduino NANO, подключенная к ПЛК Domat MarkMMX через RS485 (TX1, RX0). Для чтения данных/регистров в ПЛК используется протокол Modbus RTU. Работает нормально. Но когда я подключаю датчик освещенности (со связью I2C) и меняю код на считываемое значение, связь Modbus RS485 в это время зависает.
Кто-нибудь может мне помочь? Спасибо.
Датчик освещенности BH1750 подключен к A4 и A5. Преобразователь TTL в RS485 подключен как TX1 - DI, RX0 - RO, DE,RE - D4.
Сокращенный код:
#include <BH1750.h>
#include<ModbusRtu.h>
#include <Wire.h>
BH1750 lightMeter;
float lux;
Modbus bus;
uint16_t modbus_array[] = {180,20,40};
void setup()
{
Wire.begin();
bus = Modbus(10,1,4);
bus.begin(19200);
}
void loop()
{
lux = lightMeter.readLightLevel();
bus.poll(modbus_array,sizeof(modbus_array)/sizeof(modbus_array[0]));
modbus_array[2] = lux;
if (modbus_array[0] == 300)
{
digitalWrite(led1,LOW);
}
else
{
digitalWrite(led1,HIGH);
}
}
@miluk, 👍0
Обсуждение0
Смотрите также:
- Как перевести Arduino Nano в спящий режим с низким энергопотреблением (<0,05 мА)
- MAX30100 не работает
- Ведомое устройство Arduino с двумя мастерами, использующими одну и ту же шину I2C?
- Подключение нескольких RS485 вместе
- Библиотека I2C MIFARE RC522
- Не удалось выделить SSD1306 при добавлении константы
- Сброс адреса I2c — MLX90614
- SSD1306 распознается сканером I2C, но не может его отобразить
как узнать, что зависает модусная связь?, @jsotola
На этом ПЛК показано, что данные Arduino недоступны, а на Arduino светодиод TX все еще горит, просто мигает RX. Когда я стираю эту команду для чтения значения освещенности, светодиоды мигают., @miluk
что произойдет, если вы удалите только
modbus_array[2] = lux;
?, @jsotolaНичего такого. Ардуино ведет себя так же. Я просто добавил один цикл, чтобы мигать светодиодом. Когда в коде есть функция чтения света, светодиод не мигает. Так что я думаю, что вся программа остановилась????, @miluk
а датчик I2C без модбуса работает?, @Juraj
Да, без Modbus работает нормально., @miluk
это может быть вызвано помехами... нашел это... https://forum.arduino.cc/t/i2c-interference-by-serial-communication/279424/3, @jsotola
Хорошо, я проверю это. Спасибо, пока., @miluk
О каком "Нано" вы говорите и о какой библиотеке? Потому что [это] (https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino/blob/d98f14f/ModbusRtu.h#L272-L283), которое вы, похоже, используете с
bus = Modbus( 10,1,4);
вообще не может работать с оригинальным Nano (который, кажется, помечен). У обычного Nano нет Serial1. Если вам удалось при прочих равных работать без датчика освещенности, то либо это не та библиотека, которую вы используете, либо упомянутая плата не та, которую вы используете., @timemageПривет. Честно говоря, я не могу сказать, что понимаю это ясно, но теперь все работает нормально. У меня есть NANO, и я использую эту процедуру для связи по Modbus. Когда я контролировал последовательный порт, иногда появлялось сообщение: **Устройство не настроено**. Когда я проверил форум, я нашел информацию и использовал
lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE, 0x5C, &Wire);
вместоlightMeter.begin();
, и я подключаю вывод ADD к 5V для выбора адреса. Спасибо всем., @miluk