Transmissao de dados serial entre arduinos divergentes

Projetos de arduino
carlucio rodrigues
Membro
Mensagens: 3
Registrado em: 16/Set/2018, 19:41

Transmissao de dados serial entre arduinos divergentes

Mensagem por carlucio rodrigues » 16/Set/2018, 20:06

Ola,

Queria que me ajudassem a resolver uma situaçao.

Tenho um arduino que tem 16 entradas com pul up ativo que estou convertendo para enviar serialmente de um arduino para outro conforme codigo abaixo;

Código: Selecionar todos


unsigned int digital[] = {2,3,4,5,6,7,10,11,12,13,14,15,16,17,18,19};// d2,d3,d4,d5,d6,d7,d10,d11,d12,d13,a0,a1,a2,a3,a4,a5


unsigned int contents = 0;


void setup()
{
 Serial.begin(115200);

  for(int i=0; i<16; i+=1)
     pinMode(digital[i], INPUT_PULLUP);

 
//  for(int i=0; i<4; i+=1)
//     pinMode(digital2[i], INPUT_PULLUP);   


     
  
} //end setup

void loop()
{

  for(int i=0; i<16; i+=1)
     contents |= (digitalRead(digital[i]) << i);


  Serial.write(contents);
 // Serial.println(contents);
  contents = 0;

  delay(500);


  
} //end loop
o segundo arduino recebe o seguinte codigo e deveria transferir para o segundo os dados modificados do primeiro arduino :

Código: Selecionar todos

#include <SPI.h>
#include <Ethernet.h>

#include "Mudbus.h"

Mudbus Mb;
//Function codes 1(read coils), 3(read registers), 5(write coil), 6(write register)
//signed int Mb.R[0 to 125] and bool Mb.C[0 to 128] MB_N_R MB_N_C
//Port 502 (defined in Mudbus.h) MB_PORT




unsigned int digital[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};// d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,a0,a1,a2,a3
char contents  = 0;




void setup()
{
  uint8_t mac[]     = { 0x90, 0xA2, 0xDA, 0x00, 0x51, 0x06 };
  uint8_t ip[]      = { 192, 168, 1, 77 }; //{ 192, 168, 1, 8 };
  uint8_t gateway[] = { 192, 168, 1, 20 };  //{ 192, 168, 1, 1 };
  uint8_t subnet[]  = { 255, 255, 255, 0 };
  Ethernet.begin(mac, ip, gateway, subnet);
  //Avoid pins 4,10,11,12,13 when using ethernet shield

  delay(5000);
  Serial.begin(115200);


// for(int i=0; i<16; i+=1)
 //    pinMode(digital[i], OUTPUT);
      // pinMode(response, OUTPUT);
  
 
}

void loop()
{



 
if(Serial.available())///////////
   {
   delay(100);
     contents = Serial.read();//////////////////


      
    // Serial.println(contents);
   //   response = contents;
    //Serial.println (contents);
   // for( int i=0; i<16; i+=1)
   // response[i] = contents & (0x01 << i);

//        for(unsigned int i=0; i<16; i+=1)
  //      digitalWrite(digital[i], response[i]);

   }





  Mb.Run();
  
  //Analog inputs 0-1023
  Mb.R[0] = analogRead(A0); //pin A0 to Mb.R[0]
  Mb.R[1] = analogRead(A1);
  Mb.R[2] = analogRead(A2);
  Mb.R[3] = analogRead(A3);
  Mb.R[4] = analogRead(A4);
  Mb.R[5] = analogRead(A5);

  //Analog outputs 0-255
  analogWrite(6, Mb.R[6]); //pin ~6 from Mb.R[6]

  //Digital inputs
  // Mb.C[7] = digitalRead(7); //pin 7 to Mb.C[7]


    Mb.R[7] = contents; // response; //65000; //contents;//20;

    
  //Digital outputs
  //digitalWrite(8, Mb.C[8]); //pin 8 from Mb.C[8]
//  digitalWrite(val, Mb.C[8]); //pin 8 from Mb.C[8]
}
o problema é o seguinte, o primeiro envia os 16bits ou 2 bytes corretamente. So que no segundo quando aciono determinadas portas do primeiro por exexmplo, pino 11, 12, 13,14,15,16,17 nao reconhece no segundo mas no primeiro sim, pelo serial monitor percebesse a diferençao dos bits mudando.

Para ficar mais claro sem nenhuma entrada ativa o primeiro envia para o segundo o valor 65535 e o mesmo recebe esse valor.
Se eu por exemplo acionar entrada a0 ou pino 14(aterrar a entrada) no primeiro aparece o valor 65247(VERIFICADO NO SERIAL MONITOR DO PRIMEIRO ARDUINO) e no segundo nao muda nada nas entradas de 10 para cima. Nao entendi porque.

De acordo com o codigo e pela exeperiencia do pessoal o que estou fazendo errado?

GabrielMajaron
Membro
Mensagens: 27
Registrado em: 05/Jun/2018, 15:52

Re: Transmissao de dados serial entre arduinos divergentes

Mensagem por GabrielMajaron » 17/Out/2018, 13:14

Olá, tudo bem?

Cara, que estranho isso em... Já tentou usar o Serial.flush() após cada envio? Estou cogitando que este delay(100) do segundo código pode atrapalhar, mas provavelmente não deve ser isso :/

Responder