Olá Diego,
Tudo belezinha?
Então, abaixo segue script. Hoje de manhã consegui sincronizar o sensor ultrassonico com o scadabr, precisão perfeita!! Porém, segue abaixo a minha dúvida:
#include “Ultrasonic.h”
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
//iniciando a função e passando os pinos
Ultrasonic ultrasonic(12,13);
void configure_mb_slave(long baud, char parity, char txenpin);
int update_mb_slave(unsigned char slave, int regs,
unsigned int regs_size);
/ Modbus RTU common parameters, the Master MUST use the same parameters /
enum {
MB_SLAVE = 1, / modbus slave id /
};
/ slave registers example /
enum {
MB_REG0, / Condição para LER sensor /
MB_REG1, / Leitura da distancia /
MB_REGS / total number of registers on slave */
};
int regs[MB_REGS]; /* this is the slave’s modbus data map */
void setup()
{
/* Modbus setup example, the master must use the same COM parameters /
/ 115200 bps, 8N1, two-device network */
configure_mb_slave(115200, ‘n’, 0);
pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe)
pinMode(trigPin, OUTPUT); // define o pino 12 como saida (envia)
}
void loop()
{
/* This is all for the Modbus slave */
update_mb_slave(MB_SLAVE, regs, MB_REGS);
if(regs[MB_REG0] == 1)
{
//seta o pino 12 com um pulso baixo “LOW” ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto “HIGH” ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
// função Ranging, faz a conversão do tempo de
//resposta do echo em centimetros, e armazena
//na variavel distancia
int distancia = (ultrasonic.Ranging(CM));
regs[MB_REG1] = distancia;
delay(1000); //espera 1 segundo para fazer a leitura novamente
}
else{
regs[MB_REG1]==0;
}
}
Como você pode ver ao obedecer a primeira condição, entra-se em um IF, para mandar os pulsos do sensor (por esse motivo que eu estava falando do blink, era apenas uma analogia).
Enfim, ele entra no IF e quando seto o 0 pelo scadabr ele simplesmente não obedece. E com certeza não é biblioteca, já testei com todas existentes e o problema permanece.
Estou usando o serial nativo do arduino.
Bem, espero que possa me ajudar.
Obrigado
abço