Przypadkowy odczyt danych z Arduino

0

Witajcie,

Napotkałem problem podczas łączenia Arduino z programem w C#, a mianowicie:
Arduino obsługuje dwa przyciski, które po wyzwalaniu zmieniają wartość z "wlacz1" na "wylacz1" i analogicznie drugi przycisk.
W programie mam taki kod:

 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            if (wylacz1 = true) //sprawdzenie którą wartość z kolei odbiera
            {
                raz = serialPort1.ReadLine(); //odczyt otwarte (docelowe rozwiązanie komunikacji z Arduino (nie działa))
                this.Invoke(new EventHandler(ZROBIONYCH_Click)); // wywoływanie metody wyświetlania otwartych
                wylacz1 = !wylacz1;
            }

            if (wylacz2 = true)
            {
                dwa = serialPort1.ReadLine(); //odczyt zamkniete (pierwotne rozwiązanie komunikacji z Arduino - działa)
                this.Invoke(new EventHandler(WTRAKCIE_Click)); // wywołanie metody wyświetlania zamkniętych
                wylacz2 = !wylacz2;
            }


        }

wartości z przycisku przypisane są do labeli, które w wyniku zmiany tekstu wyzwalają przycisk w c#, jednak po uruchomieniu programu raz przycisk nr 1 ląduje w jednym labelu a przy kolejnym urchomieniu czasami ląduje w drugim labelu. Chciałbym aby była 100% powtarzalność przypisania konkretnego przycisku do konkretnego elementu w C#.
Macie na to jakiś pomysł ?

2

if (wylacz1 = true) <--- tutaj nadpisujesz wartość w zmiennej wylacz1 wartością true, a nie sprawdzasz czy tam jest true

zamień na

if (wylacz1 == true) i może wtedy zacznie działać

0

N

1a2b3c4d5e napisał(a):

if (wylacz1 = true) <--- tutaj nadpisujesz wartość w zmiennej wylacz1 wartością true, a nie sprawdzasz czy tam jest true

zamień na

if (wylacz1 == true) i może wtedy zacznie działać

Niestety to rozwiązanie przerabiałem już wcześniej i nie przyniosło żadnej zmiany

1

Przede wszystkim pokaż, gdzie ustawiasz pole wylacz1 i wylacz2. Na 100% powinieneś w warunkach mieć dwa znaki =

0
public SerialPort Serport; 

        public bool trzy = true; 
        public static List<Stopwatch> sws = new List<Stopwatch>();
        public static Queue<int> k = new Queue<int>();
        private int ilosc_klikniec = 0; 
        private int ilosc_klikniecc = 0;
        private int klik = 0;
        private int klik2 = 0;
        public bool wylacz1;
        public bool wylacz2;
        private delegate void setLabelTextDelegate(string text);
        public readonly List<string> actualList = new List<string>();
        public TimeSpan czas;
        System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
        private Form6 Form6;
        private Form3 Form3;
        private Form4 Form4;
        private Form2 Form2; 
        private Form5 Form5;
        private Stream fileStream;
        int m;
        private Queue<Stopwatch> queue = new Queue<Stopwatch>();
        private Queue<TimeSpan> queue1 = new Queue<TimeSpan>();
        public event EventHandler Click;

0

Ogarnąłem, w Arduino dałem na sygnał wyjściowy cyfry od 1 do 4

a w C#

  private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {

            int liczba;
            liczba = int.Parse(serialPort1.ReadLine());
            
            if (liczba == 1) //sprawdzenie którą wartość z kolei odbiera
            {
                raz1();

            }
            
           else if (liczba == 2)
            {
                raz2();

            }

           else if (liczba == 3)
            {
                dwa1();

            }
            
            else if (liczba == 4)
            {
                dwa2();

            }    

        }

        public void raz1()
        {
            ZROBIONYCH.Invoke(new System.Action(delegate ()
            {
                ZROBIONYCH.Text = "raz";
            }));
        }
        public void raz2()
        {
            ZROBIONYCH.Invoke(new System.Action(delegate ()
            {
                ZROBIONYCH.Text = "dwa";
            }));
       
        }
        public void dwa1()
        {
            WTRAKCIE.Invoke(new System.Action(delegate ()
             {
                 WTRAKCIE.Text = "trzy2";
             }));
        
        }
        public void dwa2()
        {

            WTRAKCIE.Invoke(new System.Action(delegate ()
            {
                WTRAKCIE.Text = "cztery";
            }));
        }


1 użytkowników online, w tym zalogowanych: 0, gości: 1