我正在尝试通过 USB 将一个三位数的数字从 XCode 基础命令行工具发送到 arduino,作为发送数据流的概念证明。arduino 代码应该按照传入数据中的数字闪烁的次数闪烁。使用 arduino IDE 中的串行监视器可以完美运行,但是当我尝试使用使用 ORSSerialPort 的 Objective-C 程序时,arduino 上的 Rx 灯闪烁,表示它已接收到数据,但没有其他任何反应。
这是Objective-C代码:
#import <Foundation/Foundation.h>
#import <IOKit/IOKitLib.h>
#import "ORSSerialPort.h"
#import "ORSSerialPortManager.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
ORSSerialPort *arduino = [ORSSerialPort serialPortWithPath:@"/dev/tty.usbmodem26231"];
//initalizes ORSSerialPort instance
NSString *string = @"012"; //creates string from the 3-digit number
NSData *outgoingdata = [string dataUsingEncoding:NSASCIIStringEncoding];
//encodes string using ASCII
int number = 1200;
NSNumber *baudrate = [[NSNumber alloc] initWithInt:number];
//initializes an NSNumber for the baud rate
[arduino open]; //opens port
baudrate = arduino.baudRate; //sets baud rate
[arduino sendData:outgoingdata]; //sends data
[arduino close]; //closes port
NSLog(@"%@ sent", string); //logs the number
}
return 0;
}
这是arduino代码:
#include <SoftwareSerial.h>
int i100;
int i10;
int i1;
int total;
void setup() {
Serial.begin(1200);
pinMode(2, OUTPUT);
}
void loop() {
int mail = Serial.available(); //reads number of available bytes
if(mail >= 3) {
int i100raw = Serial.read()-48; //reads 3 bytes and decodes from ASCII by subtracting 48
int i10raw = Serial.read()-48;
int i1raw = Serial.read()-48;
if(i1raw >= 0) { //checks if each byte is a valid input
i100 = i100raw;
}
if(i10raw >= 0) {
i10 = i10raw;
}
if(i1raw >= 0) {
i1 = i1raw;
}
total = (i100*100)+(i10*10)+(i1); //puts together 3 digit number from 3 bytes
while(total > 0) { //flashes light
digitalWrite(2, HIGH);
delay(50);
digitalWrite(2, LOW);
delay(50);
total--;
}
}
}