通过Windows命令行

时间:2016-06-14 22:23:24

标签: arduino serial-port

我试图将数据发送到我的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 ++程序,使用system()中的windows.h命令将数据发送到设备。在我能做到这一点之前,我需要命令将数据发送到设备。我找到了:

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

产生了相同的结果。如果有人知道如何通过窗口命令行将数据发送到arduio我会非常感激,谢谢。

2 个答案:

答案 0 :(得分:1)

Welp在这里没有回应,再花了7个小时的研究,我终于找到了我的问题的解决方案here。基本上来自命令行吗

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

答案 1 :(得分:0)

我遇到了类似的问题。

首先,“访问被拒绝”错误是由持有端口的串行监视器引起的。

其次,简单地“回显”字符串将无法正常工作,因为您还沿着行终止发送。 诀窍是发送这样的东西:

set /p x="A" <nul >\\.\COM4

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