modbus & ds18b20

Cаня
Offline
Зарегистрирован: 20.07.2014

#include "ModbusRtu.h"
#include <OneWire.h>
#include <DallasTemperature.h>// Инициализация библиотеки термодатчиков.

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


#define ONE_WIRE_BUS 10// Подключение цифрового вывода датчика к 10-му пину Ардуино.
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//Задаём ведомому адрес, последовательный порт, выход управления TX
Modbus slave(ID, 0, 0); 
boolean led;
int8_t state = 0;
unsigned long tempus;
int t;

// массив данных modbus
uint16_t au16data[11];

void setup() {
  // настраиваем входы и выходы
  io_setup();
  // настраиваем последовательный порт ведомого
  slave.begin( 9600 ); 
  // зажигаем светодиод на 100 мс
  tempus = millis() + 100; 
  digitalWrite(stlPin, HIGH );
  sensors.begin(); // Запуск сенсора.
}

void io_setup() {
  digitalWrite(stlPin, HIGH ); 
  digitalWrite(ledPin, LOW ); 
  pinMode(stlPin, OUTPUT); 
  pinMode(ledPin, OUTPUT);   
  pinMode(btnPin, INPUT);
 
}

void loop() {

  // обработка сообщений
  state = slave.poll( au16data, 11);  
   // если получили пакет без ошибок - зажигаем светодиод на 50 мс  
  if (state > 4) {
    tempus = millis() + 50;
    digitalWrite(stlPin, HIGH);

  }
  if (millis() > tempus) digitalWrite(stlPin, LOW );
  //обновляем данные в регистрах Modbus и в пользовательской программе
    sensors.requestTemperatures(); // Send the command to get temperatures
    t=(sensors.getTempCByIndex(0)*100/2);
  io_poll();
  
}



void io_poll() {
  //Копируем Coil[1] в Discrete[0]
  au16data[0] = au16data[1];
  //Выводим значение регистра 1.3 на светодиод 
  digitalWrite( ledPin, bitRead( au16data[1], 3 ));
  //Сохраняем состояние кнопки в регистр 0.3
  bitWrite( au16data[0], 3, digitalRead( btnPin ));
  //Сохраняем значение температуры *100
  au16data[2] = t;
  au16data[5]= 5000;
  au16data[3] = 1;
  au16data[6] = 2;
  au16data[4] = au16data[7];
  //Сохраняем в регистры отладочную информацию
  au16data[8] = slave.getInCnt();
  au16data[9] = slave.getOutCnt();
  au16data[10] = slave.getErrCnt();
}

 

Cаня
Offline
Зарегистрирован: 20.07.2014

Добрый день. Помогите передать получить температуру с датчика по Modbus.