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

时间:2017-04-12 04:01:51

标签: linux arduino arduino-uno serial-communication usbserial

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

现在,电机屏蔽工作,我可以将代码发送到arduino以使其做事。我无法让arduino收到我从串口连接运行时发送给它的任何东西。我可以用arduino代码打印到arduino ide中的显示器。我正在使用debian linux stretch btw。我的arduino ide来自debian回购。

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

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;
}

我很确定这不是权限问题,我从root运行控制器代码,tty设备打开正常。另外,我已经尝试了9600和115200的波特率,但没有骰子。有没有人有想法?从谷歌搜索看来,这似乎是其他人都在做的事情。

1 个答案:

答案 0 :(得分:1)

您的控制器正在发送字符 '1''2'。您的Arduino正在检查字符代码 12 - 换句话说,字符 Ctrl A 和< KBD>控制 。您可以在任何一端进行更改,只需匹配即可。