我试图将数据发送到我的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我会非常感激,谢谢。
答案 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