Linux 我无法通过usb串行连接向我的Arduino发送数据
所以,我有一个arduino uno R3 SMD版本,我想在它运行时向它发送命令。它有一个连接到它的adafruit v2电机屏蔽,该屏蔽与arduino分开供电。arduino通过usb电缆连接到我的笔记本电脑 现在,马达护罩工作了,我可以给arduino发送代码让它做一些事情。我无法让arduino在串行连接运行时接收我发送给它的任何信息。我可以从arduino代码打印到arduino ide中的监视器。顺便说一句,我使用的是debian linux stretch。我的arduino ide来自debian repos 以下是我尝试使用的所有代码: 阿杜伊诺代码Linux 我无法通过usb串行连接向我的Arduino发送数据,linux,arduino,arduino-uno,serial-communication,usbserial,Linux,Arduino,Arduino Uno,Serial Communication,Usbserial,所以,我有一个arduino uno R3 SMD版本,我想在它运行时向它发送命令。它有一个连接到它的adafruit v2电机屏蔽,该屏蔽与arduino分开供电。arduino通过usb电缆连接到我的笔记本电脑 现在,马达护罩工作了,我可以给arduino发送代码让它做一些事情。我无法让arduino在串行连接运行时接收我发送给它的任何信息。我可以从arduino代码打印到arduino ide中的监视器。顺便说一句,我使用的是debian linux stretch。我的arduino i
#包括
#包括
#包括“公用事业/Adafruit_MS_PWMServoDriver.h”
Adafruit_MotorShield AFMS=Adafruit_MotorShield();
Adafruit_步进电机*myMotor=AFMS.getStepper(200,2);
无效设置()
{
序列号开始(115200);
AFMS.begin();
myMotor->设定速度(300);
}
字符输入;
int dir;
void循环()
{
dir=0;
如果(Serial.available()>0){
输入=Serial.read();
串行打印(输入);
如果(输入=1){
dir=前进;
}
如果(输入=2){
dir=向后;
}
}
if(dir!=0){
myMotor->步进(360,方向,双);
延迟(1000);
}
}
笔记本电脑上的控制器代码
#包括
#包括
int
主(内部argc,字符**argv)
{
文件*arduino;
INTC;
arduino=fopen(“/dev/ttyACM0”,“w”);
如果(arduino==NULL){
fprintf(stdout,“nooooooo\n”);
}
而(1){
c=fgetc(标准偏差);
如果(c='f'){
fprintf(arduino,“%d”,1);
}
如果(c=='b'){
fprintf(arduino,“%d”,2);
}
阿杜伊诺;
如果(c=='q'){
打破
}
}
返回0;
}
我很确定这不是权限问题,我已经从root运行了控制器代码,tty设备可以正常打开。此外,我尝试了9600和115200两种波特率,但没有骰子。有人有主意吗?从谷歌上看,这似乎是所有其他人都在做的事情。你的控制器正在发送字符
'1'
和'2'
。您的Arduino正在检查字符代码1
和2
——换句话说,字符CtrlA和CtrlB。您可以在任意一端进行更改,它们只需匹配。在/dev/ttyACM0上设置的波特率是多少?如何检查或设置该端口的波特率?有管理这类东西的命令吗?或者,C或C++函数是我可以用它做的吗?不确定,C++不是我常用的语言。我只知道你在Arduino上设置波特率,而没有检查它是否与虚拟串行设备匹配,这可能会导致问题。我甚至没有想到它是一个字符。谢谢,我试试看。它奏效了!谢谢你的帮助,我应该意识到一些显而易见的事情。
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);
void setup()
{
Serial.begin(115200);
AFMS.begin();
myMotor->setSpeed(300);
}
char input;
int dir;
void loop()
{
dir = 0;
if (Serial.available() > 0) {
input = Serial.read();
Serial.print(input);
if (input == 1) {
dir = FORWARD;
}
if (input == 2) {
dir = BACKWARD;
}
}
if (dir != 0) {
myMotor->step(360, dir, DOUBLE);
delay(1000);
}
}
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char **argv)
{
FILE *arduino;
int c;
arduino = fopen("/dev/ttyACM0", "w");
if (arduino == NULL) {
fprintf(stdout, "NOOOOOOOOOOOO\n");
}
while (1) {
c = fgetc(stdin);
if (c == 'f') {
fprintf(arduino, "%d", 1);
}
if (c == 'b') {
fprintf(arduino, "%d", 2);
}
fflush(arduino);
if (c == 'q') {
break;
}
}
return 0;
}