通过 windows 命令行将数据传递给 arduino
Passing data to arduino through windows command line
我正在尝试将数据发送到我的 arduino 并让 运行 陷入同样的问题。 arduino上的代码如下:
void setup()
{
Serial.begin(9600);
for (int i = 3; i <= 13; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop()
{
if (Serial.available())
{
char ch = Serial.read();
int it = ch - '0';
digitalWrite(it, HIGH);
delay(1000);
digitalWrite(it, LOW);
}
}
这基本上是这样的,当您通过串行监视器向设备发送一个字符时,它会点亮连接到指定引脚的灯一秒钟。
在内置的串行监视器中,这工作正常,您向设备发送数字 1-9(还没有弄清楚如何做 10+)并且指定的灯亮起,正如预期的那样。但是,我的目标是编写一个 c++ 程序,使用来自 windows.h
的 system()
命令将数据发送到设备。在我这样做之前,我需要命令将数据发送到设备。我发现:
echo i > COM1 //with i being the number to be sent over
好吧,我试过了,得到了一个相当有趣的结果,有一半时间我会在命令行中收到这条消息:
C:/users/XXXXX> echo 7 > COM3 //im 100% sure im using com3
Access is denied
另一半时间我会看到数据通过(RX 灯会亮起)但什么也没有发生,连接到引脚 7 的灯不会亮起。我立即想到您可能需要以 ASCII 格式传递数据,但是没有,
echo 55 > COM3
产生了相同的结果。如果有人知道如何通过 window 命令行向 arduio 发送数据,我将不胜感激,谢谢。
Welp 在这里没有回应,经过 7 个小时的研究,我终于找到了解决我的问题的方法 here。基本上来自命令行 do
powershell //to enter powershell
$port= new-Object System.IO.Ports.SerialPort COM#,Baudrate,None,8,one
//to create a new port object
$port.open() //to open a connection
$port.WriteLine(data)
$port.close()
看起来关键是你不能只将原始数据发送到 arduino,你需要先打开一个与 arduino 的连接,然后它才会真正将数据识别为有效的串行输入。
更新:
如果你想从命令行 运行 它,你需要做的就是编写一个 powershell 脚本,如下所示:
$com = $args[0]
$baud = $args[1]
$write = $args[2]
$port = $port= new-Object System.IO.Ports.SerialPort $com,$baud,None,8,one
$port.open()
$port.write($write)
$port.close()
然后可以从命令行调用它并像这样传递参数:
powershell.exe -ExecutionPolicy Bypass -file filelocation/test.ps1 COM3 2400 7
我遇到了类似的问题。
首先,"Access is denied"错误是由串行监视器占用端口引起的。
其次,简单地"echoing"一个字符串将无法正常工作,因为你还发送沿线终止。
诀窍是发送这样的东西:
set /p x="A" <nul >\.\COM4
我正在尝试将数据发送到我的 arduino 并让 运行 陷入同样的问题。 arduino上的代码如下:
void setup()
{
Serial.begin(9600);
for (int i = 3; i <= 13; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
}
void loop()
{
if (Serial.available())
{
char ch = Serial.read();
int it = ch - '0';
digitalWrite(it, HIGH);
delay(1000);
digitalWrite(it, LOW);
}
}
这基本上是这样的,当您通过串行监视器向设备发送一个字符时,它会点亮连接到指定引脚的灯一秒钟。
在内置的串行监视器中,这工作正常,您向设备发送数字 1-9(还没有弄清楚如何做 10+)并且指定的灯亮起,正如预期的那样。但是,我的目标是编写一个 c++ 程序,使用来自 windows.h
的 system()
命令将数据发送到设备。在我这样做之前,我需要命令将数据发送到设备。我发现:
echo i > COM1 //with i being the number to be sent over
好吧,我试过了,得到了一个相当有趣的结果,有一半时间我会在命令行中收到这条消息:
C:/users/XXXXX> echo 7 > COM3 //im 100% sure im using com3
Access is denied
另一半时间我会看到数据通过(RX 灯会亮起)但什么也没有发生,连接到引脚 7 的灯不会亮起。我立即想到您可能需要以 ASCII 格式传递数据,但是没有,
echo 55 > COM3
产生了相同的结果。如果有人知道如何通过 window 命令行向 arduio 发送数据,我将不胜感激,谢谢。
Welp 在这里没有回应,经过 7 个小时的研究,我终于找到了解决我的问题的方法 here。基本上来自命令行 do
powershell //to enter powershell
$port= new-Object System.IO.Ports.SerialPort COM#,Baudrate,None,8,one
//to create a new port object
$port.open() //to open a connection
$port.WriteLine(data)
$port.close()
看起来关键是你不能只将原始数据发送到 arduino,你需要先打开一个与 arduino 的连接,然后它才会真正将数据识别为有效的串行输入。
更新: 如果你想从命令行 运行 它,你需要做的就是编写一个 powershell 脚本,如下所示:
$com = $args[0]
$baud = $args[1]
$write = $args[2]
$port = $port= new-Object System.IO.Ports.SerialPort $com,$baud,None,8,one
$port.open()
$port.write($write)
$port.close()
然后可以从命令行调用它并像这样传递参数:
powershell.exe -ExecutionPolicy Bypass -file filelocation/test.ps1 COM3 2400 7
我遇到了类似的问题。
首先,"Access is denied"错误是由串行监视器占用端口引起的。
其次,简单地"echoing"一个字符串将无法正常工作,因为你还发送沿线终止。 诀窍是发送这样的东西:
set /p x="A" <nul >\.\COM4