упппсссс :)))
бывает, чо…
Шо, так и не осилил как код правильно вставить? Однако ж…
правильней видимо гнать сырые данные. а на приёмной стороне произвести математику
Чуется мне, что Ваша схема чертовски небезопасная. Вы чего - фазу на пин подаёте? Прекратите немедлянно!
#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 - пытаешься читать цифровой пин
Не, это 0-й канал АЦП.
нет, все окей. РОТ0 это А0 на ардуине. все работает, только нет цифр после запятой.
индикатор десятые доли не показывает.
поэтому и обращаюсь к толь высокому сообществу
в данных настройках перебрал все варианты. подходящих нет
я понимаю, что FLOAT занимает два регистра, в одном целая часть числа, в другом число после запятой.
думаю, что то неправильно с выбором массива