Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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;)

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

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...