2014-12-16 4 views
3

Я делаю очень простую программу на C++, которая отправляет угол в arduino через последовательный порт, а затем arduino применяет этот угол к сервомотору. Я знаю, что Unix см последовательного порта устройства, как файл, на самом деле это C++ код:xcode, C++ последовательный порт с arduino

#include <iostream> 
#include <unistd.h> 

using namespace std; 

int main() 
{ 
    int angole; 
    FILE * arduino; 

    do 
    { 
     arduino = fopen("/dev/tty.usbmodem3a21","w"); 

     cout<<"\n\give me the angle\n\n"; 
     cin>>angole; 

     fprintf(arduino,"%d",angole); 
     sleep(1); 

    }while(angole>=0 && angole<=179); 

} 

и это Arduino-х:

#include <Servo.h> 

Servo servo; 
const int pinServo = 2; 
int angle; 

void setup() 
{ 
    Serial.begin(9600); 
    servo.attach(pinServo); 
    servo.write(0); 

} 

void loop() 
{ 
    if(Serial.available()>0) 
    { 
     angle = Serial.read(); 
     servo.write(angle); 
    } 
} 

я также проверил в Arduino приложение, в инструменты> последовательный порт> /div/tty.usbmodem3a21, что это был правильный порт.

Проблема в том, что программа останавливается на arduino = fopen ("/ dev/tty.usbmodem3a21", "w"); потому что он даже не пишет сообщение «дайте мне угол».

например, когда я пишу неправильный порт в открытой функции, он пишет сообщение.

ответ

2

Действительно, «все в Linux - это файл», но не буквально -> суть в том, какой тип файла - в вашем случае вы рассматриваете порт как обычный файл ванили (то есть что-то вроде txt-файла), а вы должны рассматривать его как устройства файл в, так что не fopen но:

fd = open("/dev/tty.usbmodem3a21", O_RDWR | O_NOCTTY | O_NDELAY); 

following является хорошим справочником о файле интерфейса последовательных портов И это one даже Arduino ориентированных

+0

Я до сих пор есть некоторые проблемы, смотреть комментарий ниже –

0

я загрузил код, теперь это Xcode (с ++) Код:

#include <iostream> 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include <unistd.h> 

using namespace std; 

int main() 
{ 
    string angle; 
    int arduino; 

    cout<<" i'm going to connect \n\n"; 

    do 
    { 
     cout<<"\n\n i'm in the loop \n\n"; 

     arduino = open("/dev/tty.usbmodem3a21", O_WRONLY); 

     cout<<"\n\n i'm going to check the connection\n\n"; 

     if(arduino == -1) 
     { 
      cout<<"\n\n error \n\n"; 
     } 
     else 
     { 
      do 
      { 
       cout<<"\n\n write a letter between a and c \n\n"; 
       cin>>angle; 

       write(arduino,&angle,1); 

      }while(angle=="a" || angle=="b" || angle=="c"); 
     } 
    }while(arduino == -1); 

    close(arduino); 


} 

и это Arduino из них:

#include <Servo.h> 

Servo servo; 
const int pinServo = 2; 
char angle; 

void setup() 
{ 
    Serial.begin(9600); 
    servo.attach(pinServo); 
    servo.write(0); 

} 

void loop() 
{ 
    if(Serial.available()>0) 
    { 
     angle = Serial.read(); 

     if(&angle=="a") 
     { 
      servo.write(20); 
     } 
     else if(&angle == "b") 
     { 
      servo.write(90); 
     } 
     else if(&angle == "c") 
     { 
      servo.write(180); 
     } 
     else 
     { 
      servo.write(0); 
     } 
    } 
} 

И я до сих пор с той же проблемой, пишет «я собираюсь подключиться "и" я в цикле ", а затем ничего, поэтому он останавливается на open функции, и я думаю, что код может также иметь еще несколько проблем.

Имеет ли код C++, чтобы получить некоторые виды обратной связи от arduino и что это должно быть?

Я также уверен, что это не вопрос времени, чтобы связаться, я бросил его работать в течение очень долгого времени.

0

я получил связь с этим кодом:

arduino = open("/dev/tty.usbmodemfa131", O_RDWR | O_NOCTTY | O_NDELAY); 
Смежные вопросы