私の学校のプロジェクトでは、シリアル接続を使用して Arduino と通信する MacOS アプリケーションを作成したいと考えています。2 つの異なるライブラリ (SwiftSerial と ORSSerialPort) を試しました。どちらも成功なし。おそらく私はSwiftの初心者だからです。
ORSSerialPort
このライブラリについてより多くの情報を見つけることができるので、続行することにしました。多くはありませんが、SwiftSerial よりも多くあります。
したがって、問題:ORSSerialPort
オブジェクトを作成すると、パラメーターがコンストラクター (init()) を介して取得されないと考えられます。オブジェクト内の変数を読み取ろうとすると、nil が返されるためです。これを行っても、
port?.baudRate = 9600
baudRate は nil のままです。
ここに私のコード:
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()
}
}
SerialParser.swift
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
``