Endorfin35+
Kayıtsız Üye
- Katılım
- 1 Mayıs 2020
- Mesajlar
- 4,435
Valla sabrınami diyeyim azmine mi diyeyim bilemedim ama... hayran kaldım.
Valla sabrınami diyeyim azmine mi diyeyim bilemedim ama... hayran kaldım.
ToplamSayi değişkeninde her zaman tuşladığın sayılar olacak.
arac_no değişkeni hesapla fonksiyonuna özel değişken. Kodların en altına yazdığımız fonksiyonu kullanmak için lazım olan yerde çağırmamız lazım.
Çağırmak için ise bu kodu kullanıyoruz.hesapla() ;
parantez içine ne yazarsan en alttaki fonksiyonda tanımadığımız arac_no değişkeninin içine o gider.
Örnek:
Böyle yapınca en alttaki fonksiyona 12345 rakamını gönderdik. Şuanda oradaki arac_no değişkeninin içinde 12345 var.Kod:int kafadan_sayi = 12345; hesapla(kafadan_sayi);
Yapmaz. arac_no değişkenini sadece en alttaki fonksiyon içinde kullanabilirsin.
A tuşunu test etmek istiyorsan ToplamSayi değişkenini kullanabilirsin. Veyahut kendin birşeyler yazabilirsin. İlla değişken olması şart değil.
Örnek:
Bu kodları A içine yazıp tuşa basarsan ekranda "Bu bir denemedir" yazar.Kod:lcd.setCursor(0,1) // LCD nin hangi satırına yazacağını belirtti. lcd.print(" "); // Satır başka yazı varsa silinir. lcd.print("Bu bir denemedir"); // Yeni mesajı yazdır.
ToplamSayi değişkenini sıfıra eşitle.
Kod:ToplamSayi = 0;
azimdir azimValla sabrınami diyeyim azmine mi diyeyim bilemedim ama... hayran kaldım.
# ye basınca mı çıkıyor, yoksa diğer harfleri mi test ediyorsun? Kodun son halini atar mısın?
keypaddrn basıp basamadığımı anlmamk için toplamsayıyı lcd ye yazdırdım# ye basınca mı çıkıyor, yoksa diğer harfleri mi test ediyorsun? Kodun son halini atar mısın?
#include <I2CKeyPad.h>
#include <Wire.h>
#include <LiquidCrystalTr_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const uint8_t KEYPAD_ADDRESS = 0x20; //yeni
I2CKeyPad keyPad; //yeni
int lcdCursor = 0;
int lcdprint = 0;
int ToplamSayi = 0;
void setup(){
Serial.begin(115200);
lcd.begin();
lcd.backlight();
// Ekrana yazdırılacak metin
for(int i=0; i<4; i++)
{
lcd.setCursor(0,1);
lcd.print(" MERCEDES BENZ ");
delay(250);
lcd.clear();
lcd.setCursor(0,2);
lcd.print(" MERCEDES BENZ ");
delay(250);
lcd.clear();
}
lcd.setCursor(0,1);
lcd.print(" MERCEDES BENZ ");
if (keyPad.begin(KEYPAD_ADDRESS) == false)
{
Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");// yeni
while(1);
}
}
void loop(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ARAC NUMARASI GIR ");
lcd.setCursor(0,1);
lcd.print(ToplamSayi);
uint8_t idxx = keyPad.getKey();
char idx = "123A456B789C*0#D"[idxx];
if ( isdigit(idx) ) {
uint8_t sayi = idx - '0';
ToplamSayi = ((ToplamSayi * 10) + sayi);
}
else if ( idx == '#' ) {
hesapla(ToplamSayi);
ToplamSayi = 0;
}
else if ( idx == '*' ) {
//Serial.print(ToplamSayi);
}
else if ( idx == 'A' ) {
//Serial.print(ToplamSayi);
}
else if ( idx == 'B' ) {
//Serial.print(ToplamSayi);
}
else if ( idx == 'C' ) {
//Serial.print(ToplamSayi);
}
else if ( idx == 'D' ) {
//Serial.print(ToplamSayi);
}
delay(300);
}
void hesapla(int arac_no) {
Serial.print("Fonksiyon içi:");
Serial.println(arac_no);
}
Fonksiyon içi yazan yeri c harfi yap. Kütüphanede ç ile ilgili sıkıntı var. Ayrıca daha küçük bir şey de yazabilirsin. Ekran 20 hane olduğu için sığmayıp sapıtabilir. Birde monitörün baud' unu kontrol et. 115200 olduğuna emin ol.[CHAR][/CHAR]
keypaddrn basıp basamadığımı anlmamk için toplamsayıyı lcd ye yazdırdım
# bastığımdada monitorde yazanda aynı şekilde oluyyor 5 rakamdan sonra
Kod:#include <I2CKeyPad.h> #include <Wire.h> #include <LiquidCrystalTr_I2C.h> LiquidCrystal_I2C lcd(0x27, 20, 4); const uint8_t KEYPAD_ADDRESS = 0x20; //yeni I2CKeyPad keyPad; //yeni int lcdCursor = 0; int lcdprint = 0; int ToplamSayi = 0; void setup(){ Serial.begin(115200); lcd.begin(); lcd.backlight(); // Ekrana yazdırılacak metin for(int i=0; i<4; i++) { lcd.setCursor(0,1); lcd.print(" MERCEDES BENZ "); delay(250); lcd.clear(); lcd.setCursor(0,2); lcd.print(" MERCEDES BENZ "); delay(250); lcd.clear(); } lcd.setCursor(0,1); lcd.print(" MERCEDES BENZ "); if (keyPad.begin(KEYPAD_ADDRESS) == false) { Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");// yeni while(1); } } void loop(){ lcd.clear(); lcd.setCursor(0,0); lcd.print(" ARAC NUMARASI GIR "); lcd.setCursor(0,1); lcd.print(ToplamSayi); uint8_t idxx = keyPad.getKey(); char idx = "123A456B789C*0#D"[idxx]; if ( isdigit(idx) ) { uint8_t sayi = idx - '0'; ToplamSayi = ((ToplamSayi * 10) + sayi); } else if ( idx == '#' ) { hesapla(ToplamSayi); ToplamSayi = 0; } else if ( idx == '*' ) { //Serial.print(ToplamSayi); } else if ( idx == 'A' ) { //Serial.print(ToplamSayi); } else if ( idx == 'B' ) { //Serial.print(ToplamSayi); } else if ( idx == 'C' ) { //Serial.print(ToplamSayi); } else if ( idx == 'D' ) { //Serial.print(ToplamSayi); } delay(300); } void hesapla(int arac_no) { Serial.print("Fonksiyon içi:"); Serial.println(arac_no); }
Fonksiyon içi yazan yeri c harfi yap. Kütüphanede ç ile ilgili sıkıntı var. Ayrıca daha küçük bir şey de yazabilirsin. Ekran 20 hane olduğu için sığmayıp sapıtabilir. Birde monitörün baud' unu kontrol et. 115200 olduğuna emin ol.
Bu sorunu aşmıştık. Tekrar olduğuna göre keypad de sıkıntı olabilir. Birde jumper kablolar dandiktir. Kabloları değiştirip dene.Baud 115200
6 karakter basıyorum ekrana onda sapıtıyor
123 yapıyorum ekranda 123 yazıyor # basıyorum monitör de de 123 yazıyor
12345 ekranda yazıyor 6 bastığımda ekranda mesela 2384 yazıyor ve bu sayı her seferinde değişiyor # bastığımda ekranda ne yazıyor ise onu monitöre yaZdiriyir
Yapmadığım kalmadı onları cikardim normal kablo ile denedim ama olmuyor yolacak saç yok kafada yolacagimBu sorunu aşmıştık. Tekrar olduğuna göre keypad de sıkıntı olabilir. Birde jumper kablolar dandiktir. Kabloları değiştirip dene.
I2C modülünü çıkartıp 8 pin ile bağlamayı deneyeceğimBöyle durumlarda devreyi en basite indirgeyip kısım kısım çalıştırmak lazım. Mesela önce sadece ekranı çalıştır. Sonra da sadece klavyeyi çalıştır. Herşeyi bir arada denersen, birşey çalışmayınca problem alanını daraltmak zor oluyor.
Böyle durumlarda devreyi en basite indirgeyip kısım kısım çalıştırmak lazım. Mesela önce sadece ekranı çalıştır. Sonra da sadece klavyeyi çalıştır. Herşeyi bir arada denersen, birşey çalışmayınca problem alanını daraltmak zor oluyor.
Ç harfi yerine C kullan demiştim. Kütüphanede ç harfi ile ilgili hata var. Ondan bile yapıyor olabilir.Merhaba ekranda yazan rakamları 6 haneden sonra farklı yazıyordu o sorunu şu şekilde çözüme ulaştırdım
İnit toplamsayi şeklinde yapıldığında Int -32,768 ile 32,767 arasindaki sayilari tutmak icin kullanılıyormuş
Long -2,147,483,648 ile 2,147,483,647 arasi sayılar için kullanılıyormuş
long toplamsayi ile ekrana yazılan rakamlar düzeldi
Fakat seri monitöre basılan sayılar da sorun var mesela ben 123546789 rakamlaribu tusladim # bastığımda monitörde 11429 sayısı çıkıyor
Ç harfi yerine C kullan demiştim. Kütüphanede ç harfi ile ilgili hata var. Ondan bile yapıyor olabilir.
Ayrıca lcd de doğru gösterirken arduino idesinde hem ç yi hemde rakamları yanlış göstermesi tuhaf. O ideyi silip temiz bir şekilde yeniden yükle. Bilgisayarında virüs taraması yap. Hatta varsa başka bilgisayarda dene.
Umarım resimde görünen breadboard daki onlarca kablo arduinoya bağlı iken bu testleri yapmıyorsundur.
İnteger diye yazdığın 32768 sayısı "short" veritipidir.
Long diye yazdığın 2147483648 sayısı "integer" veritipidır.
Long veritipi ise -9.223.372.036.854.775.808 ile +9.223.372.036.854.775.808 arasında ki değerleri almaktadır.
Ç harfi yerine C kullan demiştim. Kütüphanede ç harfi ile ilgili hata var. Ondan bile yapıyor olabilir.
Ayrıca lcd de doğru gösterirken arduino idesinde hem ç yi hemde rakamları yanlış göstermesi tuhaf. O ideyi silip temiz bir şekilde yeniden yükle. Bilgisayarında virüs taraması yap. Hatta varsa başka bilgisayarda dene.
Umarım resimde görünen breadboard daki onlarca kablo arduinoya bağlı iken bu testleri yapmıyorsundur.
İnteger diye yazdığın 32768 sayısı "short" veritipidir.
Long diye yazdığın 2147483648 sayısı "integer" veritipidır.
Long veritipi ise -9.223.372.036.854.775.808 ile +9.223.372.036.854.775.808 arasında ki değerleri almaktadır.
Bir anormallik var senin işte ama çözemedik. Ben int olarak kullanıyorum sorun olmuyor.merhaba;
şimdi o sorunu da bitti die düşünüyorum
hesapla fonksiyonu içerisinde ki init arac no değişkenini de long ile değiştirince lcd ekran monitor ve fonksiyon içi değişkenin içinde de aynı sayılar yazmaya başladı.
8815 eklentisine bak