Bom dia pessoal!
Estou tentando fazer a comunicação de um arduino Uno R3 com um sensor ultrassônico com o ScadaBR através do protocolo Modbus Serial mas não tenho certeza se meu código está certo.
O sensor faz a leitura perfeitamente e exibe no monitor serial mas na hora de colocar para exibir no data point do ScadaBR ele não exibe os dados do sensor e só aparece um “n/a” ao invés de exibir os dados. Não consegui resolver esse erro e preciso de ajuda.
Alguém aqui tem conhecimento nesse assunto para me ajudar?
Agradeço.
O código é esse aqui:
// C++ code
//
#include <ModbusSerial.h>
#include <SoftwareSerial.h>
#include <SimpleModbusSlave.h>
#define sensor
enum
{
VALOR_ALT,
VALOR_CAP,
HOLDING_REGS_SIZE
};
unsigned int holdingRegs[HOLDING_REGS_SIZE];
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns the sound wave travel time in microseconds
return pulseIn(echoPin, HIGH);
}
void setup()
{
Serial.begin(9600);
/* configura cominicação modbus * 9600 bps, 8N1, RS485 network */
modbus_configure(&Serial, 9600, SERIAL_8N1, 1, 2, HOLDING_REGS_SIZE, holdingRegs);
modbus_update_comms(9600, SERIAL_8N1, 1);
}
void loop()
if (0.01723 * readUltrasonicDistance(A1, A0) > 0) {
VALOR_ALT = 0.01723 * readUltrasonicDistance(A1, A0);
}
if (VALOR_ALT <= 50) {
VALOR_CAP = 100;
Serial.println(VALOR_CAP);
} else {
if (VALOR_ALT <= 90 && VALOR_ALT >= 51) {
VALOR_CAP = 80;
Serial.println(VALOR_CAP);
} else {
if (VALOR_ALT <= 130 && VALOR_ALT >= 91) {
VALOR_CAP = 60;
Serial.println(VALOR_CAP);
} else {
if (VALOR_ALT <= 170 && VALOR_ALT >= 131) {
VALOR_CAP = 40;
Serial.println(VALOR_CAP);
} else {
if (VALOR_ALT <= 210 && VALOR_ALT >= 171) {
VALOR_CAP = 20;
Serial.println(VALOR_CAP);
} else {
if (VALOR_ALT <= 300 && VALOR_ALT >= 211) {
Serial.println(“Alerta”);
}
}
}
}
}
}
{
modbus_update();
holdingRegs[VALOR_ALT] = analogRead(A0);
analogWrite( A1, holdingRegs[VALOR_CAP]);
}
delay(10); // Delay a little bit to improve simulation performance
}