leothiago
(usa Outra)
Enviado em 08/07/2024 - 21:03h
BOA noite a todos, então, tenho 2 arduino uno .. preciso comunicar os 2 sem fio, por Rf, botei um transmissor e um receptor, a programação do receptor funciona da seguinte forma, aciona um botão e envio um comando para o receptor e aciona o led no outro arduino, e ao clicar novamente ele desliga o led, não consigo modificar para quando estiver pressionado led acende e ao soltar ele apaga, o projeto é um carrinho de controle remoto sem fio... me ajudem... vou enviar o codigo....
– Código (Transmissor):
#include <RH_ASK.h> //INCLUSÃO DE BIBLIOTECA
#include <SPI.h> //INCLUSÃO DE BIBLIOTECA
RH_ASK driver; //CRIA O DRIVER PARA COMUNICAÇÃO
const int pinoBotao = 2; //PINO DIGITAL UTILIZADO PELO PUSH BUTTON
void setup(){
driver.init(); //INICIALIZA A COMUNICAÇÃO RF DO DRIVER
pinMode(pinoBotao, INPUT_PULLUP); //DEFINE O PINO COMO ENTRADA / "_PULLUP" É PARA ATIVAR O RESISTOR INTERNO
//DO ARDUINO PARA GARANTIR QUE NÃO EXISTA FLUTUAÇÃO ENTRE 0 (LOW) E 1 (HIGH)
}
void loop(){
const char *msg = "led"; //VARIÁVEL RECEBE O VALOR (led)
if(digitalRead(pinoBotao) == LOW){ //SE A LEITURA DO PINO FOR IGUAL A LOW, FAZ
driver.send((uint8_t *)msg, strlen(msg)); //ENVIA AS INFORMAÇÕES PARA O RECEPTOR (PALAVRA: led)
driver.waitPacketSent(); //AGUARDA O ENVIO DAS INFORMAÇÕES
delay(200); //INTERVALO DE 200 MILISSEGUNDOS
}
}
– Código (Receptor):
OBS: conecte o cabo USB ao Arduino e ao computador e faça o carregamento do código na placa.
Arduino
#include <RH_ASK.h> //INCLUSÃO DE BIBLIOTECA
#include <SPI.h> //INCLUSÃO DE BIBLIOTECA
RH_ASK driver; //CRIA O DRIVER PARA COMUNICAÇÃO
const int pinoLed = 4; //PINO DIGITAL UTILIZADO PELO LED
String str = ""; //VARIÁVEL DO TIPO STRING
int statusLed = 0; //VARIÁVEL DO TIPO INT (CONTROLA O ESTADO ATUAL DO LED)
void setup(){
driver.init(); //INICIALIZA A COMUNICAÇÃO RF DO DRIVER
pinMode(pinoLed, OUTPUT); //DEFINE O PINO COMO SAÍDA
digitalWrite(pinoLed, LOW); //LED INICIA DESLIGADO
}
void loop(){
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]; //LÊ A MENSAGEM RECEBIDA (PALAVRA: led)
uint8_t buflen = sizeof(buf); //CRIA O COMPRIMENTO DO BUFFER PARA O TAMANHO DE buf
if(driver.recv(buf, &buflen)){ //SE O DRIVER RECEBEU buf(INTEIRO) E buflen (COMPRIMENTO DE DADOS), FAZ
str = ""; //VARIÁVEL RECEBE VAZIO
int i; //VARIÁVEL LOCAL DO TIPO INTEIRO
for(int i = 0; i < buflen; i++){ //PARA i IGUAL A 0, ENQUANTO i MENOR QUE buflen, INCREMENTA i
str += (char)buf[i]; //VARIÁVEL RECEBE OS CARACTERES E FORMA A PALAVRA
}
if((str.equals("led")) && (statusLed == 0)){ //SE str FOR IGUAL A "led" E statusLed FOR IGUAL A 0, FAZ
statusLed = 1; //VARIÁVEL RECEBE 1
digitalWrite(pinoLed, HIGH); //ACENDE O LED
}else{ //SENÃO, FAZ
if((str.equals("led")) && (statusLed == 1)){ //SE str FOR IGUAL A "led" E statusLed FOR IGUAL A 1, FAZ
statusLed = 0; //VARIÁVEL RECEBE 0
digitalWrite(pinoLed, LOW); //APAGA O LED
}
}
}
}
Obr