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
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]
}
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?