Swift到Arduino使用串行

Swift到Arduino使用串行,swift,macos,arduino,serial-port,orsserialport,Swift,Macos,Arduino,Serial Port,Orsserialport,对于我的学校项目,我想创建一个MacOS应用程序,使用串行连接与我的Arduino进行通信。我尝试了两种不同的库(SwiftSerial和ORSSerialPort)。两者都没有成功。可能是因为我是Swift的初学者 我决定继续使用或serialport,因为我可以找到有关此库的更多信息。不是很多,而是更多的雨燕 所以问题是:如果我创建或serialport对象,它会认为我的参数不是通过构造函数(init())来的。因为当我尝试读取对象中的变量时,我得到一个nil。即使我这样做: port?.b

对于我的学校项目,我想创建一个MacOS应用程序,使用串行连接与我的Arduino进行通信。我尝试了两种不同的库(SwiftSerial和ORSSerialPort)。两者都没有成功。可能是因为我是Swift的初学者

我决定继续使用
或serialport
,因为我可以找到有关此库的更多信息。不是很多,而是更多的雨燕

所以问题是:如果我创建
或serialport
对象,它会认为我的参数不是通过构造函数(init())来的。因为当我尝试读取对象中的变量时,我得到一个nil。即使我这样做:
port?.baudRate=9600
波特率保持为零

这是我的代码:

ViewController.swift

import Cocoa

var port: SerialParser?

class ViewController: NSViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

        port = SerialParser(path: "/dev/cu.usbmodem14101")

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


    @IBAction func ledOn(_ sender: Any) {
        port?.open()
        port?.sendString(data: "1")
        port?.close()
    }


    @IBAction func ledOff(_ sender: Any) {
        port?.open()
        port?.sendString(data: "0")
        port?.close()
    }
}
import Cocoa
import ORSSerial

class SerialParser : NSObject, ORSSerialPortDelegate {
    var port : ORSSerialPort?

    init(path: String){
        port = ORSSerialPort(path: path)
        print("path: \(port?.path)")
    }

    func open(){
        port?.baudRate = 9600
        port?.delegate = self
        if let portUnwraped = port {
            portUnwraped.open()
            print("path: \(portUnwraped.path) baudRate: \(portUnwraped.baudRate)")
        }else{
            print("port object empty");
        }
    }

    func close(){
        port?.delegate=nil
        port?.close()
        print("poort closed")
    }

    func sendString(data: String){
        let dataa = Data(data.utf8)
        port?.send(dataa)
        print("Data sended: \(data)")
    }

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
        print("PORT REMOVED")
    }

}
path: nil
port object empty
Data sended: 1
poort closed
``
SerialParser.swift

import Cocoa

var port: SerialParser?

class ViewController: NSViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

        port = SerialParser(path: "/dev/cu.usbmodem14101")

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


    @IBAction func ledOn(_ sender: Any) {
        port?.open()
        port?.sendString(data: "1")
        port?.close()
    }


    @IBAction func ledOff(_ sender: Any) {
        port?.open()
        port?.sendString(data: "0")
        port?.close()
    }
}
import Cocoa
import ORSSerial

class SerialParser : NSObject, ORSSerialPortDelegate {
    var port : ORSSerialPort?

    init(path: String){
        port = ORSSerialPort(path: path)
        print("path: \(port?.path)")
    }

    func open(){
        port?.baudRate = 9600
        port?.delegate = self
        if let portUnwraped = port {
            portUnwraped.open()
            print("path: \(portUnwraped.path) baudRate: \(portUnwraped.baudRate)")
        }else{
            print("port object empty");
        }
    }

    func close(){
        port?.delegate=nil
        port?.close()
        print("poort closed")
    }

    func sendString(data: String){
        let dataa = Data(data.utf8)
        port?.send(dataa)
        print("Data sended: \(data)")
    }

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
        print("PORT REMOVED")
    }

}
path: nil
port object empty
Data sended: 1
poort closed
``
我的输出

import Cocoa

var port: SerialParser?

class ViewController: NSViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

        port = SerialParser(path: "/dev/cu.usbmodem14101")

    }

    override var representedObject: Any? {
        didSet {
        // Update the view, if already loaded.
        }
    }


    @IBAction func ledOn(_ sender: Any) {
        port?.open()
        port?.sendString(data: "1")
        port?.close()
    }


    @IBAction func ledOff(_ sender: Any) {
        port?.open()
        port?.sendString(data: "0")
        port?.close()
    }
}
import Cocoa
import ORSSerial

class SerialParser : NSObject, ORSSerialPortDelegate {
    var port : ORSSerialPort?

    init(path: String){
        port = ORSSerialPort(path: path)
        print("path: \(port?.path)")
    }

    func open(){
        port?.baudRate = 9600
        port?.delegate = self
        if let portUnwraped = port {
            portUnwraped.open()
            print("path: \(portUnwraped.path) baudRate: \(portUnwraped.baudRate)")
        }else{
            print("port object empty");
        }
    }

    func close(){
        port?.delegate=nil
        port?.close()
        print("poort closed")
    }

    func sendString(data: String){
        let dataa = Data(data.utf8)
        port?.send(dataa)
        print("Data sended: \(data)")
    }

    func serialPortWasRemovedFromSystem(_ serialPort: ORSSerialPort) {
        print("PORT REMOVED")
    }

}
path: nil
port object empty
Data sended: 1
poort closed
``

您确定路径
/dev/cu.usbmodem14101
正确/有效吗?您使用的是哪种Arduino?@Andrew Madsen是的,如果我在终端中键入“`ls-l/dev/cu.*`”,路径应该正确。我的Arduino显示为
/dev/cu.usbmodem14101
。我使用Arduino解除与uno上USB端口的通信?@RichardBarber,是的!我的UNO通常显示为/dev/ttyACM0,使用115200波特。您确定路径
/dev/cu.usbmodem14101
正确/有效吗?您使用的是哪种Arduino?@Andrew Madsen是的,如果我在终端中键入“`ls-l/dev/cu.*`”,路径应该正确。我的Arduino显示为
/dev/cu.usbmodem14101
。我使用Arduino解除与uno上USB端口的通信?@RichardBarber,是的!我的unos通常显示为/dev/ttyACM0,使用115200波特。