Podobno już zadałem podobne pytanie. Jest to prosty program w języku C++, który wysyła kąt do arduino przez port szeregowy, a arduino stosuje ten kąt do silnika Servo.Otwórz port szeregowy z arduino za pomocą C++ z Xcode na Macu
to C++ kod
#include <iostream>
#include <unistd.h>
#include <fstream>
using namespace std;
int main()
{
unsigned int angle;
fstream arduino;
cout<<"check-1";
arduino.open("/dev/tty.usbmodem3a21");
cout<<"check-2";
if(arduino)
{
do
{
cout<<"\n\ninsert a number between 0 and 179";
cin>>angle;
arduino<<angle;
}while(angle <= 179);
arduino.close();
}
else
{
cout<<"\n\nERROR!!\n\n";
}
}
a to Arduino na:
#include <Servo.h>
Servo servo;
const int pinServo = 2;
unsigned int angle;
void setup()
{
Serial.begin(9600);
servo.attach(pinServo);
servo.write(0);
}
void loop()
{
if(Serial.available()>0)
{
angle = Serial.read();
if(angle <= 179)
{
servo.write(angle);
}
}
}
problemem jest to, że zatrzymuje się na arduino.open(...)
, a ja nie wiem dlaczego, to nawet nie pisać "check-1" i jestem też pewien, że jest to port wybrany w aplikacji arduino w narzędziach> port szeregowy.
Warto również wiedzieć, że jeśli napiszę arduino.open("/dev/tty.usbmodem3a21",iOS::binary)
lub napiszę niewłaściwą nazwę portu szeregowego, wypisze on "check-1", "check-2" i "ERROR !!", więc błąd działa.
Dlaczego jesteś pewien, że zatrzymuje się na 'open' jeśli nie nawet wydrukować pierwsze czek? – frarugi87
To jest to samo pytanie, co http://stackoverflow.com/questions/11677639/twoj-way-c-communication-over-serial-connection - Musisz ustawić szybkość transmisji i wyłączyć sprzętową kontrolę przepływu. – TomKeddie