Свифт в Arduino с использованием серийного - PullRequest
1 голос
/ 11 апреля 2020

Для моего школьного проекта я хочу создать приложение MacOS, которое связывается с моим Arduino через последовательное соединение. Я попробовал 2 разные библиотеки (SwiftSerial и ORSSerialPort). Оба без успеха. Возможно, потому что я новичок в Swift.

Я решил продолжить с ORSSerialPort, потому что я могу найти больше информации об этой библиотеке. Не много, а больше, чем SwiftSerial.

Итак, проблема: если я создаю объект ORSSerialPort, он думает, что мои параметры не передаются через конструктор (init ()). Потому что, когда я пытаюсь прочитать переменные в объекте, я получаю ноль. Даже когда я делаю это: port?.baudRate = 9600 baudRate остается равным нулю.

Вот мой код:

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
``
...