Я использую Ubuntu 16
(хотя у меня такая же проблема в Debian) Arduino Mega 2560
, 2 версии Arduino IDE
: 2:1.0.5+dfsg2-4.1
и 1.8.9
.
Я работаю над соединение программы C
с Arduino через COM-порт.
Например, у меня есть следующий код; программа P C отправляет некоторый текст в Arduino, а Arduino получает и печатает его.
p c. c:
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
int openPort(char port_name[], speed_t speed)
{
int F_ID = open(port_name, O_RDWR | O_NOCTTY);
fcntl(F_ID, F_SETFL, 0);
//printf("%s\n", port_name);
if(F_ID == -1)
{
return -1;
}
struct termios options;
tcgetattr(F_ID, &options);
cfsetispeed(&options, speed);
cfsetospeed(&options, speed);
options.c_cc[VTIME] = 20;
options.c_cc[VMIN] = 0;
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag = 0;
options.c_oflag &= ~OPOST;
tcsetattr(F_ID, TCSANOW, &options);
return F_ID;
}
void closePort(int id)
{
close(id);
return;
}
int sendData(int id, unsigned char* buf, int len)
{
int n = write(id, buf, len);
if(n == -1)
{
char *errmsg = strerror(errno);
printf("%s\n",errmsg);
}
return n;
}
int main(int argc, char * argv[])
{
int port=openPort("/dev/ttyUSB0", B9600);
if ( (port) == -1){
//char *errmsg = strerror(errno);
printf("Cannot open port: %s\n",strerror(errno));
return -1;
}
sendData(port, "Hello, Arduino!*", 16);
closePort(port);
return 0;
}
ard.ino:
int stage = 0;
String recv;
char* line;
char* get_line(void)
{ // '*' is a terminal character
if (Serial.available() > 0)
{
char c = Serial.read();
if (c=='*')
{
char* res = (char*)malloc((recv.length()+1)*sizeof(char));
recv.toCharArray(res, recv.length()+1);
stage=1;
recv="";
return res;
}
else { recv += c; }
} // if (Serial.available() > 0)
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (stage==0)
{
line = get_line();
}
else
{
Serial.print("Got line: ");
Serial.println(line);
stage = 0;
}
}
Чтобы проверить, нормально ли работает моя программа, я использую Port Monitor в IDE.
У меня следующая проблема:
Я предпочитаю использовать Arduino IDE 1.8.9
, но когда я открываю Port Monitor и запускаю свою программу P C - ничего не работает, P C -prog не может получить доступ к порту и отправить информацию (она говорит Bad file descriptor
);
, в то время как с Arduino 2:1.0.5+dfsg2-4.1
все работает нормально, и я вижу на Port Monitor:
Got line: Hello, Arduino!
Поэтому я спрашиваю, что я должен делать с параметрами Arduino IDE 1.8.9
или с /dev/ttyUSB*
, чтобы он нормально работал с каждым другой