none
Robot dirigé par interface C# RRS feed

  • Question

  • Bonjour,

    veuillez m'excuser si la question a été plusieurs fois posées, mais j'ai un problème avec le port série. Avant mon interface freezait, maintenant l'interface ne fonctionne plus du tout, j'ai fait mes recherche et j'ai appris qu'il fallait utiliser un BackgroundWorker, mais je ne sais pas du tout comment l'utiliser, et même avec ça l'interface plante. Je ne sais plus quoi faire, alors est-ce que vous avez une solution a mon problème ?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO.Ports;
    
    namespace Interface_robot
    {
        public partial class Interface : Form
        {
    
            int Bat;
    
            public Interface()
            {
                InitializeComponent();
    
                serialPort1.BaudRate = 9600;
                serialPort1.Close();
    
                buttonstart.Enabled = true;
                buttonstop.Enabled = false;
                textcontrols.Enabled = false;
                enter.Enabled = false;
            }
    
            private void numericUpDown1_ValueChanged(object sender, EventArgs e)
            {
                serialPort1.PortName = "COM"+numericUpDown1.Value.ToString();
            }
    
            private void buttonstart_Click(object sender, EventArgs e)
            {
                serialPort1.Open();
    
                if (serialPort1.IsOpen)
                {
                    buttonstart.Enabled = false;
                    buttonstop.Enabled = true;
                }
            }
    
            private void buttonstop_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen)
                {
                    serialPort1.Close();
                    buttonstart.Enabled = true;
                    buttonstop.Enabled = false;
                }
            }
    
            private void checkBox1_CheckedChanged(object sender, EventArgs e)
            {
                if (checkBox1.Checked == true)
                { 
                    textcontrols.Enabled = true;
                    enter.Enabled = true;
                }
                else
                {
                    textcontrols.Enabled = false;
                    enter.Enabled = false;
                }
            }
    
            private void buttonA1_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen & Bat == 0)
                {
                    serialPort1.Write("a");
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    serialPort1.Write("g");
                }
            }
    
            private void buttonB1_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen & Bat == 0)
                {
                    serialPort1.Write("b");
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    serialPort1.Write("h");
                }
            }
    
            private void buttonC1_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen & Bat == 0)
                {
                    serialPort1.Write("c");
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    serialPort1.Write("i");
                }
            }
    
            private void buttonA2_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen & Bat == 0)
                {
                    serialPort1.Write("d");
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    serialPort1.Write("j");
                }
            }
    
            private void buttonB2_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen & Bat == 0)
                {
                    serialPort1.Write("e");
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    serialPort1.Write("k");
                }
            }
    
            private void buttonC2_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen & Bat == 0)
                {
                    serialPort1.Write("f");
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    serialPort1.Write("l");
                }
            }
    
            private void buttonbat_Click(object sender, EventArgs e)
            {
                if (serialPort1.IsOpen)
                {
                    Bat = 1;
                }
                else
                {
                    Bat = 0;
                }
            }
    
            private void enter_Click(object sender, EventArgs e)
            {
                textcontrols.Select(0, 5);
                string code = textcontrols.SelectedText;
    
                if (serialPort1.IsOpen & Bat == 0)
                {
                    if (code == "XA001")
                    {
                        serialPort1.Write("d");
                    }
                    else if (code == "XB002")
                    {
                        serialPort1.Write("e");
                    }
                    else if (code == "XC003")
                    {
                        serialPort1.Write("f");
                    }
                }
                else if (serialPort1.IsOpen & Bat == 1)
                {
                    if (code == "XA001")
                    {
                        serialPort1.Write("j");
                    }
                    else if (code == "XB002")
                    {
                        serialPort1.Write("k");
                    }
                    else if (code == "XC003")
                    {
                        serialPort1.Write("l");
                    }
                }
                else
                {
                    MessageBox.Show("La valeur est inconnue ou le Port série n'est pas ouvert.");
                }
    
                textcontrols.Clear();
            }
    
            private void timer_Tick(object sender, EventArgs e)
            {
                string[] ports = SerialPort.GetPortNames();
                string COMname = String.Join(", ", ports);
                labelcom.Text = COMname;
    
                if (serialPort1.IsOpen)
                {
                    int vbat = Convert.ToInt32(serialPort1.ReadByte());
    
                    progressbat.Value = vbat;
                    label5.Text = vbat.ToString() + "%";
                }
                else
                {
                    label5.Text = "";
                }
            }
    
        }
    }

    Merci pour votre future réponse, cordialement Ilak.

    dimanche 24 mai 2015 11:33

Réponses

  • Bonjour Ilak,
    Vous pouvez trouver la documentation concernant BackgroundWorker ici. J'ai trouvé ces tutoriels qui expliquent comment utiliser BackgroundWorker:
    BackgroundWorker
    BackgroundWorker Basics in C#

    Dans le thread suivant il y a une bonne explication qui peut être utile: Serial Port C# Console Read

    Cordialement,
    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 25 mai 2015 11:22
    Modérateur