Keypad aracılığı ile dışarıdan iki farklı ilaç sayısı girme
  • Merhaba arkadaşlar, ben keypad aracılığı ile iki ayrı kutuya koyacağım ilaç sayılarını yazacağım. Bu yüzden adet1 ve adet2 olarak iki değişken tanımladım. Ir sensör aracılığı ile ilaçlar eksildiğinde girdiğim ilaç sayısı azalıyor. İki farklı kutum ve iki farklı sensörüm var. Keypadden okunan değerleri için tus degerini atadım. adet1 ve adet2 için ayrı ayrı yazmayı denedim tus1 tus2 şeklinde. Ama bir türlü o kısmı halledemedim. 1. kutu için ve 2. kutu için farklı farklı sayılar girip denesem de anı degerden okundugu için sayılar eşitleniyor. Örneğin 1.sensör çalıştığında aslında 1.kutudaki sayı azalmalı sadece. ama ikinci kutudaki sayının da azaldığını gösteriyor.

    Bir türlü yapamadığım kısım. Sorunun burada olduğunu düşünüyorum. Yardımcı olursanız çok sevinirim.

    if (tus)//Tuşa basıldığında;
    {
    lcd.print(tus);
    adet1 = tus - 48;//Char cinsinden int cinsine çevir...
    adet2= tus- 48;
    if (tus=='*')//Tuşa basıldığında;
    {
    lcd.clear();
    lcd.print("Adet1 Gir:");
    delay(1000);

    }
    else if (tus =='#')
    {
    lcd.clear();
    lcd.print("Adet2 Gir:");
    delay(1000);
    }
    }




    Bütün kod:

    #include < LiquidCrystal.h>
    #include < Wire.h>
    #include < LiquidCrystal_I2C.h>
    #include < Keypad.h>//Keypad kütüphanesi eklendi...

    LiquidCrystal_I2C lcd(0x3f,16,2);

    byte motor1 = 3, modul1 = 5, modul2=4, motor2=2;
    int adet1 = 0;
    int adet2 = 0;
    const byte SATIR = 4;//4 satır için sabit tanımlanıyor...
    const byte SUTUN = 3;//3 sütun için sabit tanımlanıyor...
    char tuslar[SATIR][SUTUN] = {
    {'1', '2', '3'},
    {'4', '5', '6'},
    {'7', '8', '9'},
    {'*', '0', '#'},
    };//4X3 lük matris oluşturuldu...
    byte rowPins[SATIR] = { 9, 8, 7, 6 }; //Satır pinlerinin dijital girişleri ayarlanıyor...
    byte colPins[SUTUN] = { 12, 11, 10 };//Sütun pinlerinin dijital girişleri ayarlanıyor...
    Keypad kpd = Keypad( makeKeymap(tuslar), rowPins, colPins, SATIR, SUTUN );//Satır ve sütun için tuş haritası oluşturuluyor...
    void setup() {

    lcd.setBacklight(HIGH);
    lcd.init();
    lcd.print("Merhaba");


    }
    void loop()
    {
    char tus = kpd.getKey(); //Keypadden gelen değer okunup adete gönderiliyor...


    if (tus)//Tuşa basıldığında;
    {
    lcd.print(tus);
    adet1 = tus - 48;//Char cinsinden int cinsine çevir...
    adet2= tus- 48;
    if (tus=='*')//Tuşa basıldığında;
    {
    lcd.clear();
    lcd.print("Adet1 Gir:");
    delay(1000);

    }
    else if (tus =='#')
    {
    lcd.clear();
    lcd.print("Adet2 Gir:");
    delay(1000);
    }
    }


    if (digitalRead(modul1) == LOW)
    {
    delay(20);

    if (digitalRead(modul1) == HIGH)
    {
    lcd.clear();
    adet1--;
    lcd.print("1.kutuda kalan:");
    lcd.println(adet1);
    if (adet1 == 0)
    {
    lcd.print("1.kutuda kalan:0");
    delay(2000);
    lcd.clear();
    lcd.println("1.kutudaki");
    lcd.setCursor(0, 1);
    lcd.print("ilaclar bitti");
    adet1 = 0;
    }
    }
    }

    if (digitalRead(modul2) == LOW)
    {
    delay(20);

    if (digitalRead(modul2) == HIGH)
    {
    lcd.clear();
    adet2--;
    lcd.print("2.kutuda kalan:");
    lcd.println(adet2);/
    if (adet2 == 0)
    {
    lcd.print("2.kutuda kalan:0");
    delay(2000);
    lcd.clear();
    lcd.println("2.kutudaki");
    lcd.setCursor(0, 1);
    lcd.print("ilaclar bitti");
    adet2 = 0;//Adeti sıfırla...

    }
    }
    }
    }
  • int kutular; // kutular adında bir değişken daha atamanız gerek

    if (tus)//Tuşa basıldığında;
    {
    lcd.print(tus);

    if (kutular == 1) { //Adet1 için kutular değeri 1 ise
    adet1 = tus - 48;//Char cinsinden int cinsine çevir...
    } else if (kutular == 2) {
    adet2 = tus - 48;
    }

    if (tus == '*') //Tuşa basıldığında;
    {
    kutular = 1; //Adet1 için kutular değerini 1 yap
    lcd.clear();
    lcd.print("Adet1 Gir:");
    delay(1000);

    }
    else if (tus == '#')
    {
    kutular = 2; //Adet2 için kutular değerini 2 yap
    lcd.clear();
    lcd.print("Adet2 Gir:");
    delay(1000);
    }
    }
  • Merhaba mail gelince inboxtaki mesajı akşam gördüm tekrar kodları bir inceledim başka hatalar da vardı ben de komple kodu alıp hem arşivimde bulunsun hem de size yardımcı olsun maksadı ile aşağıdaki şekilde düzenledim elimde sensörler olmadığı için test edemedim ancak sensör yerine buton kulandım ve similasyonda sorunsuz şekilde çalıştı umarım yardımcı olur
    hangi LCD kulandığınızı bilmiyorum o yüzden LiquidCrystal_I2C lcd(......); satırına ve lcd.begin(16, 2); satırına dikkat edin


    #include < Wire.h> //Wire kütüphanesi
    #include < LiquidCrystal_I2C.h> //LiquidCrystal_I2C kütüphanesi
    #include < Keypad.h> //Keypad kütüphanesi

    LiquidCrystal_I2C lcd(0x20 , 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    const int modul1 = 5, modul2 = 4; // sensör pinleri için sabit tanımlanıyor

    int adet1 = 0, adet2 = 0;
    int say_adet = 0; // her tuşa basıldığında 1 artacak olan tanım
    char adet_degeri[4]; // her tuşa basıldığında sayıları yanyana yazabilmemiz için 4 karakterlik array tanımı
    int yildiz_kare = 0; // bulunduğumuz ayar yıldız mı kare mı tanımı şimdilik 0

    const byte SATIR = 4;//4 satır için sabit tanımlanıyor...
    const byte SUTUN = 3;//3 sütun için sabit tanımlanıyor...
    char tuslar[SATIR][SUTUN] = {
    {'1', '2', '3'},
    {'4', '5', '6'},
    {'7', '8', '9'},
    {'*', '0', '#'},
    };//4X3 lük matris oluşturuldu...
    byte rowPins[SATIR] = { 9, 8, 7, 6 }; //Satır pinlerinin dijital girişleri ayarlanıyor...
    byte colPins[SUTUN] = { 12, 11, 10 };//Sütun pinlerinin dijital girişleri ayarlanıyor...
    Keypad kpd = Keypad( makeKeymap(tuslar), rowPins, colPins, SATIR, SUTUN );//Satır ve sütun için tuş haritası oluşturuluyor...

    void setup() {

    pinMode(modul1, INPUT); // modul1 pini (giriş) yani veri alacağımızı belirttik
    pinMode(modul2, INPUT); // modul2 pini (giriş) yani veri alacağımızı belirttik

    lcd.begin(16, 2);
    lcd.print("Merhaba");
    }

    void loop() {

    char tus = kpd.getKey(); //Keypadden gelen değer okunup adete gönderiliyor...

    if (tus) { //Tuşa basıldığında;

    lcd.print(tus);

    if (tus == '*') { // * Tuşa basıldığında;

    yildiz_kare = 1; // bulunduğumuz ayar yıldız 1 yapıyoruz sonra kaydederken adet1'e kaydedebilmek için
    say_adet = 0; // önceden başka bir değer kaydettiysek başa alalım
    memset(adet_degeri, 0, sizeof(adet_degeri)); // array'de önceden olan veriyi sil
    lcd.clear();
    lcd.print("Adet1 Gir:");
    delay(1000);

    } else if (tus == '#') { // # Tuşa basıldığında;

    yildiz_kare = 2; // bulunduğumuz ayar kare 2 yapıyoruz sonra kaydederken adet2'ye kaydedebilmek için
    say_adet = 0; // önceden başka bir değer kaydettiysek başa alalım
    memset(adet_degeri, 0, sizeof(adet_degeri)); // array'de önceden olan veriyi sil
    lcd.clear();
    lcd.print("Adet2 Gir:");
    delay(1000);

    } else { // Diğer tuşlara basıldığında

    adet_degeri[say_adet] = tus; // Basılan her tuş (say_adet) char array'ine eklenecek yanyana yazılacak.
    say_adet++; // Char array'i her seferinde bir diğerine geçmesi için say_adet +1 yapılacak ki yan yana yazabilelim

    if (yildiz_kare == 1) { //bulunduğumuz ayar yıldız yani 1 ise

    adet1 = atoi(adet_degeri); //adet1'e tuşlardan basılmış char değerleri atoi ile inte çevirip yazıyoruz

    } else if (yildiz_kare == 2) { // /bulunduğumuz ayar kare yani 2 ise

    adet2 = atoi(adet_degeri); //adet2'ye tuşlardan basılmış char değerleri atoi ile inte çevirip yazıyoruz

    }

    }

    }


    if (digitalRead(modul1) == LOW) { // modul1 ürünü gördü
    delay(20);
    if (digitalRead(modul1) == HIGH) { // modul1 den ürünü geçti

    adet1--; // adet1 her seferinde 1 eksiltiyoruz
    lcd.clear();
    if (adet1 < 1) { // adet1 1 den az ise
    lcd.print("1.Kutuda: 0");
    lcd.setCursor(0, 1);
    lcd.print("2.Kutuda: ");
    lcd.print(adet2);
    adet1 = 0;
    } else {
    lcd.print("1.Kutuda: ");
    lcd.print(adet1);
    lcd.setCursor(0, 1);
    lcd.print("2.Kutuda: ");
    lcd.print(adet2);
    }

    }

    }

    if (digitalRead(modul2) == LOW) { // modul2 ürünü gördü
    delay(20);

    if (digitalRead(modul2) == HIGH) { // modul2 den ürünü geçti

    adet2--; // adet2 her seferinde 1 eksiltiyoruz
    lcd.clear();
    if (adet2 < 1) { // adet2 1 den az ise
    lcd.print("1.Kutuda: ");
    lcd.print(adet1);
    lcd.setCursor(0, 1);
    lcd.print("2.Kutuda: 0");
    adet2 = 0;
    } else {
    lcd.print("1.Kutuda: ");
    lcd.print(adet1);
    lcd.setCursor(0, 1);
    lcd.print("2.Kutuda: ");
    lcd.print(adet2);
    }

    }

    }



    }

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.