Boa noite meus colegas de profissão, estou tendo uma certa dificuldade em fazer uma comunicação I2C entre arduinos e gostaria da costumeira ajuda dos mestres aqui presentes.

Pois bem, minha aplicação é assim:
Um arduino nano (Slave) lê 6 entradas analógicas. Quando o Arduino UNO (master) solicita ao slave as leituras, o slave responde atrás do I2C quais os valores lidos dos 6 sensores.
O master captura essa leitura pelo I2C e comunica via ethernet com o pc.

Não estou conseguindo ler estes valores no arduino master através da I2C. Conseguem me ajudar?
Caso tenham alguma dúvida, podem perguntar. Obrigado!

Exibições: 411

Responder esta

Respostas a este tópico

Bom dia RES,

não entendi:

1.  " o Arduino UNO (master) solicita ao slave as leituras,"

2.  " Não estou conseguindo ler estes valores no arduino master através da I2C. " 

RV

Boa tarde, 

Já fiz a comunicação I2C entre dois Arduinos em 2014.

http://labdegaragem.com/forum/topics/projeto-alarme-sem-fio-arduino...

Poste os programas que esta usando. Lembre-se dos resistores de pullup da interface I2C. 

Boa noite Murta,

sim, no Sketch estou usando os resistores.
Vou estudar seu código e tentar resolver meu problema.

Segue os códigos:

/**
*
* MESTRE: UNO
*
*/

#include <Wire.h>
#define SLAVE 0x0A

int estadoLed = 0;

void setup()
{
Wire.begin();
Serial.begin(9600);
}

void loop()
{
// Recebe do escravo de endereço 0x0A a mensagem de 2 bytes.
Wire.requestFrom(SLAVE, 2);
while (Wire.available())
{
int sensorValue1 = Wire.read();
int sensorValue2 = Wire.read();
Serial.println(sensorValue1);
Serial.println(sensorValue2);
}
delay(1000);
}

/*
*
* SLAVE: ARDUINO NANO
*
*/

#include <Wire.h>

#define LED 4
#define SLAVE 0x0A

int sensorPin1 = A0;
int sensorPin2 = A1;
int sensorValue1 = 0;
int sensorValue2 = 0;

void setup()
{
Wire.begin(SLAVE);
Serial.begin(9600);
Wire.onRequest(requestEvent);
pinMode(LED, OUTPUT);
}

void loop(){}


void requestEvent()
{
sensorValue1 = analogRead(sensorPin1);
sensorValue1 = sensorValue1/4; //divisão realizada devido a resolução de 10bits
Wire.write(sensorValue1);
sensorValue2 = analogRead(sensorPin2);
sensorValue2 = sensorValue2/4;
Wire.write(sensorValue2);
Serial.println(sensorValue1);
Serial.println(sensorValue2);
}

Boa noite, 

A comunicação entre os dois Arduinos, foi feita pelos pinos Analog 4 (SDA)  e pino Analog 5 (SCL) . 

Usei resistores de 4,7K ohms para pullup nas duas linhas  (conectados ao +5V) .

Não se esqueça de conectar o terra dos dois Arduinos.

Murta,

tomei o cuidado com os gnd's e os pinos SDA e SCL. Os resistores tbm estão conectados. 

O que está ocorrendo é o seguinte, o master 'pergunta' ao slave sobre os valores lidos na analogicas, e fica aguardando a resposta, porem quando o master recebe as respostas, estão diferentes das leituras feitas pelo slave. observe que eu plotei na serial tanto do master quanto do slave, e as mesmas não 'batem'. Desde já agradeço sua ajuda

Bom dia, 

Você testou o meu programa? 

Entendeu como funciona?

Poste também o programa que esta tentando usar. Anexe o arquivo por favor.

Não cole aqui.

Sugestões de como "postar" no LdG por Rui Viana

Boa noite Murta,

vi as sugestões de como postar no LdG. Farei como as dicas. Muito Obrigado.

Sobre a minha discussão aberta, depois da ajuda de vcs e algumas imersões em livros consegui fazer com que dois ou mais arduino nano slaves se comuniquem com o Mestre.

Confesso a vcs que depois da aplicação pronta achei uma "gambiarra" e vou portar toda a estrutura para os circuitos integrados dedicados para isso como os PCF8574, entre tantos.

Muito obrigado a vcs, e contem comigo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço