gpt4 book ai didi

c# - 如何从 PC 接收数据到 Arduino?

转载 作者:太空狗 更新时间:2023-10-29 17:56:33 25 4
gpt4 key购买 nike

我开发了一个通过串行端口为 Arduino 发送数据的应用程序,但我不明白如何在 Arduino 上接收它。我通过串口为 Arduino 发送一个字符串,Arduino 接收到它,但它在我的代码中不起作用(在 Arduino 上,我一次接收一个字节)。

更新:它正在运行 ;)

发送数据的C#代码:

using System;
using System.Windows.Forms;

using System.Threading;
using System.IO;
using System.IO.Ports;

pulic class senddata() {

private void Form1_Load(object sender, System.EventArgs e)
{
//Define a serial port.
serialPort1.PortName = textBox2.Text;
serialPort1.BaudRate = 9600;
serialPort1.Open();
}

private void button1_Click(object sender, System.EventArgs e)
{
serialPort1.Write("10"); //This is a string. The 1 is a command. 0 is interpeter.
}
}

Arduino 代码:

我有更新代码

#include <Servo.h>

Servo servo;
String incomingString;
int pos;

void setup()
{
servo.attach(9);
Serial.begin(9600);
incomingString = "";
}

void loop()
{
if(Serial.available())
{
// Read a byte from the serial buffer.
char incomingByte = (char)Serial.read();
incomingString += incomingByte;

// Checks for null termination of the string.
if (incomingByte == '0') { //When 0 execute the code, the last byte is 0.
if (incomingString == "10") { //The string is 1 and the last byte 0... because incomingString += incomingByte.
servo.write(90);
}
incomingString = "";
}
}
}

最佳答案

一些让我皱眉的事情:

serialPort1.Write("1");

这将写入 正好 一个字节,即 1,但没有换行符,也没有尾随的 NUL 字节。但是在这里你正在等待一个额外的 NUL 字节:

if (incomingByte == '\0') {

你应该使用WriteLine而不是Write,等待\n而不是\0

这有两个副作用:

首先:如果配置了一些缓冲,那么有一定的机会,一条新线会将缓冲数据推送到 Arduino。要想确定,您必须仔细阅读 MSDN 上的文档。

第二:这使您的协议(protocol)仅支持 ASCII。这对于更容易调试很重要。然后,您可以使用普通的终端程序,如 Hyperterm 或 HTerm(编辑),甚至是 Arduino IDE 本身的串行监视器(编辑)来调试您的 Arduino 代码,而不必担心 C# 代码中的错误。当 Arduino 代码运行时,您可以专注于 C# 部分。分而治之。

编辑:在挖掘出我自己的 Arduino 后我注意到的另一件事:

incomingString += incomingByte;
....
if (incomingByte == '\n') { // modified this
if(incomingString == "1"){

这当然不会按预期工作,因为此时字符串将包含“1\n”。您要么与“1\n”进行比较,要么将 += 行移动到 if 之后。

关于c# - 如何从 PC 接收数据到 Arduino?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com