-
7/25/2019 Trabalho Redes- implementaao rede em arduino
1/16
#include // biblioteca para display de LCD
LiquidCrystallcd(12,11,5,4,3,2); //pinos do Display/Arduino
//Declarao das variaveis
intbot1est=0, bot2est=0, contover1=0,contover2=0;
longcontbot1=0, contbot2=0;
intdest=1, orig=0;
intSTX=02; //comando de inicio de envio de pacote
intMASTER=00,SLAVE=02; //endereo do mestre E ESCRAVO
intACK=6, NACK=15; //bytes de reconhecimento e no reconhecimento de comunicao
intBCC=0; //variavel que armazena o byte verificador (BCC)
int byte0=0,byte1=0,byte2=0,byte3=0,byte4=0,byte5=0; //VARIAVEIS para armazenar dados
int bot1=6, bot2=7, led1=8, led2=10, cont=0, bt485=9,bt2=13;; //pinos correspondentes aos perifricos
bool bot1press=false; // declarao de variaveis booleanas para o teste de botao1
bool bot2press=false; // declarao de variaveis booleanas para o teste de botao2
//Setup de programa
voidsetup()
{
pinMode(bot1,INPUT); //define pino 10 como entrada para bot1
pinMode(bot2,INPUT); //define pino 6 como entrada para bot2
pinMode(led1,OUTPUT); //define pino 7 como sada para led1
pinMode(led2,OUTPUT); //define pino 8 como sada para led2
pinMode(bt485,OUTPUT); //define pino 9 como sada para para habilitar comunicao RS485
pinMode(bt2,OUTPUT); //define pino 9 como sada para para habilitar comunicao RS485lcd.begin(16,2); //define numero de colunas e linhas do display de LCD
Serial.begin(9600); //velocidade da serial 9600bps
}
//lao de loop
voidloop()
{
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
2/16
lcd.setCursor(0,0);
lcd.print("Bot1:");//escreve Bot1: no LCDlcd.setCursor(5,0);
lcd.print(contbot1); //escreve quantas vezes o botao1 foi apertado
lcd.setCursor(8,0);
lcd.print("Bot2:"); //escreve Bot2: no LCD
lcd.setCursor(13,0);
lcd.print(contbot2); //escreve quantas vezes o botao2 foi apertado
bot1est = digitalRead(bot1); //le o estado do boto 1
digitalWrite(bt2,HIGH);// enable do max 485 recebe 0
if(bot1est==LOW)//se botao nao esta apertado
{
bot1press=false;// recebe false
}
if(!bot1press)//se bot1press=false
{
if(bot1est==HIGH)// testa se botao apertado novamente
{
bot1press=true;// recebe true
}
if(bot1press)//se bot1press=true
{
contbot1++;// contbot1=contbot1+1
if(contbot1>255)
{
contover1=contover1+1;contbot1=0;
}
}
}
bot2est = digitalRead(bot2); //le o estado do boto 2
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
3/16
if(bot2est==LOW)//se botao nao esta apertado{
bot2press=false;// recebe false
}
if(!bot2press)//se bot1press=false
{
if(bot2est==HIGH)// testa se botao apertado novamente
{
bot2press=true;// recebe true
}
if(bot2press)//se bot1press=true
{
contbot2++;// contbot2=contbot2+1
if(contbot2>255)
{
contover2=contover2+1;
contbot2=0;
}
}
}
digitalWrite(bt485,LOW);// enable do max 485 recebe 0
if(Serial.available() > 0) //verifica se a serial recebeu algo
{
delay(10); //delay de 10ms
byte0=Serial.read(); //recebe byte1 e armazena
delay(10); //delay de 10msbyte1=Serial.read(); //recebe byte2 e armazena
delay(10); //delay de 10ms
byte2=Serial.read(); //recebe byte3 e armazena
delay(10); //delay de 10ms
byte3=Serial.read(); //recebe byte4 e armazena
delay(10); //delay de 10ms
byte4=Serial.read(); //recebe byte5 e armazena
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
4/16
delay(10); //delay de 10ms
byte5=Serial.read(); //recebe byte6 e armazena
Serial.print(byte0);
Serial.print(byte1);
Serial.print(byte2);
Serial.print(byte3);
Serial.print(byte4);
Serial.print(byte5);
if(byte5==-1) //verifica se a posio 5 do vetor est vazia se verdadeiro s recebemos 5 bytes
{
if(byte0==2) //verifica se STX = 2
{
if((byte0 ^ byte1 ^ byte2 ^ byte3 ^ byte4)==0) //testa se XOR = 0 entre todos os bytes recebidos
{
if(byte1== dest) //verifica se msg destinada a seu endereo
{
if(byte2== orig) //verifica se enviada pelo mestre
{switch(byte3)
{
case1: //se posio 3 igual a 1 envia estado do botao 1
bot1est = digitalRead(bot1); //verifica o estado do botao 1
if(bot1est==HIGH) // se o boto est apertado
{
digitalWrite(bt2,LOW);// seta o pino de enable do max 485
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
delay(10);lcd.setCursor(0,0);
lcd.print("BOTAO1 APERTADO ");
Serial.write(STX); //envia STX
lcd.setCursor(3,1);
lcd.print(STX);
Serial.write(MASTER); //envia endereo do mestre pela serial
lcd.setCursor(5,1);
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
5/16
lcd.print(MASTER);
Serial.write(SLAVE); //envia endereo do escravo pela seriallcd.setCursor(7,1);
lcd.print(SLAVE);
Serial.write(1); //envia comando pela serial
lcd.setCursor(9,1);
lcd.print(1);
Serial.write(ACK); //envia ACKNOWLEDGE
lcd.setCursor(11,1);
lcd.print(ACK);
Serial.write(1); //envia dado pela serial
lcd.setCursor(13,1);
lcd.print(1);
BCC=((STX^MASTER)^(SLAVE^1)^(ACK^1)); // calcula BCC
Serial.write(BCC); //envia BCC pela serial
lcd.setCursor(15,1);
lcd.print(BCC);
digitalWrite(bt485,LOW);
byte0=0;
delay(3000); //delay de 3s}
else // se o boto no est apertado
{
digitalWrite(bt2,LOW);// seta o pino de enable do max 485
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
delay(10);
lcd.setCursor(0,0); //posiciona cursor do display em coluna 0 e linha 1
lcd.print("BOTAO1 NAO APERT"); //imprime a sentena entre aspas no display
Serial.write(STX); //envia STX pela porta seriallcd.setCursor(3,1); //posiciona cursor do display em coluna 3 e linha 0
lcd.print(STX); //imprime STX no diplay
Serial.write(MASTER); //envia endereo de destino pela porta serial
lcd.setCursor(5,1); //posiciona cursor do display em coluna 5 e linha 0
lcd.print(MASTER); //imprime endereo de destino no display
Serial.write(SLAVE); //envia endereo de origem pela porta serial
lcd.setCursor(7,1); //posiciona cursor do display em coluna 7 e linha 0
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
6/16
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
7/16
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
8/16
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
9/16
Serial.write(contover1); //envia byte de reconhecimento pela porta serial
lcd.setCursor(10,1); //posiciona cursor do display em coluna 11 e linha 0lcd.print(contover1); //imprime byte de reconhecimento no display
Serial.write(contbot1); //envia nmero de acionamentos do boto 1 pela porta serial
lcd.setCursor(12,1); //posiciona cursor do display em coluna 13 e linha 0
lcd.print(contbot1); //imprime nmero de acionamentos do boto 1 no display
BCC=((STX^MASTER)^(SLAVE^5)^(ACK)); //BCC (XOR entre bytes enviados)
Serial.write(BCC); //envia BCC pela porta serial
lcd.setCursor(14,1); //posiciona cursor do display em coluna 15 e linha 0
lcd.print(BCC); //imprime BCC no display
digitalWrite(bt485,LOW);// seta o pino de enable do max 485
byte0=0;
delay(3000); //delay de 3s
break;
case6: //leitura da contagem de acionamentos do boto 2
digitalWrite(bt2,LOW);// seta o pino de enable do max 485digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
delay(10);
Serial.write(STX); //envia STX pela porta serial
lcd.setCursor(0,1); //posiciona cursor do display em coluna 3 e linha 0
lcd.print(STX); //imprime STX no diplay
Serial.write(MASTER); //envia endereo de destino pela porta serial
lcd.setCursor(2,1); //posiciona cursor do display em coluna 5 e linha 0
lcd.print(MASTER); //imprime endereo de destino no display
Serial.write(SLAVE); //envia endereo de origem pela porta seriallcd.setCursor(4,1); //posiciona cursor do display em coluna 7 e linha 0
lcd.print(SLAVE); //imprime endereo de origem no display
Serial.write(6); //envia byte de comando pela porta serial
lcd.setCursor(6,1); //posiciona cursor do display em coluna 9 e linha 0
lcd.print(6); //imprime byte de comando no display
Serial.write(ACK); //envia byte de reconhecimento pela porta serial
lcd.setCursor(8,1); //posiciona cursor do display em coluna 11 e linha 0
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
10/16
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
11/16
lcd.print(NACK); //imprime byte de no reconhecimento no display
BCC=((STX^MASTER)^(SLAVE^6)^(NACK)); //BCC (XOR entre bytes enviados)
Serial.write(BCC); //envia BCC pela porta serial
lcd.setCursor(13,1); //posiciona cursor do display em coluna 13 e linha 0
lcd.print(BCC); //imprime BCC no display
digitalWrite(bt485,LOW);// seta o pino de enable do max 485
byte0=0;
delay(3000); //delay de 3s
}
}
}
}
}
}
}
else //lgica para recebimento de 6 bytes
{
if(byte0==2) //verifica se STX = 2
{
if((byte0 ^ byte1 ^ byte2 ^ byte3 ^ byte4 ^ byte5)==0) //testa se XOR = 0 entre todos os bytes recebidos
{if(byte1== dest) //confere endereo do escravo
{
if(byte2== orig) //confere endereo do mestre
{
if(byte3 == 3) //comando de escrita no led 1
{
if(byte4 ==1)
{
digitalWrite(led1,HIGH); //liga led 1
digitalWrite(bt2,LOW);// seta o pino de enable do max 485
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
delay(10);
Serial.write(STX); //envia STX pela porta serial
lcd.setCursor(3,1); //posiciona cursor do display em coluna 3 e linha 0
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
12/16
lcd.print(STX); //imprime STX no diplay
Serial.write(MASTER); //envia endereo de destino pela porta serial
lcd.setCursor(5,1); //posiciona cursor do display em coluna 5 e linha 0
lcd.print(MASTER); //imprime endereo de destino no display
Serial.write(SLAVE); //envia endereo de origem pela porta serial
lcd.setCursor(7,1); //posiciona cursor do display em coluna 7 e linha 0
lcd.print(SLAVE); //imprime endereo de origem no display
Serial.write(3); //envia byte de comando pela porta serial
lcd.setCursor(9,1); //posiciona cursor do display em coluna 9 e linha 0
lcd.print(3); //imprime byte de comando no display
Serial.write(ACK); //envia byte de reconhecimento pela porta serial
lcd.setCursor(11,1); //posiciona cursor do display em coluna 11 e linha 0
lcd.print(ACK); //imprime byte de reconhecimento no display
BCC=((STX^MASTER)^(SLAVE^3)^(ACK)); //BCC (XOR entre bytes enviados)
Serial.write(BCC); //envia BCC pela porta serial
lcd.setCursor(13,1); //posiciona cursor do display em coluna 13 e linha 0
lcd.print(BCC); //imprime BCC no display
delay(10);
//digitalWrite(bt485,LOW);// seta o pino de enable do max 485
byte0=0;
delay(3000); //delay de 3s}
else
if(byte4 ==0)
{
digitalWrite(led1,LOW); //desliga led 1
digitalWrite(bt2,LOW);// seta o pino de enable do max 485
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485delay(10);
Serial.write(STX); //envia STX pela porta serial
lcd.setCursor(3,1); //posiciona cursor do display em coluna 3 e linha 0
lcd.print(STX); //imprime STX no diplay
Serial.write(MASTER); //envia endereo de destino pela porta serial
lcd.setCursor(5,1); //posiciona cursor do display em coluna 5 e linha 0
lcd.print(MASTER); //imprime endereo de destino no display
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
13/16
Serial.write(SLAVE); //envia endereo de origem pela porta serial
lcd.setCursor(7,1); //posiciona cursor do display em coluna 7 e linha 0
lcd.print(SLAVE); //imprime endereo de origem no display
Serial.write(3); //envia byte de comando pela porta serial
lcd.setCursor(9,1); //posiciona cursor do display em coluna 9 e linha 0
lcd.print(3); //imprime byte de comando no display
Serial.write(ACK); //envia byte de reconhecimento pela porta serial
lcd.setCursor(11,1); //posiciona cursor do display em coluna 11 e linha 0
lcd.print(ACK); //imprime byte de reconhecimento no display
BCC=((STX^MASTER)^(SLAVE^3)^(ACK)); //BCC (XOR entre bytes enviados)
Serial.write(BCC); //envia BCC pela porta serial
lcd.setCursor(13,1); //posiciona cursor do display em coluna 13 e linha 0
lcd.print(BCC); //imprime BCC no display
//digitalWrite(bt485,LOW);// seta o pino de enable do max 485
byte0=0;
delay(3000); //delay de 3s
}
}
if( byte3 ==4) //comando de escrita no led 2
{
if(byte4==1){
digitalWrite(led2,HIGH); //liga led 2
digitalWrite(bt2,LOW);// seta o pino de enable do max 485
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
delay(10);
Serial.write(STX); //envia STX pela porta serial
lcd.setCursor(3,1); //posiciona cursor do display em coluna 3 e linha 0
lcd.print(STX); //imprime STX no diplaydigitalWrite(bt485,HIGH);// seta o pino de enable do max 485
Serial.write(MASTER); //envia endereo de destino pela porta serial
lcd.setCursor(5,1); //posiciona cursor do display em coluna 5 e linha 0
lcd.print(MASTER); //imprime endereo de destino no display
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
Serial.write(SLAVE); //envia endereo de origem pela porta serial
lcd.setCursor(7,1); //posiciona cursor do display em coluna 7 e linha 0
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
14/16
lcd.print(SLAVE); //imprime endereo de origem no display
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
Serial.write(4); //envia byte de comando pela porta serial
lcd.setCursor(9,1); //posiciona cursor do display em coluna 9 e linha 0
lcd.print(4); //imprime byte de comando no display
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
Serial.write(ACK); //envia byte de reconhecimento pela porta serial
lcd.setCursor(11,1); //posiciona cursor do display em coluna 11 e linha 0
lcd.print(ACK); //imprime byte de reconhecimento no display
BCC=((STX^MASTER)^(SLAVE^4)^(ACK)); //BCC (XOR entre bytes enviados)
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
Serial.write(BCC); //envia BCC pela porta seriallcd.setCursor(13,1); //posiciona cursor do display em coluna 13 e linha 0
lcd.print(BCC); //imprime BCC no display
delay(10);
byte0=0;
digitalWrite(bt485,LOW);// seta o pino de enable do max 485
delay(3000); //delay de 3s
}
else{
if(byte4 ==0)
{
digitalWrite(led2,LOW); //desliga led 2
digitalWrite(bt2,LOW);// seta o pino de enable do max 485
digitalWrite(bt485,HIGH);// seta o pino de enable do max 485
delay(10);Serial.write(STX); //envia STX pela porta serial
lcd.setCursor(3,1); //posiciona cursor do display em coluna 3 e linha 0
lcd.print(STX); //imprime STX no diplay
Serial.write(MASTER); //envia endereo de destino pela porta serial
lcd.setCursor(5,1); //posiciona cursor do display em coluna 5 e linha 0
lcd.print(MASTER); //imprime endereo de destino no display
Serial.write(SLAVE); //envia endereo de origem pela porta serial
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
15/16
-
7/25/2019 Trabalho Redes- implementaao rede em arduino
16/16
lcd.setCursor(11,1); //posiciona cursor do display em coluna 11 e linha 0
lcd.print(NACK); //imprime byte de no reconhecimento no display
BCC=((STX^MASTER)^(SLAVE^4)^(ACK)); //BCC (XOR entre bytes enviados)
Serial.write(BCC); //envia BCC pela porta serial
lcd.setCursor(13,1); //posiciona cursor do display em coluna 13 e linha 0
lcd.print(BCC); //imprime BCC no display
digitalWrite(bt485,LOW);// seta o pino de enable do max 485
byte0=0;
delay(3000); //delay de 3s
}
}
}}
}
}
}