Neste vídeo vamos fazer um Arduino enviar e receber dados de outro arduino.
Apresentação: Júlio Vansan Gonçalves
Materiais:
- Arduino Nano ou Uno
- Protoboard
- Kit jumpers
- Botões
- Leds
- Resistores
- Encoder Rotativo
- 2x módulo conversor RS485
Códigos usados no vídeo
Envia V1:
const int bt1=5;
const int bt2=6;
const int bt3=7;
const int bt4=8;
const int luz1=A1;
const int luz2=A2;
const int luz3=A3;
const int luz4=A4;
const int luz5=9;
int estadoLuz1=LOW;
int estadoLuz2=LOW;
int estadoLuz3=LOW;
int estadoLuz4=LOW;
int estadoLuz5=0;
String RecebeDados="";
String enviaDados="";
#include <RotaryEncoder.h>
//Pinos de ligacao do encoder
RotaryEncoder encoder(3, 4);
//Variavel para o botao do encoder
int valor = 0;
int newPos = 0;
const int bt5=2;
// Serial via cabo
#include <SoftwareSerial.h>
SoftwareSerial serialLuz(11, 12); // RX 11 | TX 12
void setup() {
Serial.begin(9600);
serialLuz.begin(2400);
pinMode(bt1,INPUT_PULLUP);
pinMode(bt2,INPUT_PULLUP);
pinMode(bt3,INPUT_PULLUP);
pinMode(bt4,INPUT_PULLUP);
pinMode(bt5,INPUT);
pinMode(luz1,OUTPUT);
pinMode(luz2,OUTPUT);
pinMode(luz3,OUTPUT);
pinMode(luz4,OUTPUT);
pinMode(luz5,OUTPUT);
delay(3000);
Serial.println("### Iniciando ### ");
serialLuz.print("MestreLigou");
}
void loop() {
if (digitalRead(bt1)==LOW){
estadoLuz1= !estadoLuz1;
digitalWrite(luz1,estadoLuz1);
enviaDados="LUZ1=";
enviaDados+=String(estadoLuz1);
serialLuz.print(enviaDados);
Serial.print("Botão 1 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt1)==LOW){
delay(50);
}//while
}//if botão
if (digitalRead(bt2)==LOW){
estadoLuz2= !estadoLuz2;
digitalWrite(luz2,estadoLuz2);
enviaDados="LUZ2=";
enviaDados+=String(estadoLuz2);
serialLuz.print(enviaDados);
Serial.print("Botão 2 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt2)==LOW){
delay(50);
}//while
}//if botão
if (digitalRead(bt3)==LOW){
estadoLuz3= !estadoLuz3;
digitalWrite(luz3,estadoLuz3);
enviaDados="LUZ3=";
enviaDados+=String(estadoLuz3);
serialLuz.print(enviaDados);
Serial.print("Botão 3 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt3)==LOW){
delay(50);
}//while
}//if botão
if (digitalRead(bt4)==LOW){
estadoLuz4= !estadoLuz4;
digitalWrite(luz4,estadoLuz4);
enviaDados="LUZ4=";
enviaDados+=String(estadoLuz4);
serialLuz.print(enviaDados);
Serial.print("Botão 4 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt4)==LOW){
delay(50);
}//while
}//if botão
//Le as informacoes do encoder
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
//Se a posicao foi alterada, mostra o valor
//no Serial Monitor
if (pos != newPos) {
Serial.print(newPos);
Serial.println();
if ((pos-newPos)<0){
estadoLuz5+=15;
if (estadoLuz5>=255){
estadoLuz5=255;
}
}
if ((pos-newPos)>0){
estadoLuz5-=15;
if (estadoLuz5<=0){
estadoLuz5=0;
}
}
pos = newPos;
enviaDados="LUZ5=";
enviaDados+=String(estadoLuz5);
serialLuz.print(enviaDados);
Serial.print("Valor Luz 5 Alterado >> Enviado: ");
Serial.println(enviaDados);
}
RecebeDados="";
if(serialLuz.available()){
delay(3);
RecebeDados="";
while(serialLuz.available()){
delay(3);
char c = serialLuz.read();
RecebeDados +=c;
}
Serial.print("\n <<<< Dados Recebidos: ");
Serial.print(RecebeDados);
}//if serial
if(RecebeDados=="LUZ1=1"){
estadoLuz1=1 ;
Serial.print(" +++ Ligando 1 +++ ");
}
if(RecebeDados=="LUZ1=0"){
estadoLuz1=0 ;
Serial.print(" +++ Desligando 1 +++ ");
}
if(RecebeDados=="LUZ2=1"){
estadoLuz2=1 ;
Serial.print(" +++ Ligando 2 +++ ");
}
if(RecebeDados=="LUZ2=0"){
estadoLuz2=0 ;
Serial.print(" +++ Desligando 2 +++ ");
}
if(RecebeDados=="LUZ3=1"){
estadoLuz3=1 ;
Serial.print(" +++ Ligando 3 +++ ");
}
if(RecebeDados=="LUZ3=0"){
estadoLuz3=0 ;
Serial.print(" +++ Desligando 3 +++ ");
}
if(RecebeDados=="LUZ4=1"){
estadoLuz4=1 ;
Serial.print(" +++ Ligando 4 +++ ");
}
if(RecebeDados=="LUZ4=0"){
estadoLuz4=0 ;
Serial.print(" +++ Desligando 4 +++ ");
}
String qualLuz=(RecebeDados.substring(0,5));
if (qualLuz=="LUZ5="){
estadoLuz5=(RecebeDados.substring(5)).toInt();
}
if(RecebeDados=="EscravoLigou"){
enviaDados="LUZ1=";
enviaDados+=String(estadoLuz1);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ2=";
enviaDados+=String(estadoLuz2);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ3=";
enviaDados+=String(estadoLuz3);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ4=";
enviaDados+=String(estadoLuz4);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ5=";
enviaDados+=String(estadoLuz5);
serialLuz.print(enviaDados);
delay(100);
}
digitalWrite(luz1,estadoLuz1);
digitalWrite(luz2,estadoLuz2);
digitalWrite(luz3,estadoLuz3);
digitalWrite(luz4,estadoLuz4);
analogWrite(luz5,estadoLuz5);
}
Recebe v1:
const int luz1=A1;
const int luz2=A2;
const int luz3=A3;
const int luz4=A4;
const int luz5=9;
String qualLuz="";
int estadoLuz1=LOW;
int estadoLuz2=LOW;
int estadoLuz3=LOW;
int estadoLuz4=LOW;
int estadoLuz5=0;
int estadoLuz5Invertido=0;
String RecebeDados="";
String enviaDados="";
// Serial via cabo
#include <SoftwareSerial.h>
SoftwareSerial serialLuz(11, 12); // RX 11 | TX 12
void setup() {
Serial.begin(9600);
serialLuz.begin(2400);
pinMode(luz1,OUTPUT);
pinMode(luz2,OUTPUT);
pinMode(luz3,OUTPUT);
pinMode(luz4,OUTPUT);
pinMode(luz5,OUTPUT);
delay(3000);
Serial.println("### Iniciando ### ");
serialLuz.print("EscravoLigou");
}
void loop() {
RecebeDados="";
if(serialLuz.available()){
delay(3);
RecebeDados="";
while(serialLuz.available()){
delay(3);
char c = serialLuz.read();
RecebeDados +=c;
}
Serial.print("\n <<<< Dados Recebidos: ");
Serial.print(RecebeDados);
//Serial.println(RecebeDados.substring(0,5));
//Serial.println(RecebeDados.substring(5));
}//if serial
if(RecebeDados=="LUZ1=1"){
estadoLuz1=1 ;
Serial.print(" +++ Ligando 1 +++ ");
}
if(RecebeDados=="LUZ1=0"){
estadoLuz1=0 ;
Serial.print(" +++ Desligando 1 +++ ");
}
if(RecebeDados=="LUZ2=1"){
estadoLuz2=1 ;
Serial.print(" +++ Ligando 2 +++ ");
}
if(RecebeDados=="LUZ2=0"){
estadoLuz2=0 ;
Serial.print(" +++ Desligando 2 +++ ");
}
if(RecebeDados=="LUZ3=1"){
estadoLuz3=1 ;
Serial.print(" +++ Ligando 3 +++ ");
}
if(RecebeDados=="LUZ3=0"){
estadoLuz3=0 ;
Serial.print(" +++ Desligando 3 +++ ");
}
if(RecebeDados=="LUZ4=1"){
estadoLuz4=1 ;
Serial.print(" +++ Ligando 4 +++ ");
}
if(RecebeDados=="LUZ4=0"){
estadoLuz4=0 ;
Serial.print(" +++ Desligando 4 +++ ");
}
qualLuz=(RecebeDados.substring(0,5));
if (qualLuz=="LUZ5="){
estadoLuz5=(RecebeDados.substring(5)).toInt();
// estadoLuz5Invertido=map(estadoLuz5,0,255,255,0);
// Serial.print(" >>> Invertido = ");
// Serial.print(estadoLuz5Invertido);
}
if(RecebeDados=="MestreLigou"){
enviaDados="LUZ1=";
enviaDados+=String(estadoLuz1);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ2=";
enviaDados+=String(estadoLuz2);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ3=";
enviaDados+=String(estadoLuz3);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ4=";
enviaDados+=String(estadoLuz4);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ5=";
enviaDados+=String(estadoLuz5);
serialLuz.print(enviaDados);
delay(100);
}
digitalWrite(luz1,estadoLuz1);
digitalWrite(luz2,estadoLuz2);
digitalWrite(luz3,estadoLuz3);
digitalWrite(luz4,estadoLuz4);
analogWrite(luz5,estadoLuz5);
} //loop
Envia com RS485
const int bt1=5;
const int bt2=6;
const int bt3=7;
const int bt4=8;
const int luz1=A1;
const int luz2=A2;
const int luz3=A3;
const int luz4=A4;
const int luz5=9;
int estadoLuz1=LOW;
int estadoLuz2=LOW;
int estadoLuz3=LOW;
int estadoLuz4=LOW;
int estadoLuz5=0;
String RecebeDados="";
String enviaDados="";
#include <RotaryEncoder.h>
//Pinos de ligacao do encoder
RotaryEncoder encoder(3, 4);
//Variavel para o botao do encoder
int valor = 0;
int newPos = 0;
const int bt5=2;
// Serial via cabo
#include <SoftwareSerial.h>
SoftwareSerial serialLuz(11, 12); // RX 11 | TX 12
#define RS485Envia HIGH
#define RS485Recebe LOW
const int controleRS485=10;
void setup() {
Serial.begin(9600);
serialLuz.begin(2400);
pinMode(bt1,INPUT_PULLUP);
pinMode(bt2,INPUT_PULLUP);
pinMode(bt3,INPUT_PULLUP);
pinMode(bt4,INPUT_PULLUP);
pinMode(bt5,INPUT);
pinMode(luz1,OUTPUT);
pinMode(luz2,OUTPUT);
pinMode(luz3,OUTPUT);
pinMode(luz4,OUTPUT);
pinMode(luz5,OUTPUT);
pinMode(controleRS485,OUTPUT);
delay(3000);
Serial.println("### Iniciando Principal ### ");
digitalWrite(controleRS485,RS485Envia);
serialLuz.print("PrincipalLigou");
}
void loop() {
if (digitalRead(bt1)==LOW){
estadoLuz1= !estadoLuz1;
digitalWrite(luz1,estadoLuz1);
enviaDados="LUZ1=";
enviaDados+=String(estadoLuz1);
digitalWrite(controleRS485,RS485Envia);
serialLuz.print(enviaDados);
Serial.print("Botão 1 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt1)==LOW){
delay(50);
}//while
}//if botão
if (digitalRead(bt2)==LOW){
estadoLuz2= !estadoLuz2;
digitalWrite(luz2,estadoLuz2);
enviaDados="LUZ2=";
enviaDados+=String(estadoLuz2);
digitalWrite(controleRS485,RS485Envia);
serialLuz.print(enviaDados);
Serial.print("Botão 2 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt2)==LOW){
delay(50);
}//while
}//if botão
if (digitalRead(bt3)==LOW){
estadoLuz3= !estadoLuz3;
digitalWrite(luz3,estadoLuz3);
enviaDados="LUZ3=";
enviaDados+=String(estadoLuz3);
digitalWrite(controleRS485,RS485Envia);
serialLuz.print(enviaDados);
Serial.print("Botão 3 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt3)==LOW){
delay(50);
}//while
}//if botão
if (digitalRead(bt4)==LOW){
estadoLuz4= !estadoLuz4;
digitalWrite(luz4,estadoLuz4);
enviaDados="LUZ4=";
enviaDados+=String(estadoLuz4);
digitalWrite(controleRS485,RS485Envia);
serialLuz.print(enviaDados);
Serial.print("Botão 4 Pressionado >> Enviado: ");
Serial.println(enviaDados);
while (digitalRead(bt4)==LOW){
delay(50);
}//while
}//if botão
//Le as informacoes do encoder
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
//Se a posicao foi alterada, mostra o valor
//no Serial Monitor
if (pos != newPos) {
Serial.print(newPos);
Serial.println();
if ((pos-newPos)<0){
estadoLuz5+=15;
if (estadoLuz5>=255){
estadoLuz5=255;
}
}
if ((pos-newPos)>0){
estadoLuz5-=15;
if (estadoLuz5<=0){
estadoLuz5=0;
}
}
pos = newPos;
enviaDados="LUZ5=";
enviaDados+=String(estadoLuz5);
digitalWrite(controleRS485,RS485Envia);
serialLuz.print(enviaDados);
Serial.print("Valor Luz 5 Alterado >> Enviado: ");
Serial.println(enviaDados);
}
digitalWrite(controleRS485,RS485Recebe);
delay(10);
RecebeDados="";
if(serialLuz.available()){
delay(3);
RecebeDados="";
while(serialLuz.available()){
delay(3);
char c = serialLuz.read();
RecebeDados +=c;
}
Serial.print("\n <<<< Dados Recebidos: ");
Serial.print(RecebeDados);
}//if serial
if(RecebeDados=="LUZ1=1"){
estadoLuz1=1 ;
Serial.print(" +++ Ligando 1 +++ ");
}
if(RecebeDados=="LUZ1=0"){
estadoLuz1=0 ;
Serial.print(" +++ Desligando 1 +++ ");
}
if(RecebeDados=="LUZ2=1"){
estadoLuz2=1 ;
Serial.print(" +++ Ligando 2 +++ ");
}
if(RecebeDados=="LUZ2=0"){
estadoLuz2=0 ;
Serial.print(" +++ Desligando 2 +++ ");
}
if(RecebeDados=="LUZ3=1"){
estadoLuz3=1 ;
Serial.print(" +++ Ligando 3 +++ ");
}
if(RecebeDados=="LUZ3=0"){
estadoLuz3=0 ;
Serial.print(" +++ Desligando 3 +++ ");
}
if(RecebeDados=="LUZ4=1"){
estadoLuz4=1 ;
Serial.print(" +++ Ligando 4 +++ ");
}
if(RecebeDados=="LUZ4=0"){
estadoLuz4=0 ;
Serial.print(" +++ Desligando 4 +++ ");
}
String qualLuz=(RecebeDados.substring(0,5));
if (qualLuz=="LUZ5="){
estadoLuz5=(RecebeDados.substring(5)).toInt();
}
if(RecebeDados=="SecundarioLigou"){
digitalWrite(controleRS485,RS485Envia);
enviaDados="LUZ1=";
enviaDados+=String(estadoLuz1);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ2=";
enviaDados+=String(estadoLuz2);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ3=";
enviaDados+=String(estadoLuz3);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ4=";
enviaDados+=String(estadoLuz4);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ5=";
enviaDados+=String(estadoLuz5);
serialLuz.print(enviaDados);
delay(100);
}
digitalWrite(luz1,estadoLuz1);
digitalWrite(luz2,estadoLuz2);
digitalWrite(luz3,estadoLuz3);
digitalWrite(luz4,estadoLuz4);
analogWrite(luz5,estadoLuz5);
}
Recebe com RS485
const int luz1=A1;
const int luz2=A2;
const int luz3=A3;
const int luz4=A4;
const int luz5=9;
String qualLuz="";
int estadoLuz1=LOW;
int estadoLuz2=LOW;
int estadoLuz3=LOW;
int estadoLuz4=LOW;
int estadoLuz5=0;
int estadoLuz5Invertido=0;
String RecebeDados="";
String enviaDados="";
// Serial via cabo
#include <SoftwareSerial.h>
SoftwareSerial serialLuz(11, 12); // RX 11 | TX 12
#define RS485Envia HIGH
#define RS485Recebe LOW
const int controleRS485=10;
void setup() {
Serial.begin(9600);
serialLuz.begin(2400);
pinMode(luz1,OUTPUT);
pinMode(luz2,OUTPUT);
pinMode(luz3,OUTPUT);
pinMode(luz4,OUTPUT);
pinMode(luz5,OUTPUT);
pinMode(controleRS485,OUTPUT);
delay(3000);
Serial.println("### Iniciando Secundário ### ");
digitalWrite(controleRS485,RS485Envia);
serialLuz.print("SecundarioLigou");
}
void loop() {
digitalWrite(controleRS485,RS485Recebe);
RecebeDados="";
if(serialLuz.available()){
delay(3);
RecebeDados="";
while(serialLuz.available()){
delay(3);
char c = serialLuz.read();
RecebeDados +=c;
}
Serial.print("\n <<<< Dados Recebidos: ");
Serial.print(RecebeDados);
}//if serial
if(RecebeDados=="LUZ1=1"){
estadoLuz1=1 ;
Serial.print(" +++ Ligando 1 +++ ");
}
if(RecebeDados=="LUZ1=0"){
estadoLuz1=0 ;
Serial.print(" +++ Desligando 1 +++ ");
}
if(RecebeDados=="LUZ2=1"){
estadoLuz2=1 ;
Serial.print(" +++ Ligando 2 +++ ");
}
if(RecebeDados=="LUZ2=0"){
estadoLuz2=0 ;
Serial.print(" +++ Desligando 2 +++ ");
}
if(RecebeDados=="LUZ3=1"){
estadoLuz3=1 ;
Serial.print(" +++ Ligando 3 +++ ");
}
if(RecebeDados=="LUZ3=0"){
estadoLuz3=0 ;
Serial.print(" +++ Desligando 3 +++ ");
}
if(RecebeDados=="LUZ4=1"){
estadoLuz4=1 ;
Serial.print(" +++ Ligando 4 +++ ");
}
if(RecebeDados=="LUZ4=0"){
estadoLuz4=0 ;
Serial.print(" +++ Desligando 4 +++ ");
}
qualLuz=(RecebeDados.substring(0,5));
if (qualLuz=="LUZ5="){
estadoLuz5=(RecebeDados.substring(5)).toInt();
}
if(RecebeDados=="PrincipalLigou"){
digitalWrite(controleRS485,RS485Envia);
enviaDados="LUZ1=";
enviaDados+=String(estadoLuz1);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ2=";
enviaDados+=String(estadoLuz2);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ3=";
enviaDados+=String(estadoLuz3);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ4=";
enviaDados+=String(estadoLuz4);
serialLuz.print(enviaDados);
delay(100);
enviaDados="LUZ5=";
enviaDados+=String(estadoLuz5);
serialLuz.print(enviaDados);
delay(100);
digitalWrite(controleRS485,RS485Recebe);
}
digitalWrite(luz1,estadoLuz1);
digitalWrite(luz2,estadoLuz2);
digitalWrite(luz3,estadoLuz3);
digitalWrite(luz4,estadoLuz4);
analogWrite(luz5,estadoLuz5);
} //loop
Link da pesquisa:
https://www.arduinoecia.com.br/como-usar-comunicacao-rs485-com-arduino/
#serial #RS485 #comunicação #automação #DIY #maker #microcontrolador #façavocemesmo #tcc #sugestãoTCC #Projeto #arduino
Curta, compartilhe e inscreva-se para ficar atualizado com os nossos conteúdos!
Para saber mais sobre o Canal Projeto Bacana:
E-mail: contato@projetobacana.com.br
Site: https://www.projetobacana.com.br/
Facebook: https://www.facebook.com/projetobacana.com.br
Instagram: https://www.instagram.com/projetobacana.com.br/
Youtube: https://www.youtube.com/channel/UC0e1bfaL0-gnAP2KQA5vxqQ