C++ c+中的串行端口+,Unix
我写了一个代码,通过串口将mi计算机连接到arduino 这是arduino的代码: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
#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);