2016-06-14 60 views
1

我试图将数据发送到我的arduino并继续遇到同样的问题。在Arduino的代码如下:通过Windows命令行将数据传递给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发送数据,我真的很感激它,谢谢。

回答

1

在这里没有回应,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 
相关问题