[英]C# communication with arduino (arduino keeps sending data)
我正在 C# 中開展一個項目。 該程序是 arduino 的控制程序。 我已經編寫了一些代碼來寫入 arduino 的序列號,並已對 arduino 進行了編程,以在這種情況下以標准消息(如果您願意,可以確認)響應“5”。 在向 arduino 發送信息后,arduino 以“5”響應,但繼續發送“5”。
知道為什么會這樣嗎?
端口配置:
private void Ports_SelectedIndexChanged(object sender, EventArgs e)
{
_serialPort.PortName = ArrayComPortsNames[Ports.SelectedIndex];//Set your board COM
_serialPort.BaudRate = (int)Baudrate.Items[Baudrate.SelectedIndex];
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
if (!_serialPort.IsOpen)
_serialPort.Open();
_serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_serialPort);
}
private void sp_serialPort(object sender, SerialDataReceivedEventArgs e)
{
//Write the serial port data to the console.
Console.Write(_serialPort.ReadLine());
}
C# 代碼:
private void buttonKeyboard_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyData)
{
case Keys.Z:
PortWrite("z");
break;
case Keys.Q:
PortWrite("q");
break;
case Keys.S:
PortWrite("s");
break;
case Keys.D:
PortWrite("d");
break;
}
}
private void PortWrite(string message)
{
_serialPort.WriteLine(message);
}
arduino 代碼:
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available()){
//Serial.println(Serial.read());
Serial.println("5");
}
delay(100);
}
關鍵在arduino代碼中
在if子句中添加了Serial.read()命令,並解決了該問題:
void loop() {
if(Serial.available()){
Serial.read(); //clear serial buffer
Serial.println("5");
}
您正在無限循環中將值 5 發送到串行端口,這是 void loop() 放置一個指定何時發送值的條件
bool f=true;
void loop() {
if(Serial.available()>0)
{
while(f)
{
Serial.println(5);
f=false;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.