Arduino Seri Monitör İle Girilen Sayı Üzerinde İşlem

Kodla Büyü

by_quadran

Aktif Üye
Mesajlar
225
Değerli arkadaşlar seri monitör üzerinden girilen bir sayı ile temel işlemler yapmak istiyoruz. Örneğin yarıçapı girilen dairenin alanını hesaplatmak gibi yardım edebilir misiniz?

Kod:
double yaricap=0;
double alan=0;
double cevre=0;
const double pi=3.14;

void setup() {
  Serial.begin(9600);
 Serial.print("LÜTFEN YARIÇAP BİLGİSİNİ GİRİNİZ");
}

void loop() {
 
  if(Serial.available()>0)
  {
        yaricap=Serial.read();
   alan=pi*yaricap*yaricap;
   cevre=2*pi*yaricap;
    Serial.print("Dairenin Alanı=");
    Serial.println(yaricap);
    Serial.print("Dairenin Cevre=");
    Serial.println(cevre);
          
    
  }
}

YAZDIĞIMIZ KOD BU ŞEKİLDE EKRAN GÖRÜNTÜSÜDE AŞAĞIDA. Netten bir çok örnek araştırdım kod denedim bir çoğunda değişken türleri ile ilgili gariplikler var bunu da düz mantık örnek olsun diye burada paylaşmak için yazdım. Ekran görüntüsü de aşadağıda
 

Ekli dosyalar

  • Ekran Alıntısı.JPG
    Ekran Alıntısı.JPG
    72.3 KB · Görüntüleme: 43
Değerli arkadaşlar seri monitör üzerinden girilen bir sayı ile temel işlemler yapmak istiyoruz. Örneğin yarıçapı girilen dairenin alanını hesaplatmak gibi yardım edebilir misiniz?

Kod:
double yaricap=0;
double alan=0;
double cevre=0;
const double pi=3.14;

void setup() {
  Serial.begin(9600);
 Serial.print("LÜTFEN YARIÇAP BİLGİSİNİ GİRİNİZ");
}

void loop() {

  if(Serial.available()>0)
  {
        yaricap=Serial.read();
   alan=pi*yaricap*yaricap;
   cevre=2*pi*yaricap;
    Serial.print("Dairenin Alanı=");
    Serial.println(yaricap);
    Serial.print("Dairenin Cevre=");
    Serial.println(cevre);
        
   
  }
}

YAZDIĞIMIZ KOD BU ŞEKİLDE EKRAN GÖRÜNTÜSÜDE AŞAĞIDA. Netten bir çok örnek araştırdım kod denedim bir çoğunda değişken türleri ile ilgili gariplikler var bunu da düz mantık örnek olsun diye burada paylaşmak için yazdım. Ekran görüntüsü de aşadağıda

Ne tarz bir yardım istiyorsunuz hocam?

Kod:
double yaricap=0;
double alan=0;
double cevre=0;
const double pi=3.14;

void setup() {
  Serial.begin(9600);
 Serial.print("LÜTFEN YARIÇAP BİLGİSİNİ GİRİNİZ");
}

void loop() {
 
  if(Serial.available()>0)
  {
        yaricap=Serial.read();
   alan=pi*yaricap*yaricap;
   cevre=2*pi*yaricap;
    Serial.print("Dairenin Alanı=");
    Serial.println(alan);  /* sizin hatanız burada eğer hesap hatası arıyorsanız*/
    Serial.print("Dairenin Cevre=");
    Serial.println(cevre);
        
  
  }
}
 
// C++ code
//
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("ALAN:");
Serial.println(daireAlan(5));
Serial.print("CEVRE:");
Serial.print(daireCevre(5));
delay(5000);

}
double daireAlan(double r)
{
const double pi=3.14;
return pi*r*r;

}
double daireCevre(double r)
{
const double pi=3.14;
return pi*2*r;

}
 
// C++ code
//
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("ALAN:");
Serial.println(daireAlan(5));
Serial.print("CEVRE:");
Serial.print(daireCevre(5));
delay(5000);

}
double daireAlan(double r)
{
const double pi=3.14;
return pi*r*r;

}
double daireCevre(double r)
{
const double pi=3.14;
return pi*2*r;

}
Sayın hocam yaricap bilgisi dışarıdan girilecek yani seri monitör den biz göndereceğiz.. Sorunun hesaplama ile ilgili değil girilen değeri okuma ile ilgili..
 
Ne tarz bir yardım istiyorsunuz hocam?

Kod:
double yaricap=0;
double alan=0;
double cevre=0;
const double pi=3.14;

void setup() {
  Serial.begin(9600);
 Serial.print("LÜTFEN YARIÇAP BİLGİSİNİ GİRİNİZ");
}

void loop() {
 
  if(Serial.available()>0)
  {
        yaricap=Serial.read();
   alan=pi*yaricap*yaricap;
   cevre=2*pi*yaricap;
    Serial.print("Dairenin Alanı=");
    Serial.println(alan);  /* sizin hatanız burada eğer hesap hatası arıyorsanız*/
    Serial.print("Dairenin Cevre=");
    Serial.println(cevre);
       
 
  }
}
Sayın hocam seri monitörden girilen integer veriyi alıp işleme dahil edemiyorum ascii değerler çıkıyor..
 
Seri iletişimde veri karakter karakter gelir.
Yani siz yarıçapı diyelimki 14 girdiniz. Önce 1, sonra 4 gelir.
Veri işletişimi bittikten sonra sizin bu karakterleri birleştirip sonra sayı olarak işleme alıp, alanı ve çevreyi hesaplamanız gerekir.
Siz ise her karakter geldiğinde alanı ve çevreyi hesaplıyorsunuz. 1 için hesapla, 4 için hesapla gibi.

Bir de arduino sürekli bir döngü halindedir. Bunu bir bilgisayar programı gibi bir kere çalışıp işlemi yapacak şeklinde düşünmeyiniz. Sürekli yapıyor.
Aşağıdaki kodda görebilirsiniz.
Kod:
double yaricap=0;
double alan=0;
double cevre=0;
const double pi=3.14;

char karakter;
String veri;

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

void loop() {
 
  if(Serial.available()>0) // veri olduğu sürece
  {
    karakter = Serial.read(); // karakteri oku
    veri = veri + String(karakter); // karakterleri birleştir  
  }
  else{  // veri iletişimi yoksa
    if(veri != "")
    {
      yaricap = veri.toDouble(); // birleştirilen karakterleri double'a dönüştür
   
      alan=pi*yaricap*yaricap;
      cevre=2*pi*yaricap;

      Serial.print("Dairenin Alani=");
      Serial.println(alan);

      Serial.print("Dairenin Cevre=");
      Serial.println(cevre);
     
      delay(5000);
    }
    else
    {
      Serial.println("LUTFEN YARICAP BILGISINI GIRINIZ: ");
    }
    veri = "";
  }
 
  delay(1000);
}
 
Seri iletişimde veri karakter karakter gelir.
Yani siz yarıçapı diyelimki 14 girdiniz. Önce 1, sonra 4 gelir.
Veri işletişimi bittikten sonra sizin bu karakterleri birleştirip sonra sayı olarak işleme alıp, alanı ve çevreyi hesaplamanız gerekir.
Siz ise her karakter geldiğinde alanı ve çevreyi hesaplıyorsunuz. 1 için hesapla, 4 için hesapla gibi.

Bir de arduino sürekli bir döngü halindedir. Bunu bir bilgisayar programı gibi bir kere çalışıp işlemi yapacak şeklinde düşünmeyiniz. Sürekli yapıyor.
Aşağıdaki kodda görebilirsiniz.
Kod:
double yaricap=0;
double alan=0;
double cevre=0;
const double pi=3.14;

char karakter;
String veri;

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

void loop() {
 
  if(Serial.available()>0) // veri olduğu sürece
  {
    karakter = Serial.read(); // karakteri oku
    veri = veri + String(karakter); // karakterleri birleştir 
  }
  else{  // veri iletişimi yoksa
    if(veri != "")
    {
      yaricap = veri.toDouble(); // birleştirilen karakterleri double'a dönüştür
  
      alan=pi*yaricap*yaricap;
      cevre=2*pi*yaricap;

      Serial.print("Dairenin Alani=");
      Serial.println(alan);

      Serial.print("Dairenin Cevre=");
      Serial.println(cevre);
    
      delay(5000);
    }
    else
    {
      Serial.println("LUTFEN YARICAP BILGISINI GIRINIZ: ");
    }
    veri = "";
  }
 
  delay(1000);
}
Sayın hocam ilginiz için çok teşekkür ederim yarın okulda deneyeceğim yine buradan atarım son durumu..
 
Sayın hocam yaricap bilgisi dışarıdan girilecek yani seri monitör den biz göndereceğiz.. Sorunun hesaplama ile ilgili değil girilen değeri okuma ile ilgili..
hocam sorununuzun çözümü veriyi float olarak okumaktan geçiyor.Sanırım siz de çözdünüz. çözümü aşağıda umarım işinize yarar.
// C++ code
float veri;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available()>0){
veri=Serial.parseFloat(); // püfnoktası burası
Serial.print("alan:");
Serial.println(daireAlan(veri));
Serial.print("cevre:");
Serial.println(daireCevre(veri));
delay(5000);
}
}
float daireAlan(double r)
{
const float pi=3.14;
return pi*r*r;

}
float daireCevre(double r)
{
const float pi=3.14;
return pi*2*r;

}
 
Geri
Üst