Hi guys
i am sure its something daft that i am missing.
i have a MODBUS network with 6 slaves, each slave has 5 analog inputs from various sensors.
i am using the MAP function for each sensor, but only two of them are returning a valid figure on the MASTER i can use?
for example outVal2 is returning a valid value between -40C & +60C and outVal3 is returning a value between 0 & 100% - as mapped.
But outVal0 & outVal1 is returning a strange value like 65565? when mapped between -100 & +100
and like wise with outVal4.
any ideas?
// Analog Input #1 - Vacuum (Stbd/Port) -100kpa to 100 kpa (-1000mbar to 1000mbar)
inVal0 = analogRead(0);
outVal0 = map(inVal0, 0, 1023, -100, 100);
holdingRegs[0] = outVal0;
// Analog Input #2 - Vacuum (Stbd/Port) -100kpa to 100 kpa (-1000mbar to 1000mbar)
inVal1 = analogRead(1);
outVal1 = map(inVal1, 0, 1023, -100, 100);
holdingRegs[1] = outVal1;
// Analog Input #3 - Temp (Stbd) **Mapped relevant to sensor -40C - +60C
inVal2 = analogRead(2);
outVal2 = map(inVal2, 0, 1023, -40, 60);
holdingRegs[2] = outVal2;
// Analog Input #4 - Humidity (Stbd) **Mapoed relevant to sensor - 0-100%
inVal3 = analogRead(3);
outVal3 = map(inVal3, 0, 1023, 0, 100);
holdingRegs[3] = outVal3;
// Analog Input #5 - Pressure Diff (Stbd) **Mapped relevant to sensor. -150pa - +150pa
inVal4 = analogRead(4);
outVal4 = map(inVal4, 0, 1023, -150, 150);
holdingRegs[4] = outVal4;
Here is my complete code.
#include <SimpleModbusSlave.h>
int inVal0;
int outVal0;
int inVal1;
int outVal1;
int inVal2;
int outVal2;
int inVal3;
int outVal3;
int inVal4;
int outVal4;
int inVal5;
int outVal5;
enum
{
// just add or remove registers and your good to go...
// The first register starts at address 0
ADC0,
ADC1,
ADC2,
ADC3,
ADC4,
ADC5,
LED_STATE,
BUTTON_STATE,
TOTAL_ERRORS,
// leave this one
TOTAL_REGS_SIZE
// total number of registers for function 3 and 16 share the same register array
};
unsigned int holdingRegs[TOTAL_REGS_SIZE]; // function 3 and 16 register array
void setup()
{
modbus_configure(9600, 2, 6, TOTAL_REGS_SIZE, 0);
// Serial.begin(9600);
}
void loop()
{
holdingRegs[TOTAL_ERRORS] = modbus_update(holdingRegs);
{
// Analog Input #1 - Vacuum (Stbd/Port) -100kpa to 100 kpa (-1000mbar to 1000mbar)
inVal0 = analogRead(0);
outVal0 = map(inVal0, 0, 1023, -100, 100);
holdingRegs[0] = outVal0;
// Analog Input #2 - Vacuum (Stbd/Port) -100kpa to 100 kpa (-1000mbar to 1000mbar)
inVal1 = analogRead(1);
outVal1 = map(inVal1, 0, 1023, -100, 100);
holdingRegs[1] = outVal1;
// Analog Input #3 - Temp (Stbd) **Mapped relevant to sensor -40C - +60C
inVal2 = analogRead(2);
outVal2 = map(inVal2, 0, 1023, -40, 60);
holdingRegs[2] = outVal2;
// Analog Input #4 - Humidity (Stbd) **Mapoed relevant to sensor - 0-100%
inVal3 = analogRead(3);
outVal3 = map(inVal3, 0, 1023, 0, 100);
holdingRegs[3] = outVal3;
// Analog Input #5 - Pressure Diff (Stbd) **Mapped relevant to sensor. -150pa - +150pa
inVal4 = analogRead(4);
outVal4 = map(inVal4, 0, 1023, -150, 150);
holdingRegs[4] = outVal4;
// Analog Input #6 - Not Used
inVal5 = analogRead(5);
outVal5 = map(inVal5, 0, 1023, 1000, 2700);
holdingRegs[5] = outVal5;
delayMicroseconds(50);
// Serial.print(outVal0);
// Serial.println( "Input #1");
// Serial.print(outVal1);
// Serial.println( "Input #2");
// Serial.print(outVal2);
// Serial.println( "Input #3");
// Serial.print(outVal3);
// Serial.println( "Input #4");
// Serial.print(outVal4);
// Serial.println( "Input #5");
// Serial.print(outVal5);
// Serial.println( "Input #6");
// delay(1000);
}
}