Utilizarea portului USB

Utilizarea portului USB pentru comunicatii

    Portul serial a fost utilizat pentru a realiza prima legatura intre doua calculatoare. Portul serial este des utilizat si in prezent pentru a conecta diverse dispozitive la calculator. Chiar daca majoritatea calculatoarelor nu mai dispun fizic de un port serial, se utilizeaza des porturi seriale virtuale, realizate prin intermediul portului USB (Universal Serial Bus). Cu alte cuvinte exista o serie de dispozitive conectate la calculator prin intermediul USB insa din punct de vedere logic ele sunt conectate printr-un port serial virtual.
    Vom utiliza sistemul de achizitie "Multiio", un sistem de achizitie date bazat pe controlerul Arduino UNO


    Sistemul de achizitie "Multiio" dispune de 5 intrari analogice 4 digitale si 8 iesiri digitale, conectate astfel:



     Comenzile acceptate de sistemul de achizitie "Multiio":
Vezi toate comenzile sistemului de achizitie "Multiio"
  1. SG,val_pwm -- Start generatoare Sinus - P6 si Dinfi de fierastrau - P5 cu frecventa proportionala cu val_pwm, Aprindere p7
  2. PWM,val_pwm -- Generare PWM - P6 cu valoarea val_pwm
  3. AX4,val -- Afisare pe 4 digiti 7 segmente a valorii val
  4. C0,val ... C3,val -- Activare coloana din matrice de leduri
  5. M1,val_b -- Citire intrari analogice si comanda led-uri cu val_b (se trimite si suma de control)
  6. AA -- Citire valori analogice si DI
  7. A0 ... A4 -- Citire valoare analogica A0 ... A4
  8. O,val -- Invalidare generator sinus si df, Activare led-uri cu valoarea val
  9. DI -- Citire intrari digitale si transmitere val=B0+2*B1+4*B2+8*B3
  10. AI0,val_pwm -- Citire pachet de date A0,A1, Generare pwm pe p6 cu valoarea val_pwm, Generare frecventa pe p10 cu factorul de umplere val_pwm, Aprindere p7, Invalidare sin
  11. AI1,val_pwm -- Citire pachet de date A0,A1 (200 valori A0, 200 valori A1)
  12. AI2,val_pwm -- Citire pachet de date A0,A2 (200 valori A0, 200 valori A2)
  13. AI3,val_pwm -- Citire pachet de date A0,A3 (200 valori A0, 200 valori A3)
  14. AI4,val_pwm -- Citire pachet de date A0,A4 (200 valori A0, 200 valori A4)
  15. D1I,val_pwm -- Citire pachet de date B0,B1,B2,B3 (400 de valori zecimale=B0+2*B1+4*B2+8*B3)

     Pentru programator, conectarea prin USB este identica cu o conectare prin intermediul unui port serial fizic. Conectarea prin intermediul portului USB fiind deci "transparenta" din punctul de vedere al scrierii aplicatiilor, acestea fiind scrise la fel cu aplicatiile pentru portul serial.

  • Configurarea si initializarea portului serial

    C# - Selectarea portului dorit

                int i, j;
                // Listez porturile seriale
                Nume_porturi = System.IO.Ports.SerialPort.GetPortNames();
                this.Porturi_s.Items.Clear();
    
                //Adaug porturile exixtente
    
                for (i = 0; i < Nume_porturi.Length; i++)
                {
                    this.Porturi_s.Items.Add(Nume_porturi[i]);
    
                }
    
                //Pozitionarea listei pe primul element
                this.Porturi_s.SelectedIndex = 0;
    
    

         Unde "Porturi_s" este un obiect de tip ListBox.

    C# - Conectarea la portul dorit

                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
    


    C# - Deconectarea de la portul serial

                this.serialPort1.Close();
                this.label1.Text = "Portul este deconectat!";
    


    C# - scrierea si citirea portului serial

                cda = "xx";
                if (this.serialPort1.IsOpen)
                {
                   this.serialPort1.Write(cda);
                   txt = "";
                   txt = this.serialPort1.ReadExisting();
                   if (txt.Length > 0)
                   {
                      this.label1.Text = txt;  
                   }
                   else
                   {
                      this.label1.Text = "Nu vin date!";
                   }
                }

         Unde "xx" este una din comenzile sistemului "Multiio".

    Utilizarea sistemului de achizitie "Multiio"

        Pentru a putea fi utilizat, portul serial trebuie configurat, cu alte cuvinte trebuiesc stabilite valorile pentru diversi parametri, cum ar fi: viteza de lucru, lungimea cuvantului, paritate etc.
        In vederea utilizarii portului serial, deschidem un nou proiect C# Windows Forms Application intitulat "RS_232_v01" . In cadrul acestei aplicatii, e nevoie de o interfata care sa permita selectarea portului serial, deschiderea si inchiderea acestuia, stabilirea unui sir de caractere pentru a fi trimis prin portul serial, trimiterea acestuia, citirea unui sir de caractere si afisarea sirului citit. Vom plasa deci



        Obiectul de tip "ListBox" este folosit pentru selectarea unui port serial. La un moment dat pot fi deschise mai multe porturi seriale, deci trebuie sa dispunem de o metoda prin care sa selectam portul serial dorit.
        Obiectul de tip "ListBox" este cel mai potrivit pentru a selecta unul din porturile seriale cu conditia ca in momentul lansarii aplicatiei sa fie insctrise elementele listei cu numele porturilor deschise in acel moment.

  • Citire intrari analogice



        Codul sursa fiind:

    namespace RS_232_v01
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string txt, cda;
            int k;
            static String[] Nume_porturi = new String[11];
            private void Form1_Load(object sender, EventArgs e)
            {
                int i, j;
                // Listez porturile seriale
                Nume_porturi = System.IO.Ports.SerialPort.GetPortNames();
                this.Porturi_s.Items.Clear();
    
                //Adaug porturile exixtente
    
                for (i = 0; i < Nume_porturi.Length; i++)
                {
                    this.Porturi_s.Items.Add(Nume_porturi[i]);
                }
    
                //Pozitionarea listei pe primul element
                this.Porturi_s.SelectedIndex = 0;
                this.label1.Text = "Conectati-va la portul serial!";
    
            }
    
            private void but_con_Click(object sender, EventArgs e)
            {
                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
                this.textBox1.Text = "AA";
                this.serialPort1.Write("AA");
            }
    
            private void but_dec_Click(object sender, EventArgs e)
            {
                this.serialPort1.Close();
                this.label1.Text = "Portul este deconectat!";
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                k++;
                if (k > 123456789)
                    k = 0;
                this.label2.Text = k.ToString();
    
                cda = this.textBox1.Text;
     
                if (this.serialPort1.IsOpen)
                {
                   this.serialPort1.Write(cda);
                   txt = "";
                   txt = this.serialPort1.ReadExisting();
                   if (txt.Length > 0)
                   {
                      this.textBox2.Text = txt;  
                   }
                   else
                   {
                      this.label1.Text = "Nu vin date!";
                   }
                }
            }
        }
    }
    

        Datele primite trebiesc despachetate pentru a putea fi utilizate. Urmatoarea aplicatie "RS_232_v02" Extrage valorie V4-V0 din sirul primit.



    namespace RS232_v02
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string cda, rec;
            int k;
            static String[] Nume_porturi = new String[11];
            private void Form1_Load(object sender, EventArgs e)
            {
                int i, j;
                // Listez porturile seriale
                Nume_porturi = System.IO.Ports.SerialPort.GetPortNames();
                this.Porturi_s.Items.Clear();
    
                //Adaug porturile exixtente
    
                for (i = 0; i < Nume_porturi.Length; i++)
                {
                    this.Porturi_s.Items.Add(Nume_porturi[i]);
                }
    
                //Pozitionarea listei pe primul element
                this.Porturi_s.SelectedIndex = 0;
                this.label1.Text = "Conectati-va la portul serial!";
    
            }
    
            private void but_con_Click(object sender, EventArgs e)
            {
                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
                this.textBox1.Text = "AA";
                this.serialPort1.Write("AA");
            }
    
            private void but_con_Click_1(object sender, EventArgs e)
            {
                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
                this.textBox1.Text = "AA";
                this.serialPort1.Write("AA");
            }
    
            private void but_dec_Click(object sender, EventArgs e)
            {
                this.serialPort1.Close();
                this.label1.Text = "Portul este deconectat!";
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                k++;
                if (k > 123456789)
                    k = 0;
                this.label2.Text = k.ToString();
    
                cda = this.textBox1.Text;
    
                if (this.serialPort1.IsOpen)
                {
                    this.serialPort1.Write(cda);
                    rec = "";
                    rec = this.serialPort1.ReadExisting();
                    if (rec.Length > 0)
                    {
                        this.textBox2.Text = rec;
                        int p1 = rec.IndexOf(",");
                        int p2 = rec.IndexOf(",", p1 + 1);
                        int p3 = rec.IndexOf(",", p2 + 1);
                        int p4 = rec.IndexOf(",", p3 + 1);
                        int p5 = rec.IndexOf(",", p4 + 1);
                        int p6 = rec.IndexOf(",", p5 + 1);
                        this.label7.Text = "V4: \n\n" + rec.Substring(p1 + 1, p2 - p1 - 1);
                        this.label8.Text = "V3: \n\n" + rec.Substring(p2 + 1, p3 - p2 - 1);
                        this.label9.Text = "V2: \n\n" + rec.Substring(p3 + 1, p4 - p3 - 1);
                        this.label10.Text = "V1: \n\n" + rec.Substring(p4 + 1, p5 - p4 - 1);
                        this.label11.Text = "V0: \n\n" + rec.Substring(p5 + 1, p6 - p5 - 1);
    
                    }
                    else
                    {
                        this.label1.Text = "Nu vin date!";
                        this.label10.Text = " ";
                        this.label9.Text = " ";
                        this.label8.Text = " ";
                        this.label7.Text = " ";
                    }
                }
            }
        }
    }
    

        Se observa ca p1-p6 sunt pozitiile in care se gaseste separatorul "," iar p6 este pozitia in care se termina sirul, respectiv lungimea acestuia. Pozitia este determinata folosind metoda "IndexOf". Pentru a extrage parametrul curent, stiindu-se pozitia celor doi separatori "," adica inceputul si sfarsitul subsirului ce reprezinta parametrul respectiv, s-a folosit metoda "Substring".

  • Comanda iesiri digitale

        Urmatoarea aplicatie "RS_232_v03" utilizeaza iesirile digitale:



    namespace RS_232_v03
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string txt, cda;
            int k;
            static String[] Nume_porturi = new String[11];
            private void Form1_Load(object sender, EventArgs e)
            {
                int i, j;
                // Listez porturile seriale
                Nume_porturi = System.IO.Ports.SerialPort.GetPortNames();
                this.Porturi_s.Items.Clear();
    
                //Adaug porturile exixtente
    
                for (i = 0; i < Nume_porturi.Length; i++)
                {
                    this.Porturi_s.Items.Add(Nume_porturi[i]);
                }
    
                //Pozitionarea listei pe primul element
                this.Porturi_s.SelectedIndex = 0;
                this.label1.Text = "Conectati-va la portul serial!";
            }
    
            private void but_con_Click(object sender, EventArgs e)
            {
                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
                this.serialPort1.Write("O77");
            }
    
            private void but_dec_Click(object sender, EventArgs e)
            {
                this.serialPort1.Close();
                this.label1.Text = "Portul este deconectat!";
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                k++;
                if (k > 123456789)
                    k = 0;
                this.label2.Text = k.ToString();
    
                cda = "O" + System.Convert.ToString(this.numericUpDown1.Value);
    
                if (this.serialPort1.IsOpen)
                {
                    this.serialPort1.Write(cda);
                    txt = "";
                    txt = this.serialPort1.ReadExisting();
                    if (txt.Length > 0)
                    {
                        this.textBox2.Text = txt;
                    }
                    else
                    {
                        this.label1.Text = "Nu vin date!";
                    }
                }
            }
        }
    }
    
    


  • Multiio

        Urmatoarea aplicatie utilizeaza intrarile analogice, digitale si iesirile digitale:



    namespace Multiio_v06
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            public System.Drawing.Graphics desen;
            public System.Drawing.Pen creion_blu;
            public System.Drawing.Pen creion_rosu;
            public System.Drawing.Pen creion_gri;
            public System.Drawing.SolidBrush pens_blu;
            public System.Drawing.SolidBrush pens_red;
            public System.Drawing.SolidBrush pens_back;
            public System.Drawing.SolidBrush radiera;
            public System.Drawing.Font font_nina;
            public binar binar1;
            public osciloscop grafic0;
            public termo termo1;
            public termo termo2;
            public termo termo3;
            public termo termo4;
            public termo termo5;
            int pozx = 310, pozy = 50, n_maxx = 225, n_maxy = 200;
            Int32 val_max = 1025, k;
            Int32 a0_val, a1_val, a2_val, a3_val, a4_val;
            double val_y0, val_y1, val_y2, val_y3, val_y4;
            UInt64 digi;
            string txt, cda;
            int c0, c1, c2, c3, c4, c5, c6, c7, val_cmd, val_cmd_v;
            static int[] a0_valori = new int[0];
            static int[] a1_valori = new int[0];
            static int[] a2_valori = new int[0];
            static int[] a3_valori = new int[0];
            static int[] a4_valori = new int[0];
            static String[] date_r = new String[11]; // Date receptionate
            static String[] date_c = new String[11]; // Date check - verificate daca sunt ok
            static String delimStr = " ,.:\t";
            static Char[] delimiter = delimStr.ToCharArray();
            static String[] Nume_porturi = new String[11];
            private void Form1_Load(object sender, EventArgs e)
            {
                date_r = "0,0,0,0,0,0,0,0,0,0,0".Split(delimiter);
                date_c = "0,0,0,0,0,0,0,0,0,0,0".Split(delimiter);
                desen = this.CreateGraphics();
                creion_blu = new System.Drawing.Pen(System.Drawing.Color.Blue);
                creion_rosu = new System.Drawing.Pen(System.Drawing.Color.Red);
                creion_gri = new System.Drawing.Pen(System.Drawing.Color.LightGray);
                pens_blu = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
                pens_red = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
                pens_back = new System.Drawing.SolidBrush(this.BackColor);
                font_nina = new System.Drawing.Font("Nina", 8);
                binar1 = new binar();
                binar1.init_binar(0, 275, 330, 30);
                Array.Resize(ref a0_valori, n_maxx + 1);
                Array.Resize(ref a1_valori, n_maxx + 1);
                Array.Resize(ref a2_valori, n_maxx + 1);
                Array.Resize(ref a3_valori, n_maxx + 1);
                Array.Resize(ref a4_valori, n_maxx + 1);
                grafic0 = new osciloscop(desen, pozx, pozy, n_maxx, n_maxy, val_max);
                termo1 = new termo(10, 50, 10, 200, 1025);
                termo2 = new termo(65, 50, 10, 200, 1025);
                termo3 = new termo(120, 50, 10, 200, 1025);
                termo4 = new termo(175, 50, 10, 200, 1025);
                termo5 = new termo(230, 50, 10, 200, 1025);
                //int i, j;
                // Listez porturile seriale
                Nume_porturi = System.IO.Ports.SerialPort.GetPortNames();
                this.Porturi_s.Items.Clear();
    
                //Adaug porturile exixtente
    
                for (int i = 0; i < Nume_porturi.Length; i++)
                {
                    this.Porturi_s.Items.Add(Nume_porturi[i]);
                }
    
                //Pozitionarea listei pe primul element
                this.Porturi_s.SelectedIndex = 0;
                this.label1.Text = "Conectati-va la portul serial!";
    
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                k++;
                if (k > 123456789)
                    k = 0;
                this.label2.Text = k.ToString();
                if (this.checkBox8.Checked)
                    c0 = 1;
                else
                    c0 = 0;
                if (this.checkBox7.Checked)
                    c1 = 1;
                else
                    c1 = 0;
                if (this.checkBox6.Checked)
                    c2 = 1;
                else
                    c2 = 0;
                if (this.checkBox5.Checked)
                    c3 = 1;
                else
                    c3 = 0;
                if (this.checkBox4.Checked)
                    c4 = 1;
                else
                    c4 = 0;
                if (this.checkBox3.Checked)
                    c5 = 1;
                else
                    c5 = 0;
                if (this.checkBox2.Checked)
                    c6 = 1;
                else
                    c6 = 0;
                if (this.checkBox1.Checked)
                    c7 = 1;
                else
                    c7 = 0;
    
                val_cmd = 128 * c7 + 64 * c6 + 32 * c5 + 16 * c4 + 8 * c3 + 4 * c2 + 2 * c1 + c0;
    
                this.label16.Text = System.Convert.ToString(val_cmd);
                int transl = 0;
                int amplif = 1;
                int zero = 0;
                if (this.serialPort1.IsOpen)
                {
                    if (val_cmd == val_cmd_v)  //  nu am val_cmd noua deci lanxsez comanda "AA"
                    {
                        cda = "AA" + val_cmd.ToString();
                        this.serialPort1.Write(cda);
                        txt = "";
                        txt = this.serialPort1.ReadExisting();
                        if (txt.Length > 0)
                        {
                            //this.label1.Text = txt;
                            //Despachetare date
                            date_r = txt.Split(delimiter);
                            if (date_r.Length == 8) //Verific daca am primit 8 valori
                            {
                                //Pentru comanda M1, verific daca sum ade control e corecta
                                //suma = Convert.ToInt16(date_r[0]) + Convert.ToInt16(date_r[1]) + Convert.ToInt16(date_r[2]) + Convert.ToInt16(date_r[3]) + Convert.ToInt16(date_r[4]) + Convert.ToInt16(date_r[5]) + Convert.ToInt16(date_r[6]) + Convert.ToInt16(date_r[7]);
                                //if (suma % 1024 == Convert.ToInt16(date_r[8]))
                                //{
                                this.label1.Text = txt;
                                date_c = txt.Split(delimiter);
                                //}
                            }
                            // Afisare grafica 
                            try
                            {
                                a0_val = System.Convert.ToInt16(date_c[1]);
                                a1_val = System.Convert.ToInt16(date_c[2]);
                                a2_val = System.Convert.ToInt16(date_c[3]);
                                a3_val = System.Convert.ToInt16(date_c[4]);
                                a4_val = System.Convert.ToInt16(date_c[5]);
                            }
                            catch (System.FormatException)
                            {
                                this.label1.Text = "Format necorespunzator!";
                            }
    
                            catch (System.IndexOutOfRangeException)
                            {
                                this.label1.Text = "Format necorespunzator!";
                            }
    
                            // Trasare grafic
    
                            //A0
    
                            int f0 = System.Convert.ToInt32(transl + zero + amplif * System.Convert.ToDouble(a0_val));
                            if (f0 > val_max)
                                f0 = val_max - 1;
                            if (f0 < 0)
                                f0 = 0;
                            val_y0 = (Math.Round(Convert.ToDouble(5*f0 / 1024.0), 2));
                            if (radioButton5.Checked)
                                f0 = System.Convert.ToInt32(n_maxy * 20 / 5 + zero + amplif * System.Convert.ToDouble(a0_val/5));
    
                            //A0
                            int f1 = System.Convert.ToInt32(transl + zero + amplif * System.Convert.ToDouble(a1_val));
                            if (f1 > val_max)
                                f1 = val_max - 1;
                            if (f1 < 0)
                                f1 = 0;
                            val_y1 = (Math.Round(Convert.ToDouble(5 * f1 / 1024.0), 2));
                            if (radioButton5.Checked)
                                f1 = System.Convert.ToInt32(n_maxy * 15 / 5 + zero + amplif * System.Convert.ToDouble(a1_val/5));  
    
                            //A2
                            int f2 = System.Convert.ToInt32(transl + zero + amplif * System.Convert.ToDouble(a2_val));
                            if (f2 > val_max)
                                f2 = val_max - 1;
                            if (f2 < 0)
                                f2 = 0;
                            val_y2 = (Math.Round(Convert.ToDouble(5 * f2 / 1024.0), 2));
                            if (radioButton5.Checked)
                                f2 = System.Convert.ToInt32(n_maxy * 10 / 5 + zero + amplif * System.Convert.ToDouble(a2_val / 5));  
    
                            //A3
                            int f3 = System.Convert.ToInt32(transl + zero + amplif * System.Convert.ToDouble(a3_val));
                            if (f3 > val_max)
                                f3 = val_max - 1;
                            if (f3 < 0)
                                f3 = 0;
                            val_y3 = (Math.Round(Convert.ToDouble(5 * f3 / 1024.0), 2));
                            if (radioButton5.Checked)
                                f3 = System.Convert.ToInt32(n_maxy * 5 / 5 + zero + amplif * System.Convert.ToDouble(a3_val / 5));  
    
                            //A4
                            int f4 = System.Convert.ToInt32(transl + zero + amplif * System.Convert.ToDouble(a4_val));
                            if (f4 > val_max)
                                f4 = val_max - 1;
                            if (f4 < 0)
                                f4 = 0;
                            val_y4 = (Math.Round(Convert.ToDouble(5 * f4 / 1024.0), 2));
    
                            if (radioButton5.Checked)
                                f4 = System.Convert.ToInt32(n_maxy / 5 + zero + amplif * System.Convert.ToDouble(a4_val / 5));  
    
                            for (int i = 0; i < n_maxx - 1; i++)
                            {
                                a0_valori[i] = a0_valori[i + 1];
                                a1_valori[i] = a1_valori[i + 1];
                                a2_valori[i] = a2_valori[i + 1];
                                a3_valori[i] = a3_valori[i + 1];
                                a4_valori[i] = a4_valori[i + 1];
                            }
                            a0_valori[n_maxx - 1] = f0;
                            a1_valori[n_maxx - 1] = f1;
                            a2_valori[n_maxx - 1] = f2;
                            a3_valori[n_maxx - 1] = f3;
                            a4_valori[n_maxx - 1] = f4;
    
     
    
                            //Afisare grafica valori analogice
    
                            grafic0.sterg();
                            if (this.checkBox13.Checked)
                            {
                                grafic0.setval(a0_valori, n_maxx, Color.DeepSkyBlue);
                                this.label31.Text = "y0 = " + val_y0.ToString() + " V";
                            }
                            if (this.checkBox12.Checked)
                            {
                                grafic0.setval(a1_valori, n_maxx, Color.Yellow);
                                this.label30.Text = "y1 = " + val_y1.ToString() + " V";
                            }
                            if (this.checkBox11.Checked)
                            {
                                grafic0.setval(a2_valori, n_maxx, Color.Lime);
                                this.label29.Text = "y2 = " + val_y2.ToString() + " V";
                            }
                            if (this.checkBox10.Checked)
                            {
                                grafic0.setval(a3_valori, n_maxx, Color.Red);
                                this.label28.Text = "y3 = " + val_y3.ToString() + " V";
                            }
                            if (this.checkBox9.Checked)
                            {
                                grafic0.setval(a4_valori, n_maxx, Color.Magenta);
                                this.label27.Text = "y4 = " + val_y4.ToString() + " V";
                            }
                            grafic0.display();
    
                            //Afisare valori analogice
    
                            try
                            {
                                digi = System.Convert.ToUInt64(date_c[7]);
                                this.label26.Text = System.Convert.ToString(digi);
                                this.label4.Text = date_c[5].ToString();
                                this.label6.Text = date_c[4].ToString();
                                this.label8.Text = date_c[3].ToString();
                                this.label10.Text = date_c[2].ToString();
                                this.label12.Text = date_c[1].ToString();
                                this.label14.Text = date_c[0].ToString();
    
                            }
                            catch (System.FormatException)
                            {
                                this.label1.Text = "Format necorespunzator!";
                            }
    
                            // Afisare DI sub forma binara
    
                            binar1.setval(8, digi, desen, creion_rosu, pens_blu, pens_back);
    
                            //Afisare termo1
                            termo1.desenez(desen, creion_blu, creion_gri, pens_red, font_nina);
                            termo1.setval(System.Convert.ToInt16(date_c[5]), desen, pens_blu, pens_back);
                            termo2.desenez(desen, creion_blu, creion_gri, pens_red, font_nina);
                            termo2.setval(System.Convert.ToInt16(date_c[4]), desen, pens_blu, pens_back);
                            termo3.desenez(desen, creion_blu, creion_gri, pens_red, font_nina);
                            termo3.setval(System.Convert.ToInt16(date_c[3]), desen, pens_blu, pens_back);
                            termo4.desenez(desen, creion_blu, creion_gri, pens_red, font_nina);
                            termo4.setval(System.Convert.ToInt16(date_c[2]), desen, pens_blu, pens_back);
                            termo5.desenez(desen, creion_blu, creion_gri, pens_red, font_nina);
                            termo5.setval(System.Convert.ToInt16(date_c[1]), desen, pens_blu, pens_back);
                        }
                        else
                        {
                            this.label1.Text = "Nu vin date!";
                        }
                    }
                    else   //trebuie sa dau comanda "O,val_cmd"
                    {
                        this.serialPort1.Write("O" + System.Convert.ToString(val_cmd));
                        val_cmd_v = val_cmd;
                    }
                }
            }
    
            private void but_con_Click(object sender, EventArgs e)
            {
                if (!this.serialPort1.IsOpen)
                {
                    this.serialPort1.PortName = System.Convert.ToString(this.Porturi_s.Items[this.Porturi_s.SelectedIndex]);
                    this.serialPort1.Open();
                    this.label1.Text = "Portul a fost deschis";
                }
                else
                {
                    this.label1.Text = "Portul este deja deschis deschis";
                }
                this.serialPort1.Write("AA");
            }
    
            private void but_dec_Click(object sender, EventArgs e)
            {
                this.serialPort1.Close();
                this.label1.Text = "Portul este deconectat!";
            }
        }
        public class osciloscop ...
        public class binar ...
        public class termo ...
    }