我有一个简单的SerialController类:
class SerialController : NSObject, ORSSerialPortDelegate {
var port : ORSSerialPort
init(path: String){
port=ORSSerialPort(path: path)
port.close()
}
func open(){
port.baudRate=9600
port.delegate=self
port.open()
}
func close(){
port.delegate=nil
port.close()
}
func SendString(data: String){
port.sendData(data.dataUsingEncoding(NSUTF8StringEncoding))
}
func serialPortWasOpened(serialPort: ORSSerialPort!) {
println("PORT IS OPEN....")
}
func serialPortWasClosed(serialPort: ORSSerialPort!) {
println("PORT IS CLOSE")
}
func serialPort(serialPort: ORSSerialPort!, didReceiveData data: NSData!) {
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
func serialPortWasRemovedFromSystem(serialPort: ORSSerialPort!) {
println("PORT REMOVED")
}
func serialPort(serialPort: ORSSerialPort!, didEncounterError error: NSError!) {
println("PORT ERR \(error)")
}
}
和一个简单的代码,用于将数据发送到FT232适配器
func readLine()->String{
return NSString(data:NSFileHandle.fileHandleWithStandardInput().availableData, encoding: NSUTF8StringEncoding)
}
let myPort = SerialController(path: "/dev/cu.usbserial-CN920229")
myPort.open()
println("type your data to send...")
let k = readLine()
myPort.SendString(k)
myPort.close()
FT232的RX和TX引脚连接在一起,我想接收数据的回声。 我可以连接到我的适配器和SendString方法正确地发送数据到FT232,但接收不工作! 在cocoaDemo我测试我的FT232,我可以得到正确的响应。 我该怎么办?
答案 0 :(得分:3)
根本问题是您立即关闭端口,程序在端口上发送数据后结束。您需要保持程序运行并打开端口以接收数据。最简单的方法是在发送数据后旋转运行循环:
func readLine()->String?{
return NSString(data:NSFileHandle.fileHandleWithStandardInput().availableData, encoding: NSUTF8StringEncoding)
}
let myPort = SerialController(path: "/dev/cu.USA19H141P1.1")
myPort.open()
println("type your data to send...")
if let k = readLine() {
myPort.SendString(k)
}
NSRunLoop.currentRunLoop().run() // <-- This will continue indefinitely.
请注意,尽管这会允许您接收数据,但它当然不是一个结构良好的程序。每次运行程序只能发送一个字符串,因为您只调用readLine
()一次而不是循环并重复调用它。也没有办法退出程序而不是用⌘-来杀死它。或类似的。
如果您计划将其转换为一个真正的程序,而不仅仅是快速的一次性测试,我建议您查看ORSSerialPort的Examples文件夹中的CommandLineDemo项目。 Swift和Objective-C都提供了该示例的版本。