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: 67

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

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço