środa, 27 kwietnia 2022

Wyszukiwarka adresów I2C w Arduino pro micro

Problem:

Brak komunikacji Arduino pro micro (24 pin) z wyświetlaczem 16x2 kontroler I2C PCF8574
wg rozpiski urządzenia arduino:

https://simba-os.readthedocs.io/en/latest/boards/arduino_pro_micro.html

potrzebujemy piny/sygnały: SDA, SCL, VCC, GND
! jeśli macie inną płytkę to nie sugerować się tym co piszą w tabelach zwykle tj. pin A4/A5 dla SDA/SCL. dobrym przykładem jest ww. płytka, gdzie takich oznaczeń nie ma.

Budowa skanera polega na podpięciu urządzenia I2C (w tym przypadku wyświetlacza) do Arduino prawidłowo (tj. 1:1), następnie kopiujemy kod znajdujący się poniżej do IDE Arduino > wgrywamy na urządzenie > w menu programu IDE Arduino klikamy Narzędzia > Monitor portu szeregowego > i powinno coś wypluwać (przykład):

I2C Scanner
Scanning...
I2C device found at address 0x38  !
done
---
w tym przypadku adresem jest 0x38

kod skanera, który trzeba wrzucić do IDE, a później do urządzenia (bez łapek):
👇

/*I2C_scanner
  This sketch tests standard 7-bit addresses.
  Devices with higher bit address might not be seen properly.*/
  
#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);
  Serial.println("\nI2C Scanner");
}

void loop() {
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for (address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);
}


👆

Powyższy kod nie jest mojego autorstwa
źródło: https://gist.github.com/jmas/01280e8c1aae8060c90c029e59647cd9
lub
https://www.makerguides.com/character-i2c-lcd-arduino-tutorial/

Adres gdzie szukać adresu I2C we właściwym kodzie i w moim przypadku trzeba zamienić 0x27 na 0x38 (zaznaczono na czerwono):


//...............JehanKandy........................ //...........www.jehankandy.com.................... //........www.github.com/JehanKandy................ //include liquidCrystal_I2C.h //Tools -> Manage Libraries and type liquidCrystal_I2C #include <LiquidCrystal_I2C.h> //define I2C address...... LiquidCrystal_I2C lcd(0x27,16,2); void setup() { lcd.init(); lcd.clear(); lcd.backlight(); lcd.setCursor(2,0); lcd.print("Hello World"); lcd.setCursor(2,1); lcd.print("JehanKandy"); } void loop() { } //.........coded by : JehanKandy.... //...........Thank You..............

źródło kodu:
https://create.arduino.cc/projecthub/jehankandt/arduino-16x2-lcd-display-with-i2c-hello-world-4b1a41