Skocz do zawartości

Visual studio c# + serialport i błędne wysyłanie znaków


sparow

Pomocna odpowiedź

Witam.

Borykam się z ogromnym problemem. Próbuję stworzyć aplikację , która będę sterował platformą. Na razie niech apka steruje zapalaniem i gaszeniem diody. Na szybko stworzyłem program na uC w Bascomie i przez terminal wszystko ładnie działa bez żadnych zawieszek. Kłopoty zaczynają się gdy zaczynam pisać w visualu. Przy pierwszym wysłaniu pojedynczego znaku zapali sie lub zgasnie dioda jednak potem lecą już śmieci , które potem uc odsyła. Gdzie popełniłem błąd? Pomożcie

kod w Bascomie

 
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600



Config Portb.0 = Output
Config Serialin = Buffered , Size = 254 , Bytematch = All

Enable Serial
Enable Interrupts
Dim U As Byte
Dim I As Integer




Do

Input , U




If U = 1 Then
Set Portb.0
Print "dioda swieci";
Print
End If



If U = 2 Then
Reset Portb.0
Print "dioda zgasla";
Print
End If


Loop

End

Serial0bytereceived:

Return

oraz kod z visuala w c#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sterowanie2
{
   public partial class Form1 : Form
   {
       string RxString;
       public Form1()
       {
           InitializeComponent();
           //readThread = new Thread(Read);

       }


       private void button2_Click(object sender, EventArgs e)
       {
           this.serialPort1.NewLine = "\r\n";
           this.textBox1.Clear();
           this.serialPort1.Open();


           //this.button2.Enabled = false;
           //this.button3.Enabled = true;
           //readThread.Start();
       }

       private void button3_Click(object sender, EventArgs e)
       {
           //this.readThread.Join();
           this.serialPort1.Close();

           //this.button2.Enabled = true;
           //this.button3.Enabled = false;
       }

       private void button4_Click(object sender, EventArgs e)
       {
           if (this.serialPort1.IsOpen)
           {
               //char[] test = { '2', '\r', '\n' };
               //this.serialPort1.Write(test, 0, 3);
               this.serialPort1.WriteLine("2");
               this.serialPort1. inputLen = 0

           }

       }

       private void button1_Click(object sender, EventArgs e)
       {
           if (this.serialPort1.IsOpen)
           {
               this.serialPort1.WriteLine("1");

           }
       }

       private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
       {
           //System.IO.Ports.SerialPort sp = (System.IO.Ports.SerialPort)sender;
           RxString = this.serialPort1.ReadExisting();
           this.Invoke(new EventHandler(DisplayText));
       }
       private void DisplayText(object sender, EventArgs e)
       {
           this.textBox1.AppendText(RxString);
       }

       private void serialPort1_ErrorReceived(object sender, System.IO.Ports.SerialErrorReceivedEventArgs e)
       {
           RxString = "Error\n";
           this.Invoke(new EventHandler(DisplayText));
       }

   }
}

Pozdrawiam i liczę na wszelką pomoc;)

Link do komentarza
Share on other sites

To tak z rozpędu. Potrzebuję pomocy odnośnie visuala, ponieważ błędnie wysyła mi następny wysłany znak. Tak jakby się zapętlał i same potem śmieci podczas wysyłki lecą. Zamiast pojedynczego znaku wysyła je podwójnie. Dlaczego?

Ok. Zamykam temat bo już sam rozwiązałem problem. Pozdro

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.