Olá pessoal,

Estou tentando fazer uma comunicação usando o módulo RF, mas não estou conseguindo ajustar a programação. Acredito que o programa do transmissor esteja correto, mas o do receptor tem alguma falha. Quando abro o serial para ver os dados que o receptor está recebendo, ele recebe apenas o primeiro valor enviado. Ao tentar enviar outros dados, nada acontece. 

A ideia do programa é controlar um L239D através do sinal recebido

Segue o programa que estou utilizando: 

#include <VirtualWire.h> //Inclui a biblioteca VirtualWire.h

#define motorCCEnt1 7

#define motorCCEnt2 4

#define controleL293D 9

#define motor2CCEnt1 12

#define motor2CCEnt2 13

int potVelPotencia = 0;
int i;
int flag = 0;
int pwm;
char valor[4];

void setup()
{
//Configura o Arduino para trabalhar como receptor
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_rx_pin(2);//Configura o pino 2 como rx
vw_rx_start();
//=================================================

pinMode(2, INPUT);
pinMode(motorCCEnt1,OUTPUT);
pinMode(motorCCEnt2,OUTPUT);
pinMode(controleL293D,OUTPUT);
pinMode(motor2CCEnt1,OUTPUT);
pinMode(motor2CCEnt2,OUTPUT);
Serial.begin(9600);
}
void loop()
{
char cod;//Cria uma variavel para armazenar o dado recebido.
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Recebe os dados e armazena na variável buf
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Armazena na variável buflen o tamanho do dado recebido
if (vw_get_message(buf, &buflen)) //Pega a mensagem que foi recebida
{
flag = 1;// Flag de recebimento
}
// Copia os dados recebidos para um array do tipo Char
if (flag == 1) {
for (i = 0; i < buflen; i++) {
valor[i] = buf[i];
}
pwm = atoi(valor);

if (pwm == 124) {
digitalWrite(motorCCEnt1,LOW);
digitalWrite(motorCCEnt2,LOW);
digitalWrite(motor2CCEnt1,LOW);
digitalWrite(motor2CCEnt2,LOW);
}
if (pwm >= 125) {
potVelPotencia = pwm;

analogWrite(controleL293D,potVelPotencia);
digitalWrite(motorCCEnt1,HIGH);
digitalWrite(motorCCEnt2,LOW);
digitalWrite(motor2CCEnt1,HIGH);
digitalWrite(motor2CCEnt2,LOW);
}

else if (pwm <= 123) {
potVelPotencia = 255 - pwm;

analogWrite(controleL293D,potVelPotencia);
digitalWrite(motorCCEnt1,LOW);
digitalWrite(motorCCEnt2,HIGH);
digitalWrite(motor2CCEnt1,LOW);
digitalWrite(motor2CCEnt2,HIGH);
}

Serial.println(pwm);
}
flag = 0;// Zera a flag de recebimento
//Limpa as posições do Vetor
for (i = 0; i <= 4; i++) {
valor[i] = 0;
}
}

Exibições: 266

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço