Bir de nodemcu da D1 ve D2 numaralı pinleri kullanıyorsun değil mi?
 
Hiç bir şey çalışmasa bile bu ayarın yapılması ve ekranı tamamen pikselle doldurması ya da boşaltması lazım. Modülü bozmuş ya da hatalı bağlamış olabilir misin? Hiç görüntü aldın mı?

Keypad bağlı değil diye düşünüyorum.
Keypad bağlı değil. Modülü bozsam scan ettiğimde 0x27 adresi göndermez diye düşünüyorum ama eminde değilim. Resimlerde gördüğüm gibi 4 pin dışarı bakacak şekilde lehimledim.

Bir de nodemcu da D1 ve D2 numaralı pinleri kullanıyorsun değil mi?
SCL = D1 pinine SDA =D2 pinine bağlıyorum.
 
Peki besleme için 5V girişi yaptığından emin misin? Kontrast bir gerilim bölücü ile ayarlanıyor. Eğer giriş gerilimin 5 V değilse bu soruna sebep olur.
 
Peki besleme için 5V girişi yaptığından emin misin? Kontrast bir gerilim bölücü ile ayarlanıyor. Eğer giriş gerilimin 5 V değilse bu soruna sebep olur.
Nodemcu dan 3.3v alıyorum. İ2c takılı değilken çalışıyordu. Belki onunla beraber yetersiz gelmiştir. Yarın 5v vererek deneyeyim birde.
 
Peki besleme için 5V girişi yaptığından emin misin? Kontrast bir gerilim bölücü ile ayarlanıyor. Eğer giriş gerilimin 5 V değilse bu soruna sebep olur.

LCD beslemesi her zaman ayrı olmalı....

Sorunu çözdüm.
Ayrıntılı anlatayım ki aynı sorunu yaşayanlar benim denediklerimi denemeden sonuca ulaşşın.
İlk işim lcd ye harici 5v vermek oldu. Ekran aydınlatması yandı ama görüntü hala yok. Scanner ile taratıp kodu alayım dedim scanner da error veriyor. Herhalde lcd yi bozdum deyip gidip yenisini aldım. Eve gelip taktım. Aynı tepkiyi veriyor.
Arduino idesini ileri düzeyde silip tekrar kurdum nafile.
Lcd beslemesini söküp tekrar nodemcu 3.3v pine taktım. Potu sonuna kadar açarak sonunda hayal meyal bir görüntü aldım. Ama beyaz olması gereken font siyah ve incecik. Sanki yarım pixellerden yazılmış gibi.
Anlaşıldı nodemcu 3.3v besleme yetmiyor. Harici besleme takıyorsun lcd çalışıyor ama veri yok.
En sonunda jeton düştü ve harici besleme GND sinden NodeMcu GND sine bir jumper kablo attım ve sonuç aşağıda.

20200921_155326.jpg
 
Ya da NodeMCU'nın Vin diye de geçen pininden 5V alabilirdin... :D Burası doğrudan USB girişindeki 5V'a bağlı.
 
Ya da NodeMCU'nın Vin diye de geçen pininden 5V alabilirdin... :D Burası doğrudan USB girişindeki 5V'a bağlı.
O hiç gelmedi aklıma. :D
Ama şimdi projeyi toplarken birde regülatör devresi eklemem gerekecek.
Aaaaa şöyle yapsan olur mu?
NodeMcu ya usb kablosu taksam. Ucunu da cep telefonu adaptörüne taksam. Dediğin gibi vin den 5v alsam sıkıntı olmaz değil mi? Hem regülatörden kurtulurum hem de Tek bir besleme ile bütün devrenin gücünü sağlamış olurum.
 
Amaç zaten tek kaynaktan beslemek. Regülatör ile niye uğraşasın.
 
Aha buldum. İşaretlediğim Pin de 5v var. Taktım çalışıyor :D

nodemcu 5v.png
 
VU pinini dene
 
O pinin açılımı VUSB (USB power output)
 
@uyesercan şimdi de keypad de takıldık. 2-3 günde bununla uğraşırım artık.
Senin kodlara keypadi entegre etmek için Keypad_I2C kütüphanesi kullanarak bir çalışma yaptım.
Kodu çalıştırdığımda "Ürün no giriniz" kısmında beklemeyip loop fonksiyonuna giriyor ve hiç bir tuşa basmamış olmama rağmen ekrana 1 değerini yazdırıyor.
Kodun son durumu şöyle;
C:
/*
TuşlaGelsin v1.0

Bu yazılım, NODEMCU v0.9 üzerinde ESP8266 ile 4x4 tuş takımı ve 4x20 I2C LCD ekran kullanılarak geliştirilmiştir.
# tuşu enter gibi davranır. * tuşu ise hatalı girişlere karşı girilen değeri sıfırlar.
Dijital pinleri korumak ve terminale gelen ters soru işaretini kaybetmek için PCF8574 gibi bir entegre ile tuş takımı için de I2C kullanılabilir.
Not: Tuş takımı için D8'pini kullanılamıyor. Fiziksel olarak "10k PULL_DOWN" direncine sahip.
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Keypad_I2C.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
#include "Wire.h"

#define keypad_addr 0x20
/* ******************** Dikkat! bu tanımları özelleştir! ******************** */
    // WiFi ayarları
    const char* WiFi_Adi="xxxxxxx";
    const char* WiFi_Sifre = "xxxxxxx";
    // Verinin gönderileceği SSL URL adresi
    String url = "https://www.google.com/esp_post.php?siparis=";
    // true seri port ile heberleşir, false kapatır.
    bool konsol = false;
    // LCD ekran bilgileri
    LiquidCrystal_I2C lcd(0x27,16,2);
    /*uint8_t lcd_adres = 0x3F;
    uint8_t lcd_sutun = 20;
    uint8_t lcd_satir = 4;*/
    // Keypad ayarları
    //const uint8_t KEYPAD_ADDRESS = 0x20;
    //I2CKeyPad TusTakimi;
    const byte n_rows = 4;
    const byte n_cols = 4;
    char keys[n_rows][n_cols] = {    {'1', '2', '3', 'A'},
                                    {'4', '5', '6', 'B'},
                                    {'7', '8', '9', 'C'},
                                    {'*', '0', '#', 'D'}};
    byte rowPins[n_rows] = {0, 1, 2, 3};
    byte colPins[n_cols] = {4, 5, 6, 7};

/* ******************** Dikkat! Bu değişkenler kodun iç yapısı için kullanılır. Değiştirmeyin! ******************** */
    int ToplamSayi = 0;
    int NoktaSay = 0;

//LiquidCrystal_I2C lcd(lcd_adres, lcd_sutun, lcd_satir);
Keypad_I2C TusTakimi = Keypad_I2C(makeKeymap(keys), rowPins, colPins, n_rows, n_cols, keypad_addr, PCF8574);

void setup() {
    /*pinMode(D0, INPUT_PULLUP);
    pinMode(D3, INPUT_PULLUP);
    pinMode(D4, INPUT_PULLUP);
    pinMode(D5, INPUT_PULLUP);
    pinMode(D6, INPUT_PULLUP);
    pinMode(D7, INPUT_PULLUP);
    pinMode(D9, INPUT_PULLUP);
    pinMode(D10, INPUT_PULLUP);
    delay(500);*/
    if (konsol) {
        Serial.begin(115200);
        delay(500);
        Serial.println(F("Tusla Gelsin v1"));
    }
    lcd.init();
    lcd.backlight();
    lcd.setCursor(0,0);
    lcd.print("Tusla Gelsin v1");
    WiFi.mode(WIFI_STA);
    WiFi.begin(WiFi_Adi,WiFi_Sifre);
    lcd.setCursor(0,1);
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        if (konsol) {
            Serial.print(".");
        }
        if (NoktaSay++ < 20) {
            lcd.print(".");
        } else {
            SatirTemizle(1);
            NoktaSay = 0;
        }
    }
    if (konsol) {
        lcd.setCursor(0,0);
        Serial.print("WiFi'ya baglandi");
        lcd.setCursor(0,1);
        Serial.print("IP:");
        lcd.setCursor(4,1);
        Serial.print(WiFi.localIP());
    }
    SatirTemizle(0);
    lcd.setCursor(0,0);
    lcd.print("IP:");
    lcd.setCursor(4,0);
    lcd.print(WiFi.localIP());
    SatirTemizle(1);
    lcd.setCursor(0,1);
    lcd.print("Urun No Giriniz");
}

void loop() {
    char tus_degeri = TusTakimi.getKey();
    if ( isdigit(tus_degeri) ) {
        uint8_t sayi = tus_degeri - '0';
        ToplamSayi = ((ToplamSayi * 10) + sayi);
        if (konsol) {
            //Serial.println(tus_degeri);
            Serial.print( "Tuslanan Sayi:" );
            Serial.println(ToplamSayi);
        }
        SatirTemizle(1);
        lcd.print(ToplamSayi);
    } else if ( tus_degeri == '#' ) {
// # tuşu enter gibi davranır
        SatirTemizle(1);
        lcd.print("Siparis isteniyor.");
        if (konsol) {
            Serial.print(ToplamSayi);
            Serial.println( " sipariş istendi.\n" );
        }
        int urlEk = ToplamSayi;
        String TamUrl = url + urlEk;
        SiparisVer(TamUrl);
        ToplamSayi = 0;
    } else if ( tus_degeri == '*' ) {
// * tuşu yanlış girişi sıfırlar....
        ToplamSayi = 0;
        if (konsol) {
            Serial.print("ToplamSayi ");
            Serial.print(ToplamSayi);
            Serial.println(" sıfırlandı.\n");
        }
        SatirTemizle(1);
        lcd.print("sayi iptal edildi");
    } else if ( tus_degeri == 'A' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("A tuşuna basıldı");
            }
        SatirTemizle(1);
        lcd.print("A");
    } else if ( tus_degeri == 'B' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("B tuşuna basıldı");
            }
        SatirTemizle(1);
        lcd.print("B");
    } else if ( tus_degeri == 'C' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("C tuşuna basıldı");
        }
        SatirTemizle(1);
        lcd.print("C");
    } else if ( tus_degeri == 'D' ) {
// Bu tuş hızlıca favori ürün siparişi verebilir!
        if (konsol) {
            Serial.println("D tuşuna basıldı");
        }
        SatirTemizle(1);
        lcd.print("D");
    }
}

/*
* @brief    Bu fonksiyon belirtilen url adresine GET değeri taşır ve apache koduna göre sonuçları ekran yazdırır.
*/
void SiparisVer(String TamUrl) {
    std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
    client->setInsecure();
    HTTPClient https;
/*
    if (konsol) {
        Serial.println(TamUrl);
    }
*/
    if (https.begin(*client, TamUrl )) {
        // HTTPS
        int httpKod = https.GET();
        if (httpKod > 0) {
            if (konsol) {
                Serial.printf("[HTTPS] Header Kod: %d\n", httpKod);
            }
            if (httpKod == HTTP_CODE_OK) {
                String SayfaDonus = https.getString();
                if (konsol) {
                    Serial.print(String("[HTTPS] Sayfanın yaptığı dönüş: ") + SayfaDonus);
                }
                SatirTemizle(1);
                lcd.print(SayfaDonus);
            } else {
                SatirTemizle(1);
                lcd.print("Sayfa cevap vermiyor");
            }
        } else {
            if (konsol) {
                Serial.printf("[HTTPS] GET... uyarı, hata: %s\n\r", https.errorToString(httpKod).c_str());
            }
            SatirTemizle(1);
            lcd.print("Hata:");
            lcd.setCursor(6,3);
            lcd.print(httpKod);
        }
        https.end();
    } else {
        if (konsol) {
            Serial.printf("[HTTPS] Bağlantı Hatası!\n\r");
        }
        SatirTemizle(1);
        lcd.print("Baglanti Hatasi!");
    }
}

/*
* @brief    Bu fonksiyon LCD ekranda belirtilen satırı temizler ve satır başına döner.
*/
void SatirTemizle(int satir) {
    lcd.setCursor(0,satir);
    lcd.print("                ");
    lcd.setCursor(0,satir);
}

20200922_152533.jpg
 
Kurcalamaya devam ediyorum.
Son duruma göre aşağıdaki resimlerde görüleceği gibi sanırım sürekli taramadan dolayı ekrana hiç durmadan "0" basıyor.
Ben bir tuşa bastığımda ise mesela "A" tuşu, ekrana sürekli A0 basıyor.
Kapattığım kod satırları ekrana bir yığın veri basıyordu. Kapata kapata sıfıra kadar düşürdüm ama sıfırı yok edemiyorum.

Kodlar şöyle;
C:
//
//    FILE: I2Ckeypad_demo02.ino
//  AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// PURPOSE: demo
//     URL: https://github.com/RobTillaart/I2CKeyPad
//
// HISTORY:
// 2019-10-01 0.0.1 initial version
// 2020-06-26 0.1.0 updated with lib

// PCF8574
//    pin p0-p3 rows
//    pin p4-p7 colums
// 4x4 or smaller keypad.

#include "Wire.h"
#include "I2CKeyPad.h"

const uint8_t KEYPAD_ADDRESS = 0x20;

I2CKeyPad keyPad;

uint32_t start, stop;
uint32_t lastKeyPressed;

void setup()
{
  Serial.begin(115200);
  //Serial.println(__FILE__);

  Wire.begin();
  //Wire.setClock(400000);
  if (keyPad.begin(KEYPAD_ADDRESS) == false)
  {
    Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");
    while(1);
  }
}


void loop()
{
  //uint32_t now = millis();

 
//    lastKeyPressed = now;

    //bool c = keyPad.isConnected();
    //bool b = keyPad.isPressed();
    //uint8_t lk = keyPad.getLastKey();
    
    //start = micros();
    uint8_t idx = keyPad.getKey();
    //stop = micros();
    //Serial.print(millis());
    //Serial.print("\t");
    //Serial.print(idx);
    //Serial.print("\t");
    Serial.print((String)"D#0*C987B654A321"[idx]);
    //Serial.print("\t");
    //Serial.print(lk);
    //Serial.print("\t");
    //Serial.print(b?"True":"False");
    //Serial.print("\t");
    //Serial.print(c?"True":"False");
    //Serial.print("\t");
    Serial.println(start);
 
}

// -- END OF FILE --

a harfi.png
karetuş.png
nokey.png
 
@Gokrtl zaten döngünde (loop) aşağıdaki 3 satır var.

uint8_t idx = keyPad.getKey();
Serial.print((String)"D#0*C987B654A321"[idx]);
Serial.println(start);

Bunlardan ilki tuşa basılmış mı diye sorguluyor. İkincisi basılı tuşu iletiyor. Son satır ise her defasında integer olarak tanımladığın start'ı gönderiyor.

Burada sadece "start" değişmiyor...

Ayrıca kodu taramaya çok da gerek yok. Seri monitörde metin bir alt satıra geçiyorsa print komutunun sonunda PHP'den de aşına olacağın '\n' <print yerine println kullanırsan new line karakteri eklemeden bu işi yapar> new line karakterini takip edebilirsin.

Senin durumda bastığın tuştan sonra 0 geliyor (A0) sonra yeni bir satıra geçip devam ediyor ya da belirttiğin gibi hiç bir şey yapmazsan 0 gönderip başa dönüyor.

Özetle Serial.println(start); satırını kaldır.

Ayrıca döngün çok kısa olduğu için hızlı tekrar yapıyor. O yüzden ekranda çok tekrar görüyorsun. Loop'un sonuna delay(1000); komutu eklersen, döngü tamamlandığında başa dönmek için 1 saniye bekler...
 
@Gokrtl zaten döngünde (loop) aşağıdaki 3 satır var.

uint8_t idx = keyPad.getKey();
Serial.print((String)"D#0*C987B654A321"[idx]);
Serial.println(start);

Bunlardan ilki tuşa basılmış mı diye sorguluyor. İkincisi basılı tuşu iletiyor. Son satır ise her defasında integer olarak tanımladığın start'ı gönderiyor.

Burada sadece "start" değişmiyor...

Ayrıca kodu taramaya çok da gerek yok. Seri monitörde metin bir alt satıra geçiyorsa print komutunun sonunda PHP'den de aşına olacağın '\n' <print yerine println kullanırsan new line karakteri eklemeden bu işi yapar> new line karakterini takip edebilirsin.

Senin durumda bastığın tuştan sonra 0 geliyor (A0) sonra yeni bir satıra geçip devam ediyor ya da belirttiğin gibi hiç bir şey yapmazsan 0 gönderip başa dönüyor.

Özetle Serial.println(start); satırını kaldır.

Ayrıca döngün çok kısa olduğu için hızlı tekrar yapıyor. O yüzden ekranda çok tekrar görüyorsun. Loop'un sonuna delay(1000); komutu eklersen, döngü tamamlandığında başa dönmek için 1 saniye bekler...
Kodu şu şekilde düzenleyip senin kodlara ekledim.
C:
uint8_t idxx = keyPad.getKey();
char idx = "D#0*C987B654A321"[idxx];
loop'un en sonuna da delay(500); koydum. Bu şekilde çalışıyor lakin sürekli taramadan dolayı basılan sayıyı peş peşe yazıyor.
Delay süresi ile oynayarak parmak hassasiyetini ben ayarlayabiliyorum ancak annem ayarlayamaz. O yüzden ister uzun bassın, ister kısa bassın her basmada sadece bir rakam girecek şekilde ayarlayamaz mıyız?
 
Ayarlanır ama tüm kod bittiğinde kodu işlemesi zaten zaman alacak. O nedenle şimdi bunu düşünmeye gerek yok.

Zaten bu gecikmeleri komut aldıktan sonra yapılan işlemlerin sonuna eklemek lazım. Hem tepki süren iyileşir hem de işlemi bir defa yapmayı garantiler.
 
Ayarlanır ama tüm kod bittiğinde kodu işlemesi zaten zaman alacak. O nedenle şimdi bunu düşünmeye gerek yok.

Zaten bu gecikmeleri komut aldıktan sonra yapılan işlemlerin sonuna eklemek lazım. Hem tepki süren iyileşir hem de işlemi bir defa yapmayı garantiler.
Tam anlayamadım. Ben 2 ye basınca ekrana 222 yazıyor. Bu rakamın uzunluğu benim butona baskı süreme bağlı. Mesela 5sn bassam 222222222222222 oluyor. Bunu nasıl teke düşüreceğimi anlayamadım. Anneme desem ki "buna sadece 0,5sn bas" huyu değildir ama küfür edebilir. :D
 
O gördüğün ekrandaki görüntü. Senin idx her defasında sadece 1 kere 2 komutunu işliyor. Tek satır olduğu için 2222 gibi görüyor.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,833
Mesajlar
99,481
Üyeler
2,477
Son üye
krmz

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top