Исправление связи между Arduino и C++ Mac OS X

У меня возникли проблемы при обмене данными с C++ на Arduino с помощью Serial. Я использовал метод, обсуждаемый Салилом Капуром здесь: ://salilkapur.wordpress.com/2013/03/08/communicating-with-arduino-using-c/. Я адаптировал его стратегию записи непосредственно в файл Arduino с помощью С++. Для моей конкретной задачи мне нужно отправить строку символов (которые являются командами для обработки Arduino) в Arduino. Я уже прочитал символы из файла в программе C++, но по какой-то причине я ничего не получаю от своего последовательного монитора Arduino, когда отправляю его. Я думаю, что проблема может быть в скорости передачи данных, но я не уверен. Я дам вам свой код для конкретной помощи. Если кто-то может посоветовать мне, как заставить С++ записывать символы на последовательный монитор для чтения:

C++:
#include
#include //For sleep()
#include //For FILE
#include //For ifstream
#include //For assert()
#include //For string
using namespace std;

int main()
{
   //Setting up the output to the Arduino
   FILE *arduino;
   arduino = fopen(“/dev/tty.usbmodem1411″,”w”);  //Declare the file in write mode
   if (arduino == NULL) perror (“Error opening file”);

   //Setting up the file input stream
   ifstream inFile (“input.txt”);
   assert(inFile.is_open());

   char input = '\0'; //Starts out as NULL

   while (input!= EOF) {
      fprintf(arduino,”%c “, input); //Writing to the file
      inFile >> input; //Getting the file input to make sure it isn’t the EOF
      sleep(1);
   }
   fclose(arduino);
}

Код Ардуино:

void setup()
{
   Serial.begin(9600);
}

void loop()
{
   char input;
   if(Serial.available()) //If anything is in the Serial 
   {
      input=Serial.read();

      Serial.println(input); //Print out any input
   }
}

Пример ввода из input.txt:

w a d s w d a a s d w

Эта строка символов будет указывать направление (вверх, вниз, влево, вправо) в соответствии с WASD.


person Zach Breit    schedule 22.06.2015    source источник
comment
Вы пытались использовать последовательную консоль (например, PuTTY) для связи с Arduino?   -  person T.D. Smith    schedule 22.06.2015
comment
Мой вопрос был решен с помощью библиотеки boost asio. Это позволило мне прочитать текст из файла .txt, а затем отправить его по последовательному порту на Arduino.   -  person Zach Breit    schedule 03.07.2015


Ответы (1)


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

Взгляните на этот пост на todbot.com: Arduino-serial: код C для связи с Arduino

Сообщение todbot.com описывает программу общего назначения для общения с Arduino через его последовательное соединение. В исходном коде много кода для получения настроек из командной строки, и он немного пугает, потому что он надежен, но бизнес-конец последовательной связи довольно прост, если вы хотите увидеть, как он это делает.

Я написал свою собственную серию постов на эту тему с небольшим кодом (в частях 3 и 4), который демонстрирует, как делать почти то же самое, что вы пытаетесь сделать.

Как читать последовательные данные с Arduino в Linux с помощью C: часть 1

Я надеюсь, что что-то в этих ссылках поможет! Последовательная связь сложна, поэтому не корите себя слишком сильно, если что-то пойдет не так.

person Chris Heydrick    schedule 02.07.2015