Linux 我无法通过usb串行连接向我的Arduino发送数据

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

所以,我有一个arduino uno R3 SMD版本,我想在它运行时向它发送命令。它有一个连接到它的adafruit v2电机屏蔽,该屏蔽与arduino分开供电。arduino通过usb电缆连接到我的笔记本电脑

现在,马达护罩工作了,我可以给arduino发送代码让它做一些事情。我无法让arduino在串行连接运行时接收我发送给它的任何信息。我可以从arduino代码打印到arduino ide中的监视器。顺便说一句,我使用的是debian linux stretch。我的arduino ide来自debian repos

以下是我尝试使用的所有代码:

阿杜伊诺代码
#包括
#包括
#包括“公用事业/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;
}