Keypad Üzerinden Çift Basamaklı Sayı Girme (Arduino)

Katılım
13 May 2016
Mesajlar
16
Puanları
1
Yaş
33
Arduino ile keypad üzerinden girilen char türündeki veriyi integer türüne çeviriyorum ancak rakam olarak bu işlemi yapıyorum.Şuan yapmak istediğim keypad üzerinden girilen rakamlardan 2 veya 3 basamaklı sayı oluşturmak.Bu işlemi nasıl gerçekleştiririm...Kodlar aşağıda arkadaşlar...Forumda arama yaptım ancak verilen cevaplar biraz askıda kalmış gibi yardımcı olursanız sevinirim :)

Kod:
#include <Keypad.h>//Keypad kütüphanesi eklendi...
byte motor = 13, mz80 = 5;
int sayac, adet, tutulan;
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() {
  Serial.begin(9600);//Seri monitör başlatılıyor...
  pinMode(mz80, INPUT);//Sensör giriş olarak tanımlanıyor...
  pinMode(motor, OUTPUT);//Motorun bağlı olacağı röleyi çıkış olarak ayarlıyoruz...
  digitalWrite(motor, LOW);
}

void loop() {
  char  tus = kpd.getKey(); //Keypadten gelen değer okunup adete gönderiliyor...
  if (tus)//Tuşa basıldığında;
  {
    Serial.println(tus);//Basılan tuşu ekranda göster...
    adet=tus-48;//Ascii kodundan integer türüne çevrim yapılıyor ve adet isimli değişkende tutuluyor sonuc...

   
  }
  if (digitalRead(mz80) == 0) //Sensör ürünü gördü mü?
  {
    delay(20);//Bekleme...
    if (digitalRead(mz80) == 1) //Ürün sensörün önünden geçtiyse;
    {
      sayac++;//Her ürün geçtiğinde sayı 1 arttırılacak...
      Serial.print("Adet:");
      Serial.println(sayac);//Sayacı ekrana  yazdırıyoruz...
      if (sayac == adet ) //Eğer sayaç değişkeni girilen adet sayısana eşitse;
      {
        digitalWrite(motor, LOW);//Motor dursun...ß
        Serial.println("Bitti");//Bitti yazsın...
        sayac = 0;//Sayaç sıfırlansın...
      }
    }
  }
}

[code]
 
Merhaba,
3 basamaklı sayı oluşturmak için şöyle bir yol izlenebilir.
yüzler basamağı için ax100
onlar basamağı için bx10
birler basamağı için cx1
a+b+c = 3 basamaklı sayı
Tersi yapılarak da 3 basamaklı sayı 3 ayrı değişkene atanarak tutulabilir.
Kolay gelsin
Saygılarımla
 
hocam bu kod üzerinde nasıl düzenlerim peki ?

Kod:
#include <Keypad.h>//Keypad kütüphanesi eklendi...
byte motor = 13, mz80 = 5;
int sayac, adet;
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() {
  Serial.begin(9600);//Seri monitör başlatılıyor...
  pinMode(mz80, INPUT);//Sensör giriş olarak tanımlanıyor...
  pinMode(motor, OUTPUT);//Motorun bağlı olacağı röleyi çıkış olarak ayarlıyoruz...
  digitalWrite(motor, LOW);
}
void loop() {
  char  tus = kpd.getKey(); //Keypadden gelen değer okunup adete gönderiliyor...
  if (tus)//Tuşa basıldığında;
  {
    adet = tus - 48;//Char cinsinden int cinsine çevir...
    Serial.println(tus);//Basılan tuşu ekranda göster...
  }
  if (digitalRead(mz80) == 0) //Sensör ürünü gördü mü?
  {
    delay(20);//Bekleme...
    if (digitalRead(mz80) == 1) //Ürün sensörün önünden geçtiyse;
    {
      sayac++;//Her ürün geçtiğinde sayı 1 arttırılacak...
      Serial.print("Adet:");
      Serial.println(sayac);//Sayacı ekrana  yazdırıyoruz...
      if (sayac == adet ) //Eğer sayaç değişkeni girilen adet sayısana eşitse;
      {
        digitalWrite(motor, LOW);//Motor dursun...ß
        Serial.println("Bitti");//Bitti yazsın...
        sayac = 0;//Sayaç sıfırlansın...
      }
    }
  }
}
[code]
 
Merhaba, öncelikle char kısmını -48 ile değilde bunun karşılığını bulup yazdırmak lazım. Ondan sonrası kolay. Charı binary sisteme cevirememiştim bende. :)
 
char değişkenini maalesef başka türlü integer türüne çeviremedim :( bu şekildeyken 3 basamaklı sayıyı değişkende tutamazmıyız yani hocam ?
 
char değişkenini maalesef başka türlü integer türüne çeviremedim :( bu şekildeyken 3 basamaklı sayıyı değişkende tutamazmıyız yani hocam ?

İlla bir yolu vardır. Tuşlardan girilen sayıyı desimal sisteme cevirebilmek mümkün olmalı. Tekar uğraşayım. Elimde keypad yok simulasyonda deneyebilirim. Bu gece uğraşırım sonucu yazarım
 
Ben denedim simulasyonda sorun çıktı. Çalıştıramadım, Noble arduino da iyiidir yardımcı olabilir.
 

Forum istatistikleri

Konular
129,811
Mesajlar
930,329
Kullanıcılar
452,618
Son üye
mberber

Yeni konular

Geri
Üst