Veya sana güzel bir proje: En ucuzundan bir PIC al, o yapsın tarama işini ve sonucu I2C olarak versin NodeMCU'ya ;)
PIC Programlama konusu bana yabancı abi ya. Daldan dala atlıyorum iyice çorba oldu kafa :D
İkitane promini alsam. Birinde Keypadi, Diğerinde LCD ekranı programlasam. ( Bir Promini de 4 tane analog, 13 tane dijital pin var.)
Sonra bunları nodemcu ile haberleştirebilir miyim?
 
PIC Programlama konusu bana yabancı abi ya. Daldan dala atlıyorum iyice çorba oldu kafa :D
İkitane promini alsam. Birinde Keypadi, Diğerinde LCD ekranı programlasam. ( Bir Promini de 4 tane analog, 13 tane dijital pin var.)
Sonra bunları nodemcu ile haberleştirebilir miyim?

O da olur. Aynı voltajda çalışmaları lazım ama. İkisi de 5V mesela.
 
Yada keypadi direk kullanıp Promini ile ekranı programlasam. Sonra da TX RX pinleri ile iki modül arasında haberleşme yapsam?
Ekranı promini ile programlayıp diyeceğim ki Nodemcu'nun TX pininden gönderdiğim veriyi al ve ekrana yaz.
NodeMcu'nun TX (Data Out) Pininden Promini'nin RX (Data İn) Pinine bir kablo Tamamdır.
O da olur. Aynı voltajda çalışmaları lazım ama. İkisi de 5V mesela.

Voltajına bakarız. Promini'nin 2 farklı sürümü de var nasılsa. Node ye hangisi uyuyorsa onu alırım.
 
Yada keypadi direk kullanıp Promini ile ekranı programlasam. Sonra da TX RX pinleri ile iki modül arasında haberleşme yapsam?
Ekranı promini ile programlayıp diyeceğim ki Nodemcu'nun TX pininden gönderdiğim veriyi al ve ekrana yaz.
NodeMcu'nun TX (Data Out) Pininden Promini'nin RX (Data İn) Pinine bir kablo Tamamdır.


Voltajına bakarız. Promini'nin 2 farklı sürümü de var nasılsa. Node ye hangisi uyuyorsa onu alırım.

Eğer pro mini ile hem keypad hem de LCD yi halledebiliyorsun programı pro mini için yaz. NodeMCU yu da sadece internet arabirimi olarak kullan.
 
Eğer pro mini ile hem keypad hem de LCD yi halledebiliyorsun programı pro mini için yaz. NodeMCU yu da sadece internet arabirimi olarak kullan.
Abi tek promini ile hem keypad'i hemde Ekranı programlarayabilirim. Nodemcu'yu da wifi için kullanabilirim. Gerçekten mantıklı olur ama bunu yapabilmem için keypadi senin dediğin gibi analog pinlere uyarlamam gerekir. Buda uğraştırıcı bir iş. Nasıl olacağını da bilmediğimden uğraşmak istemiyorum. O yüzden;
1- NodeMcu nun dijital pinlerini kullanarak keypadi tanımlayacağım.
2- Prominin digital pinlerini kullanarak ekranı tanımlayacağım.
3- NodeMcu nun TX pininden Promini'nin RX pinine ekrana yazdıracağım veriyi göndereceğim.
Bu şekilde daha pratik oluyor benim için.

Yukarıda bir yerde neyle programlanıyor diye sormuştun. Şöyle bir bilgi buldum;
" NodeMCU açık kaynak Lua tabanlı bir geliştirme kitidir. Bu sayede Lua dilinde kodlama yapılabilmektedir."
 
Bu ne saçma bir kodlamadır yav?
"if" 'in içinde oluşturduğum değişken "else" içinde çalışmıyor.

Burada yapmak istediğim şu;
Mevcut kodlamada sadece tek tuş alıyordu sistem. her basmada 1 tuş. ama ben 25 yada 250 veyahut 2550 yazdırmak istiyorum.
"A" harfini "enter" gibi kullanmak istiyorum. Eğer son basılan tuş A ya eşit değilse bir önceki basılanın yanına eklesin gibi.
Ne zaman A ya basılırsa o zaman işlem bitsin ve ben son değişkeni kullanayım.

C++:
void loop(){
  char myKey = myKeypad.getKey();
  if (myKey != 'A'){
    char myKey2 = myKey + myKeypad.getKey();
  }else{
    Serial.print("Key pressed: ");
    Serial.println(myKey2);
  }
}

Hata Mesajı;

hata_mesajı.png
 
C/C++ da bir blok içinde tanımlanan değişken sadece o blok içinde görünür. Bu da iyi birşey. Eğer böyle olmasaydı, her değişken her yerde erişilebilir olsaydı, zaten bugsız kod yazmanın çok zor olduğu bu dilde zorluk katlanarak artardı :)
 
C/C++ da bir blok içinde tanımlanan değişken sadece o blok içinde görünür. Bu da iyi birşey. Eğer böyle olmasaydı, her değişken her yerde erişilebilir olsaydı, zaten bugsız kod yazmanın çok zor olduğu bu dilde zorluk katlanarak artardı :)
Şükür drondan bana sıra geldi :D
Abi benim bu kod ile başım belada. Saatlerdir uğraşıyorum. Evirdim Çevirdim doğru yazımı bulamadım bir türlü.
 
Şükür drondan bana sıra geldi :D
Abi benim bu kod ile başım belada. Saatlerdir uğraşıyorum. Evirdim Çevirdim doğru yazımı bulamadım bir türlü.

Koda bakınca algoritma tam olarak anlaşılmıyor. Mesela ilk tuş A dan farklı ise ikinci tuşu okuyorsun. Ama ilk tuş A ise ikinci tuşu okumuyorsun ve ona rağmen içeriğini yazdırıyorsun. Bu mantıklı değil. Rastgele bir değer okursun. Önce algoritmanın ne olması gerektiğini yaz ona göre kodun ne olacağı da belli olur.
 
Koda bakınca algoritma tam olarak anlaşılmıyor. Mesela ilk tuş A dan farklı ise ikinci tuşu okuyorsun. Ama ilk tuş A ise ikinci tuşu okumuyorsun ve ona rağmen içeriğini yazdırıyorsun. Bu mantıklı değil. Rastgele bir değer okursun. Önce algoritmanın ne olması gerektiğini yaz ona göre kodun ne olacağı da belli olur.
Abi algoritma bende belli de koda dökemiyorum.
Algoritma: "A" ya basılana kadar girilen her rakamı birleştir. "A" ya basılınca en son birleşen rakamı evlist siteye gönder. Örneğin "nodemcu.php" sayfasına post et gibi.
 
Yani bir karakter dizisi alacaksın kullanıcıdan. Bunun için dizi kullanman gerekiyor. Aşağıdaki programı benim arduino ile denedim. Seri terminale birşeyler yazıp sonunde Enter'a basarsan, senin yazdığın diziyi seri monitöre yazıyor:

C:
char dizi[20];
unsigned int pos = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    char key = Serial.read();

    if (key != '\n')
    {
      if (pos < (sizeof(dizi) - 1))
      {
        dizi[pos++] = key;
      }
    }
    else
    {
      dizi[pos++] = '\0';
      pos = 0;
      Serial.print("dizi = ("); Serial.print(dizi); Serial.println(")");
    }
  }
}
 
Yani bir karakter dizisi alacaksın kullanıcıdan. Bunun için dizi kullanman gerekiyor. Aşağıdaki programı benim arduino ile denedim. Seri terminale birşeyler yazıp sonunde Enter'a basarsan, senin yazdığın diziyi seri monitöre yazıyor:

C:
char dizi[20];
unsigned int pos = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    char key = Serial.read();

    if (key != '\n')
    {
      if (pos < (sizeof(dizi) - 1))
      {
        dizi[pos++] = key;
      }
    }
    else
    {
      dizi[pos++] = '\0';
      pos = 0;
      Serial.print("dizi = ("); Serial.print(dizi); Serial.println(")");
    }
  }
}
Bu şekilde kurcalayayım bakalım içinden çıkabilecek miyim.
 
Şimdi baktım da, bu Arduino IDE sinde debugger yok. Olsaydı adım adım çalıştırabilirdin ve her seferinde değişkenlere ne oluyor görebilirsin.
 
Microsoft'un Visual Studio Code IDE si ile guya debug edilebiliyormuş, ama bu M$ ürünlerine karşı çok önyargılıyım ben. Tam VSCode programını ve sistemini ayrıntılı olarak öğrenirsin, Microsoft onu tedavülden kaldırır ve tamamen farklı, hiçbir şekilde geriye dönük uyumlu olmayan yeni bir zımbırtı çıkarır. O yüzden debug etmek için Atmel'in bir debug adaptörünü alıp doğrudan debug etmek daha mantıklı.
 
Yani bir karakter dizisi alacaksın kullanıcıdan. Bunun için dizi kullanman gerekiyor. Aşağıdaki programı benim arduino ile denedim. Seri terminale birşeyler yazıp sonunde Enter'a basarsan, senin yazdığın diziyi seri monitöre yazıyor:

C:
char dizi[20];
unsigned int pos = 0;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    char key = Serial.read();

    if (key != '\n')
    {
      if (pos < (sizeof(dizi) - 1))
      {
        dizi[pos++] = key;
      }
    }
    else
    {
      dizi[pos++] = '\0';
      pos = 0;
      Serial.print("dizi = ("); Serial.print(dizi); Serial.println(")");
    }
  }
}
Abi Senin verdiğin koda göre rakamı Keypad den alacak şekilde değiştirdim ama almıyor. Buradaki Serial.available() ne işe yarıyor? O bozuyor olabilir kodu.

C:
#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);

char dizi[20];
unsigned int pos = 0;
 
void setup(){
  Serial.begin(9600);
 
}

void loop()
{
  if (Serial.available() > 0)
  {
    char key = myKeypad.getKey(); /*Rakamı Keypad den Al*/

    if (key != '\n')
    {
      if (pos < (sizeof(dizi) - 1))
      {
        dizi[pos++] = key;
      }
    }
    else
    {
      dizi[pos++] = '\0';
      pos = 0;
      Serial.print("dizi = ("); Serial.print(dizi); Serial.println(")");
    }
  }
}
 
Yav benim kodun aynısı senin devrede çalışmaz. Ben seri porttan okuyorum veriyi, ama senin seri port ile işin yok. Sen keypad'den okuyacaksın.
 
Bir de senin keypad hiçbir zaman "Enter" (\n') göndermez. Onun göndereceği karakterleri zaten tanımlamışsın. Onlardan birisine göre kodu yazman lazım. Benim kodu sadece dizileri nasıl kullanman gerektiği konusunda örnek olarak düşün. Senin problemi aynen çözmez.
 
Bir de senin keypad hiçbir zaman "Enter" (\n') göndermez. Onun göndereceği karakterleri zaten tanımlamışsın. Onlardan birisine göre kodu yazman lazım. Benim kodu sadece dizileri nasıl kullanman gerektiği konusunda örnek olarak düşün. Senin problemi aynen çözmez.

Enter'e ihtiyacım olacak mı emin değilim ama sırf merakımdan soruyorum.
"A" harfi yerine "\n" tanımlarsam ihtiyacım olduğunda "enter" olarak kullanabilir miyim?
C:
char keys[n_rows][n_cols] = {
  {'1','4','7','*'},
  {'2','5','8','0'},
  {'3','6','9','#'},
  {'\n','B','C','D'}
};
 
Enter'e ihtiyacım olacak mı emin değilim ama sırf merakımdan soruyorum.
"A" harfi yerine "\n" tanımlarsam ihtiyacım olduğunda "enter" olarak kullanabilir miyim?
C:
char keys[n_rows][n_cols] = {
  {'1','4','7','*'},
  {'2','5','8','0'},
  {'3','6','9','#'},
  {'\n','B','C','D'}
};

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 :)
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,880
Mesajlar
100,277
Üyeler
2,491
Son üye
djkop

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