Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的串行端口+,Unix_C++_Unix_Serial Port_Arduino_Termios - Fatal编程技术网

C++ c+中的串行端口+,Unix

C++ c+中的串行端口+,Unix,c++,unix,serial-port,arduino,termios,C++,Unix,Serial Port,Arduino,Termios,我写了一个代码,通过串口将mi计算机连接到arduino 这是arduino的代码: #include <Servo.h> Servo servo; const int pinServo = 2; unsigned int angle; void setup() { Serial.begin(9600); servo.attach(pinServo); servo.write(0); } void loop() { if(Serial.ava

我写了一个代码,通过串口将mi计算机连接到arduino

这是arduino的代码:

#include <Servo.h>

Servo servo;
const int pinServo = 2;
unsigned int angle;

void setup()
{
    Serial.begin(9600);
    servo.attach(pinServo);

    servo.write(0);

}

void loop()
{
    if(Serial.available()>0)
    {  
       angle = Serial.read();

       if(angle <= 179)
       {
         servo.write(angle);
       }
    }
}
#包括
伺服;
常数int pinServo=2;
无符号整数角;
无效设置()
{
Serial.begin(9600);
伺服。附加(销伺服);
伺服写入(0);
}
void循环()
{
如果(Serial.available()>0)
{  
角度=串行。读取();

如果(angle我认为您的问题出现在这些代码行中

if(tcgetattr(arduino,&ttable)<0) {
    // ...
}
else {
    // ...

    if(tcsetattr(arduino,TCSANOW,&ttable)<0) {
        // ...
    }
}
如果一切正常,您将有效地将
1
传递到
tcgetattr()
tcsetattr()
,这是标准的输入文件描述符


解决方案不是为
arduino
使用流的
,而是使用普通的文件描述符

int arduino = open("/dev/tty.usbmodem3a21",O_WRONLY);

“它停止”是什么意思?是出现异常还是程序挂起?请详细说明实际行为。对不起,它是复杂的,没有错误,没有警告,然后通过终端执行,我看到输出“test1”,然后程序在“test1”之后停止没有输出,没有文本,什么都没有。我也确信这不是时间问题。当你说“它停止”时,你会得到shell提示吗?还要注意,你应该使用
std::endl
而不是
“\n”
作为行结尾。你可能会错过输出,除非它们被刷新(这就是
std::endl
相对于输出
“\n”
)所做的。不,我认为“它冻结”是一个更好的主意,终端保持打开,程序继续运行,但没有什么比输出更令人信服的是
tcgetattr(arduino,&ttable)
导致问题。请记住,流的
自动转换为
bool
,从而转换为
int
。假设
open
很好,您将
1
作为
fd
参数有效地传递,并更改stdin fd的属性。使用原始c样式
open()
为您的arduino设备获取fd。好的,谢谢,但另一件事,仅输出到arduinos的标志设置是否正确?@DaddaBarba我对arduino了解不多。您需要了解波特率、奇偶校验等。我也不太确定,什么是
angle=Serial.read()
将期望从串行端口获得。对于我来说,看起来像是传输文本数据(正如您尝试使用
arduinoOk一样,再次感谢您。对于serial.read()arduino应该只在te串行端口文件中获取te值并将其放入angle中,但我也认为会有问题,因为angle是int,但我也可以使用字符串到int的转换器,所以arduino的代码不太重要,它以简单的方式进行串行连接
arduino.open("/dev/tty.usbmodem3a21");
int arduino = open("/dev/tty.usbmodem3a21",O_WRONLY);