Trabalho Redes- implementaçao rede em arduino

download Trabalho Redes- implementaçao rede em arduino

of 16

Transcript of Trabalho Redes- implementaçao rede em arduino

  • 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

    }

    }

    }}

    }

    }

    }