WiiRemote – Robot Hareket Kalibrasyon Ayarı

Posted by : Bora Ciner | 19 Mayıs 2009 Salı | Published in

Oluşturmuş olduğumuz Form’a Wiimote kütüphanesini ve bağlantı kodlarını eklemiştik, şimdi de robot için hareketleri nasıl kalibre edip mikrodenetleyiciye gönderecğimizi anlayalım.

Öncelikle Wiimote change state fonksiyonunu kullamayacağız çünkü wiimote’daki değişim MCU-PC iletişim hızından daha hızlı olabilir, eğer böyle bir şey olursa da program hata verir. Bu yüzden bir Timer ekleyip hızını 100 (0.1s) ayarlayalım. içine de şu kodları ekleyelim

Uygulamadaki Kalibrasyon 0.2’dir

bool button_B = wiimote1.WiimoteState.ButtonState.B;    /* A butonunun degeri*/
float xAccel = wiimote1.WiimoteState.AccelState.Values.X;  /* X ekseni ivmesel değişkeni */
float yAccel = wiimote1.WiimoteState.AccelState.Values.Y;
float zAccel = wiimote1.WiimoteState.AccelState.Values.Z;
label23.Text = xAccel.ToString();
label29.Text = yAccel.ToString();
label30.Text = zAccel.ToString();

if (button_B == true)
{
    label24.Text = "Button B Basili";
    label33.Text = "Dur";
    // if (port.IsOpen) port.WriteLine("5");
    //else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);

    label35.Text = "Ates Ediliyor";
    if (port.IsOpen) port.WriteLine("7");
    else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);

}
else
{
    label24.Text = "Button B Basili Degil";
    label35.Text = "Ates Edilmiyor";

    if (yAccel > 0.2)
    {
        label33.Text = "Asagi";
        if (port.IsOpen) port.WriteLine("4");
        else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    else
    {
        if (yAccel < -0.2)
        {
            label33.Text = "Yukari";
            if (port.IsOpen) port.WriteLine("3");
            else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        else
        {
            if (xAccel > 0.2)
            {
                label33.Text = "Saga";
                if (port.IsOpen) port.WriteLine("2");
                else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            else
            {
                if (xAccel < -0.2)
                {
                    label33.Text = "Sola";
                    if (port.IsOpen) port.WriteLine("1");
                    else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
                else
                {
                    label33.Text = "Dur";
                    if (port.IsOpen) port.WriteLine("5");
                    else MessageBox.Show("Serial port is closed!", "RS232 tester", MessageBoxButtons.OK, MessageBoxIcon.Error);

                }
            }
        }
    }
}

Bu kodlar sayesinde hem ekranda robotun hangi komutu yerine getirdiğini görebiliyoruz hemde aynı anda o komutları göndererek robotu izleyebiliyoruz.

Not: Bu uygulamada form’a “port” adında bir serial port objesi eklenmiştir

(0) Comments