Я написал код для подключения через последовательный порт mi компьютер к arduino.Последовательный порт в C++, Unix
Это код 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);
}
}
}
И это с ++ s:
#include <iostream>
#include <unistd.h>
#include <fstream>
#include <termios.h>
using namespace std;
int main()
{
unsigned int angle;
ofstream arduino;
struct termios ttable;
cout<<"\n\ntest1\n\n";
arduino.open("/dev/tty.usbmodem3a21");
cout<<"\n\ntest2\n\n";
if(!arduino)
{
cout<<"\n\nERR: could not open port\n\n";
}
else
{
if(tcgetattr(arduino,&ttable)<0)
{
cout<<"\n\nERR: could not get terminal options\n\n";
}
else
{
ttable.c_cflag &= ~PARENB;
ttable.c_cflag &= ~CSTOPB;
ttable.c_cflag &= ~CSIZE;
ttable.c_cflag |= CS8;
ttable.c_cflag &= ~CRTSCTS;
ttable.c_cflag |= CREAD | CLOCAL;
ttable.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
ttable.c_oflag &= ~OPOST;
ttable.c_cc[VMIN] = 0;
ttable.c_cc[VTIME] = 0;
cfsetospeed(&ttable,9600);
if(tcsetattr(arduino,TCSANOW,&ttable)<0)
{
cout<<"\n\nERR: could not set new terminal options\n\n";
}
else
{
do
{
cout<<"\n\ninsert a number between 0 and 179";
cin>>angle;
arduino<<angle;
}while(angle<=179);
arduino.close();
}
}
}
}
Он должен быть подключен к Arduino, а затем задать мне число между 0 на 179 а отправить этот номер на Arduino которые включают это число как угол к сервомотору; Но он останавливается на arduino.open("/dev/tty.usbmodem3a21")
. Что я могу сделать?
Что вы имеете в виду _ «останавливается» _? Вы получаете исключение, или программа зависает? Можете ли вы подробно рассказать о фактическом поведении. –
Sorry.it усложняет, никаких ошибок нет предупреждений, затем выполняется терминалом, и я вижу результат «test1», а затем программа останавливается, после «test1» нет выхода, нет текста, ничего. И я также точно знаю, что это не вопрос времени. –
Когда вы говорите _ «оно останавливается» _ вы получаете подсказку оболочки назад? Также обратите внимание, что для окончаний строк следует использовать 'std :: endl' вместо' '\ n" '. Вы можете пропустить выходы, если они не покраснели (это то, что 'std :: endl' делает addtitionally vs output' '\ n" '). –