Hello, i have a ultrasonic sensor from maxbotix (mb7060) which output delivers asynchronous serial with an RS232 format, except voltages are 0-Vcc. The output is an ASCII capital “R”, followed by three ASCII character digits representing the range in centimeters up to a maximum of 765, followed by a carriage return (ASCII 13). The baud rate is 9600, 8 bits, no parity, with one stop bit.
Because of RS232 format with TTL level (5 volts its a '0' and 0 volts its a '1') i have to put an TTL inverter to invert this voltages to arduino to understand it when it receives the readings on RX pin.
At this time, everything works great, but when i power off the circuit (inverter and sensor) and look at serial monitor of arduino it keeps reading zeros and sometimes 1 or 3!
My code is
#include <SPI.h>
#include <VirtualWire.h>
//DECLARAÇÃO DAS VARIÁVEIS GLOBAIS
//ENABLE/DISABLE PARA O SENSOR
const int sensor = 7;
//LED'S
const int ledTransmissao = 4;
const int ledActivacao = 5;
//ENABLE/DISABLE DO TRANSMISSOR E PINO DE TRANSMISSÃO
const int pinoTransmissao = 8;
const int pinoActTransm = 3;
//VARIÁVEL QUE GUARDA A MENSAGEM A TRANSMITIR
char mensagem[5];
//VARIÁVEIS PARA DADOS LIDOS DO SENSOR
int dados;
char buffer[4];
void setup(){
//DEFINIÇÃO DOS PINOS DE ENTRADA E DE SAÍDA
pinMode(sensor, OUTPUT);
pinMode(ledTransmissao, OUTPUT);
pinMode(ledActivacao, OUTPUT);
digitalWrite(sensor, LOW);
//digitalWrite(pinoActTransm, LOW);
digitalWrite(ledTransmissao, LOW);
digitalWrite(ledActivacao, LOW);
//INICIAR A UART PARA DEBUG
Serial.begin(9600);
delay(100);
//CONFIGURAÇÃO DO VIRTUALWIRE -TRANSMISSÃO-
vw_set_tx_pin(pinoTransmissao);
vw_set_ptt_pin(pinoActTransm);
vw_setup(2000); //VELOCIDADE DE TRANSMISSÃO DE 2000 BITS POR SEGUNDO
}
void loop() {
//ENABLE DO SENSOR E LED DE ACTIVAÇÃO LIGADO
digitalWrite(sensor, HIGH);
digitalWrite(ledActivacao, HIGH);
delay(100);
//LEITURA DOS DADOS ENVIADOS PELO SENSOR
if ( Serial.available () > 0 ) {
char c = Serial.read();
if (c == 'R') {
Serial.readBytesUntil ('\r', &buffer[0], 4);
//mensagem = buffer; //GUARDA DADOS RECEBIDOS DO SENSOR -ASCII--RXXX\R--
//DISABLE DO SENSOR E LED DE ACTIVAÇÃO DESLIGADO
digitalWrite(sensor, LOW);
digitalWrite(ledActivacao, LOW);
dados = atoi (buffer); //CONVERSÃO DOS DADOS RECEBIDOS PARA VALORES INTEIROS
Serial.print("BUFFER: ");
Serial.println(buffer);
//ENVIO PARA A SÉRIE DO VALOR, PARA DEPURAÇÃO
Serial.print("Valor recebido:");
Serial.println(dados);
memset(&buffer, 0, sizeof(buffer)); //LIMPEZA DO BUFFER
Serial.print("Limpar buffer:");
Serial.print(buffer);
Serial.println("Em branco depois dos : SUCESSO!!!");
/*VERIFICAÇÃO SE OS DADOS RECEBIDOS DO SENSOR SÃO VÁLIDOS. O MÁXIMO
VALOR É 465 -ALTURA MÁXIMA DA ÁGUA- E O MÍNIMO É ZERO -TANQUE VAZIO-*/
if(dados >= 1 && dados <= 465) {
mensagem[0] = 'R';
itoa (dados, &mensagem[1], 10);
Serial.print("Mensagem a transmitir:");
Serial.println(mensagem);
//LED DE TRANSMISSÃO ACTIVA LIGADO
digitalWrite(ledTransmissao, HIGH);
//ENVIO DA MENSAGEM 2 VEZES PARA GARANTIR QUE É RECEBIDA
//for (int i = 0; i<2; i++){
vw_send ((uint8_t*)mensagem, strlen(mensagem)); //ENVIO DA MENSAGEM
vw_wait_tx(); //ESPERA QUE MENSAGEM SEJA TOTALMENTE ENVIADA
delay(1);
}
//LED DE TRANSMISSÃO ACTIVA DESLIGADO
digitalWrite(ledTransmissao, LOW);
memset(&mensagem, 0, sizeof(mensagem)); //LIMPA O BUFFER DA MENSAGEM ENVIADA
Serial.print("Limpar mensagem:");
Serial.print(mensagem);
Serial.println("Em branco depois dos : SUCESSO!!!");
delay(5000);
}
}
}
//}
/*FIM DO PROGRAMA*/
I'm trying to get the values from reading, see if they are between 1 and 465 (the minimum and maximum distance i want) and then send by RF 433MHz to another arduino, that can't get any message because i thing something is making conflict with readings (like when sensor and inverter are powered off it should stay "paused" in serial monitor and not keep telling me it is reading like R0 or R1, R3 ?!?
Thanks for any help with this problem