En muchas tarjetas de conexión, la línea SDA también puede etiquetarse como SDI y la línea SCL como SCK
///////////////////////////// CÓDIGO MAESTRO //////////////////////////////////////////////////
#include <Wire.h> //Librería para I2C
byte envia_I2C_m = 0; // Datos a enviar
byte recibe_I2C_m = 0;
uint8_t slaveAddress = 0x58; // Dirección del dispositivo esclavo
uint8_t bytesToRead = 1; // Cantidad de bytes a leer
char boton = 0;
void leer_recibir_I2C(){
//BLOQUE ENVIAR
Wire.beginTransmission(slaveAddress); // Iniciar transmisión al dispositivo
Wire.write(envia_I2C_m); // Enviar datos
Wire.endTransmission(); // Finalizar transmisión
//BLOQUE LEER
Wire.requestFrom(slaveAddress, bytesToRead); // Solicitar datos al dispositivo
if (Wire.available()) {
recibe_I2C_m = Wire.read(); // Leer datos recibidos
}
}
void setup() {
Serial.begin(115200); //Monitor Serial
Serial.setDebugOutput(true); //Config para puerto serial *
Wire.begin();
}
void loop()
{
envia_I2C_m = random(10,70); //El valor del sensor equivalente a I2C
boton = Serial.read(); //Lee el valor del botón
leer_recibir_I2C();
if(boton == '1'){
delay(1000);
Serial.println(recibe_I2C_m); //Imprime el valor enviado por el esclavo
}
}
///////////////////////////// CÓDIGO ESCLAVO //////////////////////////////////////////////////
#include "Wire.h" //Librería para I2C
#define I2C_DEV_ADDR 0x58 //Dirección del Slave
byte envia_I2C_s = 0x41;
byte recibe_I2C_s = 0;
char boton = 0;
void envia_I2C_slave(){ //FUNCIÓN: Llama los datos enviados al maestros
Wire.write(envia_I2C_s);
}
void recibe_I2C_salve(int len){ //FUNCIÓN: Llama los datos recibidos del maestro
while(Wire.available()){
recibe_I2C_s = Wire.read();
}
}
void setup() {
Serial.begin(115200); //Monitor Serial
Serial.setDebugOutput(true); //Config para puerto serial *
Wire.begin((uint8_t)I2C_DEV_ADDR); //Dirección Slave
Wire.onReceive(recibe_I2C_salve); //Función para recibir
Wire.onRequest(envia_I2C_slave); //Función para enviar
}
void loop() {
envia_I2C_s = random(1,10); //El valor del sensor equivalente a I2C
boton = Serial.read(); //Lee el valor del botón
if(boton == '1'){
delay(1000);
Serial.println(recibe_I2C_s); //Imprime el valor enviado por el esclavo
}
}