Char türünü İnteger Türüne Dönüştürme

Katılım
13 May 2016
Mesajlar
16
Puanları
1
Yaş
32
Merhaba arkadaşlar arduino ile bir bant otomasyon projesi geliştiriyorum.Projemin işleyişi keypad üzerinden bir sayı girilecek ve girilen sayı kadar sensör ürün sayacak ve sonrasında duracak.Proje sensör tarafından algılanan cismi algılıyor ve arttırıyor.Buraya kadar herşey güzel ancak keypad üzerinden girilen rakamlar char türünde olduğu için benim bunları integer türüne çevirmem gerekiyor ki matematiksel bir işlem yapabileyim.

Ancak maalesef char türünü integer türüne dönüştürmede problem yaşıyorum.C++ diline yakın olan bir platform olan arduinoda "atoi" fonksiyonunu bu işlem için kullanabiliyoruz.Ancak ben nasıl kullanacağımı bir türlü anlayamadım.Kodlar aşağıda bilgisi olan arkadaşlar varsa yardımcı olabilir mi ?



Kod:
#include <Keypad.h>//Keypad kütüphanesi eklendi...
int sayac, motor = 13, mz80 = 5, 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() {
  int tus = kpd.getKey();//Basılan tuş okunuyor ve tus isimli değişkene atılıyor...
  adet=tus;
  if (tus)
  {

    Serial.print(tus);
    Serial.println(" Adet urun gececek...");
  }
  if (tus == '*')
  {
    digitalWrite(motor, LOW);
    Serial.println("Bant Durdu");
  }
  else if (tus == '#')
  {
    digitalWrite(motor, HIGH);
    Serial.println("Bant Basladi");
  }

  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...
      }
    }
  }
}
 
if (char dokuz)
int =9;
if (char 8)
int =8;
biraz basit ama iş görür sanırım.
 
kütüphaneden fonksiyonu bulup inceleyin.
ama zamanında char stringi integera donusturmem gerekmişti benimde ve atoi değilde uzun uzadıya kod yazmıstım diye hatırlıyorum. atoi de ne sıkıntı olmuştu yada neden kullanmamıstım yada kullanamamıstım hatırlamıyorum.

ama burada sadece 10 tane char bilgisi oldugu için araya bir if koyup okunan char beşse tuş=5 demek daha az yer kaplayacaktır fonksiyonu kullanmak yerine.

uzun uzadıya yazdıgım kodu bulabilirsem eklerim buraya.

int tus = atoi(kpd.getKey()); olur gibime geliyor.


http://www.tutorialspoint.com/c_standard_library/c_function_atoi.htm
burda küçük bir örnek var. işinizi görür sanırım.
 
Son düzenleme:
Hocam int tus = atoi(kpd.getKey()); syntax problemi var eğer kodu bulabilirseniz sevinirim gerçekten birde ben;

int tus =kpd.getKey(); yaptığımda keypad üzerinden girilen rakamın ASCII kodunu görebiliyorum peki bu yoldan gitme gibi bir durumum mümkün mü yani ascii koduyla çevrim yapma gibi ?
 
oyle yapılıyor zaten cevrim. yazdıgım kod o şekilde idi benim.
 
kpd.getKey(); size ne döndürüyor? 8 bit char mi yoksa bir char stirng mi?
 
hocam ilginiz için teşekkürler problemi farklı bir yöntemle çözdüm :)

Kod:
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;//Burada ascii kodunu integera çevirmek için -48 formülünü kullandım :)

   
  }
[code]
 
Dönüştürmekten kastınız nedir? Tam anlayamadım :) Direk int a = 7; deseniz :)
 

Yeni mesajlar

Forum istatistikleri

Konular
127,963
Mesajlar
913,931
Kullanıcılar
449,609
Son üye
cherrywine

Yeni konular

Geri
Üst