O microcontrolador do Arduino implementa internamente os resistores pull-up requeridos pelo protocolo I2C (normalmente de 1,5 Kohms); no entanto, é interessante colocar 2 resistores de 10 Kohms; o comprimento máximo dos cabos que levam os sinais I2C para as placas periféricas é de 1 metro, em função da capacitância (embora existam chips reforçadores de sinal I2C, como o Philips P82B715, que permite uma distância de até 50 metros).
A idéia básica é um Arduino funcionando como mestre, e um ou mais slaves.
Conforme o site Arduino.cc, pode ser utilizado o código abaixo para o Master:
Code for Master Reader - Program for Arduino 1
// Wire Master Reader
// by Nicholas Zambetti
// Demonstrates use of the Wire library
// Reads data from an I2C/TWI slave device
// Refer to the "Wire Slave Sender" example for use with this
// Created 29 March 2006
// This example code is in the public domain.
#include
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}
void loop()
{
Wire.requestFrom(2, 6); // request 6 bytes from slave device #2
while(Wire.available()) // slave may send less than requested
{
char c = Wire.read(); // receive a byte as character
Serial.print(c); // print the character
}
delay(500);
}
// by Nicholas Zambetti
// Demonstrates use of the Wire library
// Reads data from an I2C/TWI slave device
// Refer to the "Wire Slave Sender" example for use with this
// Created 29 March 2006
// This example code is in the public domain.
#include
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}
void loop()
{
Wire.requestFrom(2, 6); // request 6 bytes from slave device #2
while(Wire.available()) // slave may send less than requested
{
char c = Wire.read(); // receive a byte as character
Serial.print(c); // print the character
}
delay(500);
}
O Slave deve ter o seguinte código:
Code for Slave Sender - Program for Arduino 2
// Wire Slave Sender
// by Nicholas Zambetti
// Demonstrates use of the Wire library
// Sends data as an I2C/TWI slave device
// Refer to the "Wire Master Reader" example for use with this
// Created 29 March 2006
// This example code is in the public domain.
#include
void setup()
{
Wire.begin(2); // join i2c bus with address #2
Wire.onRequest(requestEvent); // register event
}
void loop()
{
delay(100);
}
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent()
{
Wire.write("hello "); // respond with message of 6 bytes
// as expected by master
}
// by Nicholas Zambetti
// Demonstrates use of the Wire library
// Sends data as an I2C/TWI slave device
// Refer to the "Wire Master Reader" example for use with this
// Created 29 March 2006
// This example code is in the public domain.
#include
void setup()
{
Wire.begin(2); // join i2c bus with address #2
Wire.onRequest(requestEvent); // register event
}
void loop()
{
delay(100);
}
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent()
{
Wire.write("hello "); // respond with message of 6 bytes
// as expected by master
}
No caso, o dispositivo slave se identifica como periférico 2 (Wire.begin(2);).
Olá Karl, blza?? comecei a programar arduino tem pouco tempo, e esses dias eu comprei um display de LCD de 16 x 2 que comunica via IIC (I2C) ou SPI, aqui no seu blog, eu consegui tirar algumas dúvidas sobre o protocolo, mas ainda não consegui fazer esse raio funcionar, você poderia me dar um apoio moral??? hahahaha
ResponderExcluirParabéns pelo conteúdo, é de ótima qualidade!
abraços!
Ai Bueno , abre esse link aqui
ResponderExcluirhttp://www.robocore.net/upload/Modulo5-Errata.png
Só preta atenção que o LCD pode estar de ponta cabeça
Amigo Também comprei um lcd i2C só que ai vem a dúvida já tenho ligado nas portas 4 e 5 analógicas um rtc relógio que usa os mesmos protocolos SDA e SCL como faço agora?
ResponderExcluirÉ só ligar a saída SDA do RTC e a saída SDA do i2C (ambas) na porta A4 e a saída SCL do RTC e a saída SCL do i2C (ambas) na porta A5.
ExcluirOlá pessoal, preciso fazer uma redundância de controladores, de forma que se algum arduino falhar, o outro deve assumir sem que haja perdas no processo de automação. Minha duvida é: O código que eu fiz para a automação do processo vai depois do delay? Ou ele vai ele fica no meio desse código descrito acima? Obrigado
ResponderExcluirOla tudo bem? Verificom que a mensagem fica instável no LCD, ou seja, se dermos um reset ela poderá certar ou errar. Se digitarmos outra, a chance de aparecer errada é maior que 50%. Que fazer?
ResponderExcluir