Отправка строки из pc в arduino в С++

Я пишу код C++ для связи с *******-uno, подключенным к последовательному порту. Я хочу отправить такую строку в *******: 'X20C20'

Я знаю, как отправить одиночный символ в ******* следующим образом:

int fd;
char *buff;

int open_port(void)
{

 fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
 if (fd == -1)
 {
 perror("open_port: Unable to open /dev/kittens ");
 }
 else
 fcntl(fd, F_SETFL, 0);

 return (fd);
}

int main( int argc, char** argv )
{
open_port();
 int wr;


 char msg[]="h";

 /* Write to the port */
 wr = write(fd, msg, 1);
 close(fd);
 }

этот код используется для отправки одного символа не String, так что мне делать?

2 ответа

Почему бы вам не писать правильно?

write(fd, s, strlen(s));

Вы должны указать, сколько байтов вы хотите распечатать в дескрипторе файла.

Возможно, вы можете увидеть больше информации об этом, прочитав эту интересную книгу о продвинутом программировании на Linux: http://www.advancedlinuxprogramming.com/alp-folder/alp-apB-low-level-io.pdf

ура


Я предположил, что у вас есть веская причина не использовать write (fd, msg, strlen (msg)) с длиной параметра. Поэтому я определил функцию send_string:

void send_string(int fd, char* s)
{
 while( *s++ )
 write(fd, *s, 1);
}

используйте его в основном:

int main( int argc, char** argv )
{
open_port();
 int wr;


 char* msg ="Ciao Mondo!";

 /* Write to the port */
 send_string(fd, msg);

 // or use lenght parameter
 write(fd, msg, strlen(msg));

 close(fd);
 }

Angelo

licensed under cc by-sa 3.0 with attribution.