OnurKrkc
Hectopat
- Katılım
- 19 Ağustos 2018
- Mesajlar
- 294
I2C icin daha kolay, 4 kabloyu baglayip LiquidCrystal yerine LiquidCrystal_I2C kutuphanesini kullanacaksiniz. 12 kablo kesmekesi olmaz hem. Iki kutuphane uyumludur buyuk ihtimalle.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.
Ozel iletisim adresi ver(e)miyoruz, diger uyeler de faydalanmali. Kodu atin, gostereyim.Nasıl yapıldığını keşke bilsem, yardımcı olma şansınız var mı? Size nereden ulaşabilirim?
LiquidCrystal lcd
gibi olsa ornegin orayi LiquidCrystal_I2C
yapmaniz gerekecek. Ek olarak da basta #include <LiquidCrystal_I2C.h>
yapmaniz da gerekiyor.Code.txtOzel iletisim adresi ver(e)miyoruz, diger uyeler de faydalanmali. Kodu atin, gostereyim.
LiquidCrystal lcd
gibi olsa ornegin orayiLiquidCrystal_I2C
yapmaniz gerekecek. Ek olarak da basta#include <LiquidCrystal_I2C.h>
yapmaniz da gerekiyor.
LCD'yi I2C icin belirli pinlere baglayip tek satiri duzenliyorsunuz, olayin cozulmesi gerek. Kod derken yazili olandan (void setup void loop iceren) bahsediyorum.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?
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.LCD'yi I2C icin belirli pinlere baglayip tek satiri duzenliyorsunuz, olayin cozulmesi gerek. Kod derken yazili olandan (void setup void loop iceren) bahsediyorum.
Anladim kusura bakmayin.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.
/*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);
}
#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);
}
Ç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 yokAnladim kusura bakmayin.
SDA'yi A4, SCL'yi A5 pinine baglayin.
Bu kodu yukleyin, Serial monitorde I2C adresi yazacaktir. Onu not edin.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); }
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.
I2C icin gerek yok.Ç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
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.