Memperbaiki Komunikasi antara Arduino dan C++ Mac OS X

Saya mengalami kesulitan berkomunikasi dari C++ ke Arduino menggunakan Serial. Saya telah menggunakan metode yang dibahas oleh Salil Kapur di sini: https://salilkapur.wordpress.com/2013/03/08/communicating-with-arduino-using-c/. Saya telah mengadaptasi strategi penulisannya langsung ke file Arduino menggunakan c++. Untuk tugas khusus saya, saya perlu mengirim serangkaian char (yang merupakan perintah untuk diproses oleh Arduino) ke Arduino. Saya sudah membaca karakter dari file di program C++, tetapi karena alasan tertentu, saya tidak mendapatkan apa pun dari monitor Serial Arduino saya ketika saya mengirimkannya. Saya pikir baud rate mungkin menjadi masalahnya, tapi saya tidak yakin. Saya akan memberi Anda kode saya untuk bantuan khusus. Jika seseorang dapat memberi tahu saya cara membuat C++ menulis karakter ke monitor Serial untuk dibaca:

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);
}

Kode 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
   }
}

Contoh masukan dari input.txt:

w a d s w d a a s d w

Rangkaian karakter tersebut akan memberikan arah (atas, bawah, kiri, kanan) sesuai WASD.


person Zach Breit    schedule 22.06.2015    source sumber
comment
Sudahkah Anda mencoba menggunakan konsol serial (mis. PuTTY) untuk berbicara dengan Arduino?   -  person T.D. Smith    schedule 22.06.2015
comment
Pertanyaan saya diselesaikan dengan menggunakan perpustakaan boost asio. Itu memungkinkan saya membaca teks dari file .txt dan kemudian mengirimkannya melalui serial ke Arduino.   -  person Zach Breit    schedule 03.07.2015


Jawaban (1)


Dimungkinkan untuk menggunakan pegangan file untuk menulis data ke perangkat serial, tetapi mungkin berguna untuk mencoba terlebih dahulu menggunakan API komunikasi serial Unix asli sebagai pemeriksaan kewarasan.

Lihatlah posting ini di todbot.com: Arduino-serial: Kode C untuk berbicara dengan Arduino

Posting todbot.com menjelaskan program tujuan umum untuk berbicara dengan Arduino melalui koneksi serialnya. Sumbernya memiliki banyak kode untuk mendapatkan pengaturan dari baris perintah, dan agak mengintimidasi karena kuat, namun tujuan bisnis dari komunikasi serial cukup mudah jika Anda ingin melihat bagaimana dia melakukannya.

Saya menulis rangkaian postingan saya sendiri tentang topik tersebut, dengan beberapa kode ringan (di bagian 3 dan 4) yang menunjukkan cara melakukan hampir persis seperti yang Anda coba lakukan.

Cara membaca data serial dari Arduino di Linux dengan C: Part 1

Saya harap sesuatu di tautan itu membantu! Komunikasi serial itu sulit, jadi jangan terlalu menyalahkan diri sendiri jika tidak berjalan sesuai keinginan Anda.

person Chris Heydrick    schedule 02.07.2015