Files
ModbusThermometer/ModbusThermometer.cpp
2014-11-08 15:18:24 +01:00

69 lines
1.4 KiB
C++

#include "Arduino.h"
#include "Metro.h"
#include "ads1210.h"
#include "led.h"
#include "SimpleModbusSlave.h"
const uint8_t LED_PIN = 8;
const uint8_t ADC_1_CS_PIN = 9;
const uint8_t ADC_1_RDY_PIN = 7;
const uint8_t ADC_2_CS_PIN = 2;
const uint8_t ADC_2_RDY_PIN = 3;
const uint8_t MODBUS_TX_ENABLE_PIN = 6;
const uint8_t MODBUS_ID = 3;
const uint32_t MODBUS_BAUD = 1200;
ADS1210 ads1210_1;
ADS1210 ads1210_2;
LED led;
Metro secondTick = Metro(1000);
uint32_t uptimeSeconds;
struct {
union {
uint32_t in;
uint16_t modbusRegisters[2]; // 0, 1
} adc1Value;
union {
uint32_t in;
uint16_t modbusRegisters[2]; // 2, 3
} adc2Value;
union {
uint32_t in;
uint16_t modbusRegisters[2]; // 4, 5
} uptimeSeconds;
} modbusHoldingRegisters;
void setup() {
led.begin(LED_PIN);
ads1210_1.begin(ADC_1_CS_PIN, ADC_1_RDY_PIN);
ads1210_2.begin(ADC_2_CS_PIN, ADC_2_RDY_PIN);
modbus_configure(&Serial, MODBUS_BAUD, SERIAL_8N2, MODBUS_ID, MODBUS_TX_ENABLE_PIN,
sizeof(modbusHoldingRegisters), (uint16_t*)(&modbusHoldingRegisters));
uptimeSeconds = 0;
}
void loop() {
modbus_update();
ads1210_1.exec();
modbusHoldingRegisters.adc1Value.in = ads1210_1.value;
ads1210_2.exec();
modbusHoldingRegisters.adc2Value.in = ads1210_2.value;
if (secondTick.check() == 1) {
led.toggle();
uptimeSeconds++;
modbusHoldingRegisters.uptimeSeconds.in = uptimeSeconds;
}
}