I2C ekran normal ekran gibi kullanılabilir mi?

OnurKrkc

Hectopat
Katılım
19 Ağustos 2018
Mesajlar
291
Merhaba. Yapacağım bir devre için ekran almıştım, devrenin fotoğrafı aşağıda. Fakat ekranı i2C'li almışım. Bu ekranı bu devredeki gibi bağlayabilir miyim?
 

Dosya Ekleri

  • Screenshot_2022-05-19-22-00-56-580_com.miui.gallery.jpg
    Screenshot_2022-05-19-22-00-56-580_com.miui.gallery.jpg
    44,2 KB · Görüntüleme: 26
Son düzenleyen: Moderatör:
Merhaba. Yapacağım bir devre için ekran almıştım, devrenin fotoğrafı aşağıda. Fakat ekranı i2C'li almışım. Bu ekranı bu devredeki gibi bağlayabilir miyim?
I2C icin daha kolay, 4 kabloyu baglayip LiquidCrystal yerine LiquidCrystal_I2C kutuphanesini kullanacaksiniz. 12 kablo kesmekesi olmaz hem. Iki kutuphane uyumludur buyuk ihtimalle.
 
Nasıl yapıldığını keşke bilsem, yardımcı olma şansınız var mı? Size nereden ulaşabilirim?
Ozel iletisim adresi ver(e)miyoruz, diger uyeler de faydalanmali. Kodu atin, gostereyim.
LiquidCrystal lcd gibi olsa ornegin orayi LiquidCrystal_I2C yapmaniz gerekecek. Ek olarak da basta #include <LiquidCrystal_I2C.h> yapmaniz da gerekiyor.
 
Ozel iletisim adresi ver(e)miyoruz, diger uyeler de faydalanmali. Kodu atin, gostereyim.
LiquidCrystal lcd gibi olsa ornegin orayi LiquidCrystal_I2C yapmaniz gerekecek. Ek olarak da basta #include <LiquidCrystal_I2C.h> yapmaniz da gerekiyor.
Code.txt
Kod burada yüklü. Fakat malum tasarlanan devre de bu koda göre yapıldı onu da düzeltmem gerekiyor. Onları nereye bağlamam gerekiyor acaba?
 

Dosya Ekleri

  • Solar Tracker.png
    Solar Tracker.png
    112,5 KB · Görüntüleme: 29
LCD'yi I2C icin belirli pinlere baglayip tek satiri duzenliyorsunuz, olayin cozulmesi gerek. Kod derken yazili olandan (void setup void loop iceren) bahsediyorum.
Kod uzun olduğu için metin belgesi olarak paylaştım üstteki code.txt yazısında basarsanız açılması lazım. Koda baktığınızda geri kalan demek istediklerimi anlayacaksınız. Kod açılmıyorsa direk buraya da atabilirim.
 
Kod uzun olduğu için metin belgesi olarak paylaştım üstteki code.txt yazısında basarsanız açılması lazım. Koda baktığınızda geri kalan demek istediklerimi anlayacaksınız. Kod açılmıyorsa direk buraya da atabilirim.
Anladim kusura bakmayin.
SDA'yi A4, SCL'yi A5 pinine baglayin.
C++:
/*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);
}
Bu kodu yukleyin, Serial monitorde I2C adresi yazacaktir. Onu not edin.
0x27 vs. olmasi gerek ciktinin. Sondaki sayi degisebilir.

C++:
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

void UpDown();
void LeftRight();
Servo servo1;
Servo servo2;
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27'yi kendinize gore degistirin.
void setup() {
 
  lcd.begin(16,2);
  lcd.print("servo1 ");
  lcd.setCursor(0,1);
  lcd.print("servo2 ");
  servo1.attach(9);
  servo2.attach(10);
 
  servo1.write(90);
  servo2.write(90);
}

void loop(){
 
 int sensorTop = analogRead(A0);
 int sensorBottom = analogRead(A1);
 int sensorLeft = analogRead(A3);
 int sensorRight = analogRead(A4);

 int avgT=(sensorTop+sensorBottom)/2;
 int avgB=(sensorLeft+sensorRight)/2;
 int avgL=(sensorTop+sensorLeft)/2;
 int avgR=(sensorBottom+sensorRight)/2;


  if (avgT > avgB)
  {
       UpDown(sensorTop, sensorBottom);
  }
  if(avgT < avgB)
  {
    UpDown(sensorTop, sensorBottom);
  }
  if(avgL > avgR)
     {
      LeftRight(sensorLeft, sensorRight);
    }
  if(avgL < avgR)
     {
      LeftRight(sensorLeft, sensorRight);
    }
 delay(10);
}
void UpDown(int avgT, int avgB){
  int pos1= servo1.read();
    
  if(avgT < avgB){
     pos1 = --pos1;
    }
       else
     {
      pos1 = ++pos1;
     }
  servo1.write(pos1);
   lcd.setCursor(12,0);
 lcd.print(pos1);
 }
void LeftRight(int avgL, int avgR){
  int pos2= servo2.read();
  if(avgL < avgR)
   {
    pos2 = --pos2;
   }
      else
    {
     pos2 = pos2 + 1;
    }
  servo2.write(pos2);
  lcd.setCursor(12,1);
 lcd.print(pos2);
}

Duzenledigim kodda 0x27 yazan kismi degistirin ilk attigim programin ciktisina gore. Sonra calismasi gerek kodunuzun.
 
Anladim kusura bakmayin.
SDA'yi A4, SCL'yi A5 pinine baglayin.
C++:
/*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);
}
Bu kodu yukleyin, Serial monitorde I2C adresi yazacaktir. Onu not edin.
0x27 vs. olmasi gerek ciktinin. Sondaki sayi degisebilir.

C++:
#include <LiquidCrystal_I2C.h>
#include <Servo.h>

void UpDown();
void LeftRight();
Servo servo1;
Servo servo2;
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27'yi kendinize gore degistirin.
void setup() {
 
  lcd.begin(16,2);
  lcd.print("servo1 ");
  lcd.setCursor(0,1);
  lcd.print("servo2 ");
  servo1.attach(9);
  servo2.attach(10);
 
  servo1.write(90);
  servo2.write(90);
}

void loop(){
 
 int sensorTop = analogRead(A0);
 int sensorBottom = analogRead(A1);
 int sensorLeft = analogRead(A3);
 int sensorRight = analogRead(A4);

 int avgT=(sensorTop+sensorBottom)/2;
 int avgB=(sensorLeft+sensorRight)/2;
 int avgL=(sensorTop+sensorLeft)/2;
 int avgR=(sensorBottom+sensorRight)/2;


  if (avgT > avgB)
  {
       UpDown(sensorTop, sensorBottom);
  }
  if(avgT < avgB)
  {
    UpDown(sensorTop, sensorBottom);
  }
  if(avgL > avgR)
     {
      LeftRight(sensorLeft, sensorRight);
    }
  if(avgL < avgR)
     {
      LeftRight(sensorLeft, sensorRight);
    }
 delay(10);
}
void UpDown(int avgT, int avgB){
  int pos1= servo1.read();
  
  if(avgT < avgB){
     pos1 = --pos1;
    }
       else
     {
      pos1 = ++pos1;
     }
  servo1.write(pos1);
   lcd.setCursor(12,0);
 lcd.print(pos1);
 }
void LeftRight(int avgL, int avgR){
  int pos2= servo2.read();
  if(avgL < avgR)
   {
    pos2 = --pos2;
   }
      else
    {
     pos2 = pos2 + 1;
    }
  servo2.write(pos2);
  lcd.setCursor(12,1);
 lcd.print(pos2);
}

Duzenledigim kodda 0x27 yazan kismi degistirin ilk attigim programin ciktisina gore. Sonra calismasi gerek kodunuzun.
Çok teşekkürler deneyip bilgilendireceğim. Bir de diğer ekran varken orada bir direnç kullanılmış bu ekranda o direnci kullanmayacak mıyım? Malum i2c olanda direnci bağladıkları LED isimli pin yok
 

Yeni konular

Geri
Yukarı