Scaner magistrali I2C
Po wgraniu programu, należy uruchomić monitor portu szeregowego ctrl + shift + m
jeśli adres urządzenia został wykryty np 3C...otrzyma znacznik FOUND...
3C należy wpisać w docelowym programie który obsługuje wyświetlacz, czujnik. jeśli żadne urządzenie nie zostało znalezione należy zamienić ze sobą pin SDA (A5) i SCL (A4)
#include "Wire.h"
extern "C" {
#include "utility/twi.h"
}
void scanI2CBus(byte from_addr, byte to_addr,
void(*callback)(byte address, byte result) )
{
byte rc;
byte data = 0; // not used, just an address to feed to twi_writeTo()
for( byte addr = from_addr; addr <= to_addr; addr++ ) {
rc = twi_writeTo(addr, &data, 0, 1, 0);
callback( addr, rc );
}
}
void scanFunc( byte addr, byte result ) {
Serial.print("addr: ");
Serial.print(addr,HEX);
Serial.print( (result==0) ? " found!":" ");
Serial.print( (addr%4) ? "\t":"\n");
}
byte start_address = 8;
byte end_address = 119;
void setup()
{
Wire.begin();
while(!Serial);// tylko leonardo, reszta //
Serial.begin(9600);
Serial.println("\nI2CScanner ready!");
Serial.print("starting scanning of I2C bus from ");
Serial.print(start_address,DEC);
Serial.print(" to ");
Serial.print(end_address,DEC);
Serial.println("...");
scanI2CBus( start_address, end_address, scanFunc );
Serial.println("\ndone");
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13,HIGH);
delay(200);
digitalWrite(13,LOW);
delay(200);
}