Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C#][RS232] wysyłanie danych

Crasher96 29 Lip 2010 18:11 3299 2
  • #1 29 Lip 2010 18:11
    Crasher96
    Poziom 10  

    Witam,
    jestem w trakcie tworzenia programu do sterowania 8-ma serwomechanizmami. Program piszę w C# i ma on za zadanie wysyłać do mikrokontrolera ramkę danych z położeniami poszczególnych serw. Dalszą częścią zajmie się już mikrokontroler. Na obecną chwilę nie wszystko jeszcze działa i nie wiem czy błędny jest program na PC czy na mikrokontroler. Program na PC wygląda jak poniżej:

    [C#][RS232] wysyłanie danych

    guziki z plusami i minusami zwiększają/zmniejszają wartość zmiennej. Przy każdym wciśnięciu przycisku wysyłana jest ramka danych składająca się z 8 bajtów (po jednym dla każdego serwa). W tym celu stworzyłem klasę:



    Code:

    class ramka
        {
            public byte serwo1 = 30;
            public byte serwo2 = 40;
            public byte serwo3 = 50;
            public byte serwo4 = 60;
            public byte serwo5 = 70;
            public byte serwo6 = 80;
            public byte serwo7 = 90;
            public byte serwo8 = 100;

            public byte[] tablica;
           
            public ramka()
            {
                tablica = new byte[8];
            }
            public void ZrobTablice()
            {
                tablica[0] = serwo1;
                tablica[1] = serwo2;
                tablica[2] = serwo3;
                tablica[3] = serwo4;
                tablica[4] = serwo5;
                tablica[5] = serwo6;
                tablica[6] = serwo7;
                tablica[7] = serwo8;
            }
        }


    każde wciśnięcie przycisku powoduje poniższe modyfikacje oraz wywołuje funkcję wysyłającą:

    Code:

            private void button3_Click(object sender, EventArgs e)
            {
                if (mojaRamka.serwo1 < 111 - krok)
                {
                    mojaRamka.serwo1 += krok;
                    label21.Text = mojaRamka.serwo1.ToString();
                    rsWyslij();
                }
            }

    private void rsWyslij()
            {
                mojaRamka.ZrobTablice();

                if (serialPort1.IsOpen)
                {
                    serialPort1.Write(mojaRamka.tablica, 0, 8);
                }
            }


    Czy poprawnie realizuję sposób wysłania danych?...

    W załączniku cały kod programu:

    0 2
  • #2 29 Lip 2010 19:27
    gaskoin
    Poziom 38  

    nie prościej

    Code:
    class ramka
    
        {
            public byte[] tablica;
           
            public ramka()
            {
                tablica = new byte[8];
                for(int i = 0; i < 8; i++) tablica[i] = 10*i+30;
            }
        }


    ?

    0
  • #3 29 Lip 2010 20:11
    Crasher96
    Poziom 10  

    faktycznie, sporo krócej :D i nie trzeba przed każdym wysłaniem tworzyć tej tablicy.

    a program działa jak ta lala :D

    0