【问题标题】:Arduinos IDE Serial Monitor works while XCode popen() does not.Arduino IDE 串行监视器工作,而 XCode fopen() 不工作。
【发布时间】:2013-10-04 13:13:10
【问题描述】:

我正在尝试通过 popen() 函数与我的 Arduino 通信。我在 XCode 中编写了一个简单的 Mac App:

    - (IBAction)ButtonPressed:(id)sender {

    popen("echo hello world > /dev/tty.usbmodem1411", "r");
}

这是 Arduino 代码:

int redPin = 8;
int greenPin = 9;
int bluePin = 10;

int inByte = 0;   // for incoming serial data

void setup()
{
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT); 
  Serial.begin(8000); 
}

void loop()
{

  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    Serial.print(inByte);
    setColor(inByte,inByte,inByte);
    delay(1000);
    setColor(0,0,0);
  }
}

void setColor(int red, int green, int blue)
{
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}

现在,当我尝试使用 Arduino 串行监视器并在那里写一些乱码时,我的 LED 灯亮起,我看到它正在工作。当我运行我的 XCode 程序时,按下按钮,没有任何反应。我确实设置了断点,并且确实检查了代码行是否被执行。我仔细检查了串口,一切都很好,但没有运气。还是不行。

【问题讨论】:

  • 你试过把if改成while吗?
  • 我试过了,没有帮助。还是一样 - 串口工作,而 popen() 不工作。
  • 你在命令行中试过echo hello world > /dev/tty.usbmodem1411吗?

标签: xcode macos arduino popen


【解决方案1】:

基本上我通过使用 IOKit/ioctl 解决了这个问题。我仍然不确定为什么 popen() 不起作用,可能是因为 Arduino IDE 正在使用该端口,因此它不可用,但是 IOKit 就像一个魅力。此外,它允许更多的控制和灵活性,您实际上可以在开始之前搜索端口并查看它们是否可用。如果有人遇到同样的问题,请检查http://playground.arduino.cc/Interfacing/Cocoa#IOKit。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多