ПОМОЩЬ! новичку 55 летнему!

упппсссс :)))

1 лайк

бывает, чо…

Шо, так и не осилил как код правильно вставить? Однако ж…

У вас IE6/отключены стили/отключен Javascript или вы правда не видите разницы

правильней видимо гнать сырые данные. а на приёмной стороне произвести математику

1 лайк

Чуется мне, что Ваша схема чертовски небезопасная. Вы чего - фазу на пин подаёте? Прекратите немедлянно!

#include <ModbusRtu.h>

#define ID   1      // адрес ведомого
#define btnPin  2   // номер входа, подключенный к кнопке
#define stlPin  13  // номер выхода индикатора работы расположен на плате Arduino

const int POT0 = 0;
float adc_voltage0 = 0.0;            // Создаем переменную adc_voltage0
float in_voltage0 = 0.0;             // Создаем переменную in_voltage0
float R01 = 30000.0;                 // Задаем номинал резистора R01
float R02 = 7500.0;                  // Задаем номинал резистора R02
float ref_voltage0 = 5.0;            // Задаем опорное напряжение
int adc_value0 = 0;                  // Создаем переменную для хранения показаний

//Задаём ведомому адрес, последовательный порт, выход управления TX
Modbus slave(ID, 0, 0);
int8_t state = 0;
unsigned long tempus; // массив данных modbus
uint16_t au16data[40];
void setup() {   // настраиваем входы и выходы
  io_setup();   // настраиваем последовательный порт ведомого
  slave.begin( 19200 );
}

void io_setup() {
  pinMode(btnPin, INPUT);
io_poll(); }

}
void io_poll() {
  //Копируем Coil[1] в Discrete[0]
  au16data[0] = au16data[1];
  //Выводим значение регистра 1.3 на светодиод
  void loop() {
    // обработка сообщений
    adc_value0 = analogRead(POT0);               // Считываем показания с аналогово вывода
    adc_voltage0 = (adc_value0 * ref_voltage0) / 1024.00; // Определение на входе АЦП
    in_voltage0 = adc_voltage0 / (R02 / (R01 + R02));     // Расчет напряжения

    state = slave.poll( au16data, 40 );
    //Сохраняем состояние кнопки в регистр 0.3
    bitWrite( au16data[0], 2, digitalRead( 2 )); // загружаем в регистр с адресом 2, бит состояния с цифрового входа ардуино 2

    au16data[10] = in_voltage0;  // загружаем в регистр с адресом 10, данные (напряжение) с аналогового входа ардуино А0 (const int POT0 = 0;)
  }

я исправился?
может кто продолжит беседу по сути вопроса?

В любом случае на ножки ардуины более 5В я подавать не буду. Для измерения необходимых мне 48В использую резистивные делители

Почитай про типы данных. Особенно модбус. Я с ним не работа, но думаю форматы / данные нужно четко соблюдать. В коде ничего сильно критичного не заметил.

а на приёмной стороне обработай

Строка 36 - пытаешься читать цифровой пин

1 лайк

Не, это 0-й канал АЦП.

нет, все окей. РОТ0 это А0 на ардуине. все работает, только нет цифр после запятой.

индикатор десятые доли не показывает.
поэтому и обращаюсь к толь высокому сообществу

в данных настройках перебрал все варианты. подходящих нет

я понимаю, что FLOAT занимает два регистра, в одном целая часть числа, в другом число после запятой.
думаю, что то неправильно с выбором массива