22 Ocak 2014 Çarşamba

Direnç Değeri Hesaplama - Renk Kodları

Direnç değerlerini hesaplama programımız. Renk değerlerini girdikten sonra direnç hesaplamasını yaptırıyoruz. tolerans hesabına kadar yapabiliyoruz... Tabii tolerans seçilmezse her hangi bir tolerans hesaplaması yaptırmıyoruz. Aynı zamanda tersi işlemleri de yaptırıyoruz. Yani direnç değerinden renk kodlarını bulma işlemini de yaptırıyoruz. Bu işlemleri yaptırırken direnç renklerini de resim üzerinde gösteriyoruz.

Programın ilk ekranından bir görüntü. Burada direnç resminin üzerinde 4 adet button var. 3,4,5,6 numaralı butonları getirdiğimiz direnç resminin üzerine yerleştireceğiz.















Değerler girildikten sonra bir ekran görüntüsü. Örnekte fark ettiyseniz renk değerleri comboboxdan seçildikten sonra direnç değeri aşağıda gözüktüğü gibi aynı zamanda seçilen renk değerleri de direnç resmi üzerinde gösterilmektedir. 















Yapılan işlemde tolerans seçilmeseydi aşağıdaki gibi bir ekran sonucu olacaktı.
















Sağdaki text kutusuna değer girdiğimizde ise biz renkleri veriyor. Burada bulunan renk kodları aynı zamanda direnç resmi üzerinde de gösteriliyor. Buradaki bir ayrıntı direnç birim değerinin girilmesinde. 
















Peki kod kısmında neler gerçekleşiyor. Bir de onlara bakalım. Kullandığımız dört tane metod var. Bunlar aşağıdaki gibi tanımlanmıştır. Yanlarında açıklamaları da vardır. 








Önce metodlarımız yerine bu sefer buttonlarımızın kodlarını gösterelim. Formun girişinde Load olayında çevir butonunu kapatıyoruz.
private void Form1_Load(object sender, EventArgs e)
        {
            button2.Enabled = false; // OHM değerini çevirmek için kullanılan butonu pasif duruma getiriyoruz... 
        }

Textbox a her hangi bir değer girişi yapıldığın da çevir butonunu açmak içinde aşağıdaki kodları textboxın changed olayına yazıyoruz.
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            button2.Enabled = true; // Her hangi bir değer girildiği anda aktif hale getiriyoruz...
        }

Ayrı bir sayfada renk tablosunu göstermek için aşağıdaki kodları yazalım.
private void button7_Click(object sender, EventArgs e)
        {
            // Renk tablosunu göstermek için ayrı bir sayfaya yönlendiriyoruz... 
            Form ekle = new Form2();
            ekle.Show();
        }
Form2 ye tablomuzu hazırlamalıyız. Bu renk kodlarını gösteren bir tablo olacak. Aşağıdaki gibi hazırlayabiliriz.

































Basit olan button olaylarımızdan sonra tekrar yukarıdaki metodlarımıza geri dönelim. İlk metodumuz ile başlayalım. Gelecek olan renk ismine göre bize sayısal karşılığını verecek olan bir metod tasarlamış oluyoruz. return deger ile de geriye dönüş yapmış oluyoruz. 
public string renkdeger(string renky)
        {
            string deger = "";
            if (renky == "Siyah")
                deger = "0";
            else if (renky == "Kahverengi")
                deger = "1";
            else if (renky == "Kırmızı")
                deger = "2";
            else if (renky == "Turuncu")
                deger = "3";
            else if (renky == "Sarı")
                deger = "4";
            else if (renky == "Yeşil")
                deger = "5";
            else if (renky == "Mavi")
                deger = "6";
            else if (renky == "Mor")
                deger = "7";
            else if (renky == "Gri")
                deger = "8";
            else if (renky == "Beyaz")
                deger = "9";

            return deger;
 }

İkinci metod da ise sayısal verilen değeri renk karşılığına dönüştürmektedir. 
public string renkysayi(string renky)
        {
            string deger = "";
            if (renky == "0")
                deger = "Siyah";
            else if (renky == "1")
                deger = "Kahverengi";
            else if (renky == "2")
                deger = "Kırmızı";
            else if (renky == "3")
                deger = "Turuncu";
            else if (renky == "4")
                deger = "Sarı";
            else if (renky == "5")
                deger = "Yeşil";
            else if (renky == "6")
                deger = "Mavi";
            else if (renky == "7")
                deger = "Mor";
            else if (renky == "8")
                deger = "Gri";
            else if (renky == "9")
                deger = "Beyaz";

            return deger;
        }

Direnç resminin üzerinde renklerin gözükebilmesi için aşağıdaki metodumuzu kullanacağız. Direnç resminin üzerine yerleştirmiş olduğumuz butonlar ile renk değişimlerini yapacağız. Daha öncede söylediğimiz gibi direnç resminin üzerinde 4 tane butonumuz var. Burada butonların backcolor özelliği ile renklerini değiştireceğiz. 

Renklerimiz için 4 tane comboboxımızı var. Birden fazla combobox olduğu için aynı metodda kullanmak amacı ile metodumuz da combokutusu adında Combobox türünde bir parametre tanımlıyoruz. Aynı şekilde 4 tane butonumuz olduğu için butonum adında Button türünde de bir parametre tanımlıyoruz. 

Buradaki son parametre olan deger parametresi ise ayrım yapmak için kullanılıyor. Deger eğer boş olursa renklerden direnç değeri hesaplama yapıldığı anlaşılıyor. Eğer direnç değeri verilip renkler bulunacaksa deger dolu olarak geliyor. Aşağıdaki ilk if bunun için kullanılmaktadır. renkkontrolet değişkenine ya comboboxdan yada deger parametresinden bulunmak istenen renk ataması yapılmaktadır. 
void direncrenkleri(ComboBox combokutusu, Button butonum,string deger)
        {
            // Bu metoda değer gelirken combobox ve button isimlerini gönderiyoruz... 
            string renkkontrolet = "";
            if (deger == "")
                renkkontrolet = combokutusu.Text;
            else
                renkkontrolet = deger;

            if (renkkontrolet == "Siyah")
                butonum.BackColor = Color.Black;
            else if (renkkontrolet == "Kahverengi")
                butonum.BackColor = Color.Brown;
            else if (renkkontrolet == "Kırmızı")
                butonum.BackColor = Color.Red;
            else if (renkkontrolet == "Turuncu")
                butonum.BackColor = Color.Orange;
            else if (renkkontrolet == "Sarı")
                butonum.BackColor = Color.Yellow;
            else if (renkkontrolet == "Yeşil")
                butonum.BackColor = Color.Green;
            else if (renkkontrolet == "Mavi")
                butonum.BackColor = Color.Blue;
            else if (renkkontrolet == "Mor")
                butonum.BackColor = Color.Purple;
            else if (renkkontrolet == "Gri")
                butonum.BackColor = Color.Gray;
            else if (renkkontrolet == "Beyaz")
                butonum.BackColor = Color.White;
        }

Tolerans değerinin hesaplanması 4. comboboxda olacaktır. Eğer comboboxda her hangi bir seçim olmadı ise bu durumda tolerans değer hesaplaması yapılmayacaktır. Burada parametre olarak gelen deger direnc değerini, renky combobox4 de olan tolerans rengini, cins ise direnc birimini göstermektedir.
void toleranshesapla(string renky, double deger, string cins)
        {
            if (renky == "Siyah")
                label10.Text = "Tolerans =  +/- " + (deger * 0.2).ToString() +" " + cins;
            else if (renky == "Kahverengi")
                label10.Text = "Tolerans =  +/- " + (deger * 0.01).ToString() + " " + cins;
            else if (renky == "Kırmızı")
                label10.Text = "Tolerans =  +/- " + (deger * 0.002).ToString() + " " + cins;
            else if (renky == "Yeşil")
                label10.Text = "Tolerans =  +/- " + (deger * 0.005).ToString() + " " + cins;
            else if (renky == "Beyaz")
                label10.Text = "Tolerans =  +/- " + (deger * 0.1).ToString() + " " + cins;
            else if (renky == "Altın")
                label10.Text = "Tolerans =  +/- " + (deger * 0.05).ToString() + " " + cins;
            else if (renky == "Gümüş")
                label10.Text = "Tolerans =  +/- " + (deger * 0.1).ToString() + " " + cins;
        }

Gelelim direnç değeri hesapla butonumuzun içeriğindeki kodlara.
Madde 1: İlk aşamada combobox1,2,3 değerlerinin dolu olması gerekiyor.
Madde 2: renkdeger adındaki metodumuza comboboxda seçilen renkleri gönderip sayısal karşılıklarını alırız. Madde 3: Direnç hesaplamasını yapıp sonuc adındaki değişkenimize aktarıyoruz.
Madde 4: Direnç birimlerinin hesaplatıyoruz. Ohm, Kohm, Mohm olmasını belirliyoruz.
Madde 5: Tolerans hesaplamasını yaptırıyoruz.
Madde 6: Direnç resminin üzerindeki buttonlara renkler aktarılıyor.

private void button1_Click(object sender, EventArgs e)
        {
            //Madde 1:
            if (comboBox1.Text != "" && comboBox2.Text != "" && comboBox3.Text != "")
            {
                double sonuc = 0;
             
                // Madde 2:
                string a = renkdeger(comboBox1.Text); // 1. Renk değeri...
                string b = renkdeger(comboBox2.Text); // 2. Renk değeri...
                string c = renkdeger(comboBox3.Text); // 3. Renk değeri...
                string d = renkdeger(comboBox4.Text); // Bu tolerans değeri için...

                // Madde 3:
                double c2 = Convert.ToDouble(c); // Bu kısımda çarpan olan 3. renk değeri hesaplanıyor...
                c2 = Math.Pow(10, c2);

                string ab = (a).ToString() + (b).ToString(); // İlk iki renk değeri birleştiriliyor...
                double ab2 = Convert.ToDouble(ab);
                sonuc = ab2 * c2; // Bu kısımda renk değeri sayısal olarak bulunuyor...

                // Madde 4: 
                // Bu kısım Mohm, Kohm yada Ohm olduğunu algılamak için kullanılıyor...
                string cins = ""; // Tolerans işleminin sonunda birimi göstermek için...
                if (sonuc > 1000000)
                {
                    sonuc = sonuc / 1000000;
                    label5.Text = sonuc.ToString() + "  Mohm";
                    cins = "Mohm";
                }
                else if (sonuc > 1000)
                {
                    sonuc = sonuc / 1000;
                    label5.Text = sonuc.ToString() + "  Kohm";
                    cins = "Kohm";
                }
                else
                {
                    label5.Text = sonuc.ToString() + " ohm";
                    cins = "ohm";
                }

                // Madde 5:
                if (comboBox4.Text != "")
                    toleranshesapla(comboBox4.Text, sonuc,cins);

                // Dirençin üzerinde yapacağımız renklendirme kısmı burada yapılıyor... 
          // direncrenkleri metodunun 3. degeri olan boşluk kısmını sayıdan renge çevirmek istediğimizde kullanıyoruz... 
                // Madde 6:
                direncrenkleri(comboBox1, button3, "");
                direncrenkleri(comboBox2, button4, "");
                direncrenkleri(comboBox3, button5, "");
                direncrenkleri(comboBox4, button6, "");

                // Comboboxların içeriğini boşaltmak için aşağıdaki komutlar kullanılabilir... 
                //foreach (Control item in this.Controls)
                //{
                //    if (item is ComboBox)
                //        item.ResetText();
                //}
            }
            else
                MessageBox.Show("Eksik Seçim... Hata...");
        } 

Çevir butonun içerisindeki kodlarımız ise aşağıdaki gibi olacaktır.

  • Radiobuttonlardan 1. nin checked özelliğini arayüz kısmında true olarak tanımlayalım. Bu sayede muhhakkah bir seçim yapılmış olacaktır. Direnç birimleri için bir seçim olmalıdır. 
  • Direnç hesaplaması için substring komutunu kullandık. sonuc değişkeninin içerisinde bulunan ilk rakam bizim 1. rengimizi, ikinci rakam bizim 2. rengimizi, geriye kalan sıfırlar ise 3. rengimizi göstermektedir.
  • Direnc resminin üzerinde buttonlara renkleri vermek için direncrenkleri(comboBox1, button3, label6.Text); metodunu kullanıyoruz. Burada comboboxlar aslında kullanılmıyor. Burada asıl önemli olan labelların içerisindeki renklerin gönderilmesi. 

private void button2_Click(object sender, EventArgs e)
        {
            string deger = "";
            // ohm, kohm, mohm durumunun algılanması...
            if (radioButton1.Checked == true)
                deger = textBox1.Text;
            else if (radioButton2.Checked == true)
                deger = (int.Parse(textBox1.Text) * 1000).ToString();
            else if (radioButton3.Checked == true)
                deger = (int.Parse(textBox1.Text) * 1000000).ToString();

            // Direnç renklerinin hesaplanması...
            string ilkdeger = deger.Substring(0, 1);
            label6.Text = renkysayi(ilkdeger);
            string ikincideger = deger.Substring(1, 1);
            label7.Text = renkysayi(ikincideger);
            string sondeger = renkysayi((deger.Length - 2).ToString());
            label8.Text = sondeger;

            // Direncin üzerinde yapacağımız renklendirme kısmı burada yapılıyor...
            direncrenkleri(comboBox1, button3, label6.Text);
            direncrenkleri(comboBox2, button4, label7.Text);
            direncrenkleri(comboBox3, button5, label8.Text);

            // Ekranda gözükmeleri için true yapıyoruz...
            label6.Visible = true;
            label7.Visible = true;
            label8.Visible = true;
        }

Direnç hesaplaması için güzel bir çalışma oldu.