NodeMcu Programlama

Anladığım kadarıyla o tablo, hangi tuşa basıldığında hangi kodun döndürüleceğini belirliyor. A ya karşılık gelen yere A yerine '\n' koyarsan, A ya basınca sana '\n' karakter' gelir. Ama bu mantıklı olmaz, sadece kafa karıştırır. Basılan tuş A ise, karakter olarak da A gelmesini istemek lazım. Program yazmak zaten yeterince karmaşık, bir de böyle kendine zihinsel tuzaklar kurmamak lazım :)
Bence mantıklı. A harfinin üzerine bir Enter sticker'ı yapıştırmaya bakar iş :D
Enter a ihtiyacın varsa ve keypadin de yoksa bence bu seçenek ideal.
 
Gülmekten karnım ağrıdı :D
Sayın ustam. Sen kod konusunda baya iyisin. Şu benim koda bir el atsan?
Php olsa çat pat yapacağım da bu dilleri hiç beceremiyorum. Uğraşıyorum uğraşıyorum bulamıyorum. Bişey değil proje yatacak bu gidişle :D
 
Dizi değişkeninin içindekilerinin doğru yazılışını bir türlü bulamadım. Foreach döngüsü nodemcu da çalışmıyor. Çalışsa çatır çatır yazdıracağım ama yok.
 
Diziyi gerek yok, basamakları birleştirmek için basitçe bir değişkeni toplarsın. Aşağıdaki kod 1+2+3 = 123 (yüz yirmi üç) yazıp "*" tuşuna bastığında 123 sayısını istediğin yere gönderir. A tuşunu ise hatalı girişe karşı temizlemek için kullandım.

Kodu yazmışken hurdalıktan bulduğum ESP v0.9'u da denedim. İkisi de sorunsuz çalışıyor.


1599789782097.png


Kod:
#include <Keypad.h>
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 colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
int toplamrakam = 0;
void setup(){
Serial.begin(115200);
}

void loop() {
    char tus_degeri = myKeypad.getKey();
    if ( isdigit(tus_degeri) ) { // basılan tuş rakam ise, basamakları toplar 1+2+3 =123
        uint8_t rakam = tus_degeri - '0';
        toplamrakam = ((toplamrakam * 10) + rakam);
        //Serial.println(tus_degeri); // basılan her bir tuş
        //Serial.println(toplamrakam); // ortaya çıkan sayı
    } else if ( tus_degeri == '*' ) {
        Serial.print(toplamrakam);
        Serial.print( " numaralı sipariş oluşturuldu. \nBir daha yeni bir sipariş oluşturmadan önce hayatın ne kadar pahalı olduğunu düşünün!\n" );
        toplamrakam = 0;
        // yıldız duşu enter gibi davranır
    } else if ( tus_degeri == 'A' ) {
        toplamrakam = 0;
        Serial.print("Toplamrakam ");
        Serial.print(toplamrakam);
        Serial.print(" sıfırlandı.\n");
        // A tuşu yanlış girişi sıfırlar....
    }
}

IMG_20200911_050352.jpg
 
Diziyi gerek yok, basamakları birleştirmek için basitçe bir değişkeni toplarsın. Aşağıdaki kod 1+2+3 = 123 (yüz yirmi üç) yazıp "*" tuşuna bastığında 123 sayısını istediğin yere gönderir. A tuşunu ise hatalı girişe karşı temizlemek için kullandım.

Kodu yazmışken hurdalıktan bulduğum ESP v0.9'u da denedim. İkisi de sorunsuz çalışıyor.


5348 eklentisine bak

Kod:
#include <Keypad.h>
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 colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
int toplamrakam = 0;
void setup(){
Serial.begin(115200);
}

void loop() {
    char tus_degeri = myKeypad.getKey();
    if ( isdigit(tus_degeri) ) { // basılan tuş rakam ise, basamakları toplar 1+2+3 =123
        uint8_t rakam = tus_degeri - '0';
        toplamrakam = ((toplamrakam * 10) + rakam);
        //Serial.println(tus_degeri); // basılan her bir tuş
        //Serial.println(toplamrakam); // ortaya çıkan sayı
    } else if ( tus_degeri == '*' ) {
        Serial.print(toplamrakam);
        Serial.print( " numaralı sipariş oluşturuldu. \nBir daha yeni bir sipariş oluşturmadan önce hayatın ne kadar pahalı olduğunu düşünün!\n" );
        toplamrakam = 0;
        // yıldız duşu enter gibi davranır
    } else if ( tus_degeri == 'A' ) {
        toplamrakam = 0;
        Serial.print("Toplamrakam ");
        Serial.print(toplamrakam);
        Serial.print(" sıfırlandı.\n");
        // A tuşu yanlış girişi sıfırlar....
    }
}

5349 eklentisine bak
Çok teşekkür ettim. Sabahın 7 sinde işe gitmeden oturdum denedim. Bende de sorunsuz çalışıyor.
Şimdi bunun devamında tus_değeri değişkenini lcd ye göndereceğim. Ardından yıldıza basıldığın da durum mesajını yazdıracağım.
 
Şimdi Nodemcu dan TX ile veri gönderip Arduino Due RX bacağından veri almaya çalışıyorum.
Kartların ikiside 3.3v ile çalışıyor.
Nodemcu dan
Kod:
Serial.write(değişken);
ile veri gönderip, Arduino Due den
Kod:
 Serial.available() > 0
ile kontrol ederek
Kod:
Serial.read(gelenVeri);
ile Almaya çalışıyorum ama ya gönderemiyorum yada alamıyorum.

Kodlarımı Tamamı ise Şöyle;

NodeMcu Tarafı
Kod:
#include <Keypad.h>
const byte n_rows = 4;
const byte n_cols = 4;
char keys[n_rows][n_cols] = {
{'1','4','7','*'},
{'2','5','8','0'},
{'3','6','9','#'},
{'A','B','C','D'}
};
byte colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
int toplamrakam = 0;
void setup(){
Serial.begin(115200);
}

void loop() {
    char tus_degeri = myKeypad.getKey();
    if ( isdigit(tus_degeri) ) { // basılan tuş rakam ise, basamakları toplar 1+2+3 =123
        uint8_t rakam = tus_degeri - '0';
        toplamrakam = ((toplamrakam * 10) + rakam);
        //Serial.println(tus_degeri); // basılan her bir tuş
        //Serial.println(toplamrakam); // ortaya çıkan sayı
    } else if ( tus_degeri == 'D' ) {
        Serial.write(toplamrakam);
        /*Serial.print( " Siparis Eklendi." );*/
        toplamrakam = 0;
        // yıldız duşu enter gibi davranır
    } else if ( tus_degeri == 'A' ) {
        toplamrakam = 0;
        Serial.print("Toplamrakam ");
        Serial.print(toplamrakam);
        Serial.print(" sıfırlandı.\n");
        // A tuşu yanlış girişi sıfırlar....
    }
}

Arduino Due Tarafı
Kod:
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 7, 6, 5, 4, 3);

int gelenVeri = 0;   // genel veriyi tutacak değişken
char gelenKarakter;

void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
}

void loop() {
  // Veri gelmiş mi?
        if (Serial.available() > 0) {
                // gelen veriyi oku
                gelenVeri = Serial.read();
                gelenKarakter = gelenVeri;
                lcd.setCursor(8, 0);
                lcd.print(gelenVeri);
                lcd.setCursor(0, 1);
                lcd.print("Siparis Eklendi");
        }
}
 
Programı bitirdim. İsmini de "Tuşla Gelsin" koydum. Tüm hakları saklıdır... :D

1599835076543.png
 
Şimdi Nodemcu dan TX ile veri gönderip Arduino Due RX bacağından veri almaya çalışıyorum.
Kartların ikiside 3.3v ile çalışıyor.
Nodemcu dan
Kod:
Serial.write(değişken);
ile veri gönderip, Arduino Due den
Kod:
 Serial.available() > 0
ile kontrol ederek
Kod:
Serial.read(gelenVeri);
ile Almaya çalışıyorum ama ya gönderemiyorum yada alamıyorum.

Kodlarımı Tamamı ise Şöyle;

NodeMcu Tarafı
Kod:
#include <Keypad.h>
const byte n_rows = 4;
const byte n_cols = 4;
char keys[n_rows][n_cols] = {
{'1','4','7','*'},
{'2','5','8','0'},
{'3','6','9','#'},
{'A','B','C','D'}
};
byte colPins[n_rows] = {D3, D2, D1, D0};
byte rowPins[n_cols] = {D7, D6, D5, D4};
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins, colPins, n_rows, n_cols);
int toplamrakam = 0;
void setup(){
Serial.begin(115200);
}

void loop() {
    char tus_degeri = myKeypad.getKey();
    if ( isdigit(tus_degeri) ) { // basılan tuş rakam ise, basamakları toplar 1+2+3 =123
        uint8_t rakam = tus_degeri - '0';
        toplamrakam = ((toplamrakam * 10) + rakam);
        //Serial.println(tus_degeri); // basılan her bir tuş
        //Serial.println(toplamrakam); // ortaya çıkan sayı
    } else if ( tus_degeri == 'D' ) {
        Serial.write(toplamrakam);
        /*Serial.print( " Siparis Eklendi." );*/
        toplamrakam = 0;
        // yıldız duşu enter gibi davranır
    } else if ( tus_degeri == 'A' ) {
        toplamrakam = 0;
        Serial.print("Toplamrakam ");
        Serial.print(toplamrakam);
        Serial.print(" sıfırlandı.\n");
        // A tuşu yanlış girişi sıfırlar....
    }
}

Arduino Due Tarafı
Kod:
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 7, 6, 5, 4, 3);

int gelenVeri = 0;   // genel veriyi tutacak değişken
char gelenKarakter;

void setup() {
  Serial.begin(115200);
  lcd.begin(16, 2);
}

void loop() {
  // Veri gelmiş mi?
        if (Serial.available() > 0) {
                // gelen veriyi oku
                gelenVeri = Serial.read();
                gelenKarakter = gelenVeri;
                lcd.setCursor(8, 0);
                lcd.print(gelenVeri);
                lcd.setCursor(0, 1);
                lcd.print("Siparis Eklendi");
        }
}

Osiloskop ile gönderen taraf ne gönderiyor bak ve UART protokolünü görmeye çalış.
 
Osiloskop ile gönderen taraf ne gönderiyor bak ve UART protokolünü görmeye çalış.
Abi ilk önce LCD tarafını çözelim. Serial Monitörden girdiğim değerleri hiç bir şekilde doğru yazmıyor.

Rakam Girince
20200911_184312.jpg

lcd_panel.png


Harf Girince

20200911_184504.jpg

lcd_panel2.png
 
Osiloskop ile gönderen taraf ne gönderiyor bak ve UART protokolünü görmeye çalış.
Şuanda iki modül ayrı ayrı çalışıyor. Tek sıkıntı ikisi arasında haberleşme.
Gönderme tuşuna bastığım andaki olay.
nodemcu osiloskop.png
 
Ölçüm doğru değil sanki. Trigger modda yapman lazım. Trigger seviyesi de 1.5 V gibi olmalı. Ama bununla trigger modda nasıl ölçüm yapılır ona bakmam lazım. Benimkini artık kurup bir video çekme zamanı geldi :)
 
Ha tamam resimde sanki görüyorum :) Sağ ortada "Trigger Mode" diyor. Şu anda "Auto". İşte o Auto olmayacak! "Triggered" veya artık Çinliler ne isim verdilerse o olacak. "Trigger Style" da şu anda "Rising Edge". Onu da "Falling Edge" yapacaksın.
 
@uyesercan 20 satır yazmış olsan 5tl den 100TL cebindeydi şimdiye :D
Benim kodlarımın satırı 1000TL. Çok emeğim var çünkü. Bide yolduğum saçlarımı geri ektirecem :katil1: :katil1:


2 satır kod için 3 günde onlarca video, onlarca web sayfası, belki yüzlerce kod denemesi yaptım.
Hepi topu 2 satırı doğru yazabilmek için :cheeky4:
 
Bir konuya da açıklık getireyim. 3.3v modül ile 5v modülün birlikte çalışmayacağını düşünüyorduk hep.
Eğer 3.3v modülden 5v modüle gönderim yapıyorsak sıkıntısız çalışıyor. "Voltajlar tutmaz" dediğimiz olay şehir efsanesi imiş.
Eğer 5v modülden 3.3v modüle veri göndereceksek uygun bir direnci voltaj bölücü olarak kullanarak yine işlem yaptırabiliyoruz.
 

Forum istatistikleri

Konular
7,847
Mesajlar
129,976
Üyeler
3,155
Son üye
Serdar50

Son kaynaklar

Son profil mesajları

Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
az bilgili çok meraklı
Back
Top