通过 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.hsystem() 命令将数据发送到设备。在我这样做之前,我需要命令将数据发送到设备。我发现:

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

来源: https://batchloaf.wordpress.com/2013/02/12/simple-trick-for-sending-characters-to-a-serial-port-in-windows/