Я новичок в доступе к Arduino с использованием C #.
Я использую плату Arduino Uno для последовательной связи, используя мой код C #. Но когда я открываю последовательный порт и жду некоторое время, чтобы подготовить последовательный порт, я получаю знаки вопроса (????) на последовательном порту. Я не знаю, почему это случилось.
Я использую «Threading.Sleep» после открытия порта. Если я удаляю его, то он работает нормально. Как я могу ждать после открытия порта? Я хочу подождать некоторое время после открытия последовательного порта для дальнейшего процесса.
Спасибо.
Код Arduino:
void setup()
{
Serial.begin(115200);
pinMode(13, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
String data = Serial.readString();
Serial.print(data);
if (data == "Ping")
{
Serial.write("OK");
}
if (data == "ON")
{
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);
}
}
}
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.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.IO.Ports;
namespace Form1.cs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
comboBox1.Items.Clear();
foreach (string port in SerialPort.GetPortNames())
{
comboBox1.Items.Add(port);
Console.WriteLine("Port Added.");
}
}
private void ConBtn_Click(object sender, EventArgs e)
{
serialPort1.PortName = comboBox1.SelectedItem.ToString();
if (serialPort1.IsOpen == false)
{
serialPort1.Open();
if (serialPort1.BytesToRead > 0)
{
Console.WriteLine("value in buffer");
string val = serialPort1.ReadExisting();
Console.WriteLine(val);
}
}
Thread.Sleep(1000);
Console.WriteLine("#####");
string bufferval3 = serialPort1.ReadExisting(); //Question Mark displaying between this.
Console.WriteLine(bufferval3);
Console.WriteLine("#####");
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
Console.WriteLine("Port Closed.");
}
}
private void DisConBtn_Click(object sender, EventArgs e)
{
serialPort1.Close();
Status.Text = "Disconnected";
Status.ForeColor = Color.DarkRed;
}
private void OnBtn_Click(object sender, EventArgs e)
{
serialPort1.Write("ON");
}
private void OffBtn_Click(object sender, EventArgs e)
{
serialPort1.Write("OFF");
}
}
}