【问题标题】:ORSSerialPort with ArduinoORSSerialPort 与 Arduino
【发布时间】:2020-12-16 18:30:45
【问题描述】:

我一直在尝试编写一个 Xcode 接口来与我的 Arduino Mega 通信。但整个事情并没有像预期的那样工作。我用 ORSSerialPort 完成了整个工作。

在 Xcode 项目中,我为 swift 文件 ViewController.swift 编写了这个:


import Cocoa
import ORSSerial


class ViewController: NSViewController, ORSSerialPortDelegate {

var serialPort = ORSSerialPort(path: "/dev/cu.usbmodem142101")
    
 
    
    func SendString(data: String){
                let stringData = Data(data.utf8)
                serialPort?.send(stringData)
            }
    func openPort(){
                serialPort?.baudRate=9600
                serialPort?.delegate=self
                serialPort?.parity = .none
                serialPort?.numberOfStopBits = 1
                serialPort?.open()
                print("serialport is open")
            }
    func closePort(){
                serialPort?.delegate=nil
                serialPort?.close()
                print("serialport is close")
            }
    
  
    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override var representedObject: Any? {
        didSet {
        }
    }
 
  
    
    @IBAction func onButton(_ sender: Any) {
        openPort()
    }
    @IBAction func OffButton(_ sender: Any) {
        closePort()
    }
    @IBAction func SendButton(_ sender: Any) {
        SendString(data: "stringdata blablabla")
    }

    
    
    
    func serialPortWasOpened(_ serialPort: ORSSerialPort) {
        print("serialPort to \(serialPort) is run")
    }

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
        self.serialPort = nil
    }
    
}

我在 Arduino mega 上加载了这段代码:


String angel;

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

void loop() {
 
 
 angel = Serial.readString();

 Serial.println(angel);
 delay(350);

}

不幸的是它不起作用,我不知道为什么。

【问题讨论】:

  • Max,你能添加更多关于什么不起作用的细节吗?您是否看到记录的消息表明串行端口已打开(即“运行到 /dev/cu.usbmodem142101 的串行端口”)?

标签: swift xcode macos arduino orsserialport


【解决方案1】:

您的问题没有提供有关哪些部分不起作用的任何详细信息,但有一个明确的问题。

您的 Arduino 程序看起来会将它在串行端口上接收到的所有内容回显到同一个端口上。为了在计算机上看到它,您必须在视图控制器中实现 serialPort(_:didReceive:) 方法。像这样的:

func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data) {
    guard let string = String(data: data, encoding: .ascii) else { return; }
    print("Received: \(string)")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 2023-03-11
    • 1970-01-01
    • 2015-12-01
    • 2017-12-05
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多