Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS Serial redpark未向Serial发送数据?_Ios_Objective C_Iphone_Model View Controller - Fatal编程技术网

IOS Serial redpark未向Serial发送数据?

IOS Serial redpark未向Serial发送数据?,ios,objective-c,iphone,model-view-controller,Ios,Objective C,Iphone,Model View Controller,嗨,我对IOS真的很陌生,我正在学习一个示例代码,它可以用RedPark电缆将字符串写入串行。 我有我正在学习的示例代码,它可以工作,并且可以将字符串发送到Arduino Serial。 另外,我有我正在编写的基于示例代码的代码,但现在不起作用。 我已经尝试了几天,在网上搜索了很多,但仍然不明白为什么我的代码不起作用 有人能告诉我为什么我的代码不起作用吗 ************************************************有效的示例代码****************

嗨,我对IOS真的很陌生,我正在学习一个示例代码,它可以用RedPark电缆将字符串写入串行。 我有我正在学习的示例代码,它可以工作,并且可以将字符串发送到Arduino Serial。 另外,我有我正在编写的基于示例代码的代码,但现在不起作用。 我已经尝试了几天,在网上搜索了很多,但仍然不明白为什么我的代码不起作用

有人能告诉我为什么我的代码不起作用吗

************************************************有效的示例代码************************************** Appdelegate.h

jTerminalViewModel.h

************************************我的代码不起作用****************

AppDelegate.h

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
ViewController.h

#import <UIKit/UIKit.h>
#import <opencv2/videoio/cap_ios.h>
#import <opencv2/imgcodecs/ios.h>

using namespace cv;

@class DetectionViewModel;

@interface ViewController : UIViewController<CvVideoCameraDelegate>{
IBOutlet UIImageView* imageView;
__weak IBOutlet UITextField *inputTextField;
}

-(instancetype)initWithViewModel:(DetectionViewModel*)viewModel;

@end
ViewController.m

#import "ViewController.h"
#import "DetectionViewModel.h"
#import "opencv2/videoio/cap_ios.h"
#import "opencv2/imgcodecs/ios.h"
#import "RscMgr.h"


@interface ViewController ()<UITextFieldDelegate>
@end

@implementation ViewController
{
@private
DetectionViewModel* _viewModel;
}
-(instancetype)initWithViewModel:(DetectionViewModel *)viewModel{
self = [super init];
if(self){
    NSLog(@"init--DetectionViewModel");
    _viewModel = viewModel;
}
return self;
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self->inputTextField.delegate=self;

}

-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self->inputTextField.delegate = nil;
}


- (void)viewDidLoad {
[super viewDidLoad];
self->inputTextField.delegate=self;

[_viewModel open];  
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.

}

#pragma mark - UITextFieldDelegate

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[_viewModel sendMessage:@"jsd@jh@@hj@jhg@jh@@jh@jh@w2Open@w2Open@"];
inputTextField.text=nil;

 return NO;
}


@end
#import "EnterCommandViewController.h"
#import "DetectionViewController.h"

@interface EnterCommandViewController () <UITextFieldDelegate>
{
    @private
    BOOL connected;
}

@end
- (void)viewDidLoad {

    [super viewDidLoad];
    rscMgr = [[RscMgr alloc] init];
    [rscMgr setDelegate:self];
    // Do any additional setup after loading the view, typically from a nib.
    [inputTextField becomeFirstResponder];
}
-(void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    inputTextField.delegate = self;
}

-(void) viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    inputTextField.delegate = nil;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
} 
#pragma mark - UITextFieldDelegate Methods
-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    [self sendMessage:textField.text];
    textField.text = nil;
    return NO;
}
#pragma mark - Serial Tx/Rx Methods Implementation
-(void) sendMessage:(NSString *)message{
    if(connected == YES) {
        [rscMgr writeString:message];
    }
    else{
        NSLog(@"CableDisconnected!");
       NSLog(@"Attempted To Send: %@",message);
    }
}
#pragma mark - RscMgrDelegate Methods Implementation
-(void) cableConnected:(NSString *)protocol{
    inputTextField.text = @"cableConnected";
    [rscMgr setBaud:9600];
    [rscMgr open];
    connected = YES;
}
-(void) cableDisconnected{
    inputTextField.text = @"cableDisconnected";
    connected = NO;
}
-(void) readBytesAvailable:(UInt32)length{}
-(void) portStatusChanged{}

@end
DetectionViewMode.h

#import <Foundation/Foundation.h>

@class RscMgr;

@interface DetectionViewModel : NSObject

@property (readonly) BOOL connected;
@property (nonatomic, strong, readonly) NSString* receivedText;

-(instancetype)initWithSerialManager:(RscMgr*)serialManager;
-(void) sendMessage:(NSString*)message;
@end
DetectionViewModel.m

#import "DetectionViewModel.h"
#import "RscMgr.h"


@interface DetectionViewModel()<RscMgrDelegate>

@end

@implementation DetectionViewModel
{
@private
RscMgr* _serialManager;
UInt8 buf[14];
}

-(instancetype)initWithSerialManager:(RscMgr* )serialManager{
self = [super init];
if(self){
    _serialManager = serialManager;
    [_serialManager setDelegate:self];
     _receivedText = @"";
}
return self;
}


-(void)sendMessage:(NSString *)message{
NSLog(@"in sendMessage() now");
NSLog(@"baud in sendMessage is:%i",[self getBaud]);
NSLog(@"txMode in sendMessage is: %i",[self getTxMode]);

  if(_connected){

  [_serialManager writeString:message];
 }
}

-(void)setConnected:(BOOL)connected{
[self willChangeValueForKey:@"connected"];
_connected = connected;
[self didChangeValueForKey:@"connected"];
}

-(void)setReceivedText:(NSString *)receivedText{
[self willChangeValueForKey:@"receivedText"];
_receivedText = receivedText;
[self didChangeValueForKey:@"receivedText"];
}

#pragma mark - Delegate
-(void)readBytesAvailable:(UInt32)length{
NSString* messageReceived = [_serialManager getStringFromBytesAvailable];
[self setReceivedText:[_receivedText       stringByAppendingFormat:@"%@",messageReceived]];

}

-(void)cableConnected:(NSString *)protocol{
[self setConnected:YES];
[_serialManager setBaud:9600];
[_serialManager open];

}
-(void)cableDisconnected{  
[self  setConnected:NO];
}
-(void)portStatusChanged{
}

@end
不同之处在于,示例使用代码实现接口,而我使用脚本。我的代码也会编译和运行,但不会将数据发送到串行端口。
我将尽快发布所需的更多信息。

我终于编写了一个简单的测试应用程序,它可以工作并可以将数据发送到串行电缆: 对于Arduino: 阿杜伊诺

unsigned char inChar;
unsigned char commandChar;
char command[100];
int commandLength = 0;
String currentCommand;
int i=0;   //line 10

int w1In1 = 22;
int w1In2 = 23;
int w1Pwm = 9;
int w2In1 = 25;    //int w2In1 = 7;
int w2In2 = 24;    //int w2In2 = 6;
int w2Pwm = 5;    //line 17

int tempLeng=0;
int tempSpeed=0; //line 20

void setup(){
  currentCommand="";
  pinMode(w1In1, OUTPUT);
  pinMode(w1In2, OUTPUT);
  pinMode(w1Pwm, OUTPUT);
  pinMode(w2In1, OUTPUT);
  pinMode(w2In2, OUTPUT);
  pinMode(w2Pwm, OUTPUT);

  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("ready");
} //line 30

void loop(){
  if(Serial.available() > 0){
    readChar();   
    Serial.print(currentCommand);//
  }
}


//*******************Reading psedo commands from Serial buffer*******************
void readChar(){
  commandChar = Serial.read();

//  if(commandChar != '$'&&){
  if( commandChar != '\r' && commandChar!='\n'&&commandChar!='@'){
    if(commandLength < 999){
     command[commandLength++]=commandChar;
   }
 }
 else{

  if(commandLength>0){
    command[commandLength]='\0';
    Serial.print("commandLength:");
    Serial.println(commandLength);
    Serial.print("arduino received >");
    Serial.println(command);
    for(i=0;command[i]!='\0';i++)
    { currentCommand +=command[i];}
    //*********************************Processing

    //***********************************processing
    commandLength = 0;
    memset(command,0b00000000, sizeof(command)); 

   }
  }

}
为应用程序输入代码:

首先,您需要RedPark串行电缆库,可从RedPark网站下载:

代码:

ViewController.m

#import "ViewController.h"
#import "DetectionViewModel.h"
#import "opencv2/videoio/cap_ios.h"
#import "opencv2/imgcodecs/ios.h"
#import "RscMgr.h"


@interface ViewController ()<UITextFieldDelegate>
@end

@implementation ViewController
{
@private
DetectionViewModel* _viewModel;
}
-(instancetype)initWithViewModel:(DetectionViewModel *)viewModel{
self = [super init];
if(self){
    NSLog(@"init--DetectionViewModel");
    _viewModel = viewModel;
}
return self;
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self->inputTextField.delegate=self;

}

-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self->inputTextField.delegate = nil;
}


- (void)viewDidLoad {
[super viewDidLoad];
self->inputTextField.delegate=self;

[_viewModel open];  
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.

}

#pragma mark - UITextFieldDelegate

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[_viewModel sendMessage:@"jsd@jh@@hj@jhg@jh@@jh@jh@w2Open@w2Open@"];
inputTextField.text=nil;

 return NO;
}


@end
#import "EnterCommandViewController.h"
#import "DetectionViewController.h"

@interface EnterCommandViewController () <UITextFieldDelegate>
{
    @private
    BOOL connected;
}

@end
- (void)viewDidLoad {

    [super viewDidLoad];
    rscMgr = [[RscMgr alloc] init];
    [rscMgr setDelegate:self];
    // Do any additional setup after loading the view, typically from a nib.
    [inputTextField becomeFirstResponder];
}
-(void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    inputTextField.delegate = self;
}

-(void) viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    inputTextField.delegate = nil;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
} 
#pragma mark - UITextFieldDelegate Methods
-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    [self sendMessage:textField.text];
    textField.text = nil;
    return NO;
}
#pragma mark - Serial Tx/Rx Methods Implementation
-(void) sendMessage:(NSString *)message{
    if(connected == YES) {
        [rscMgr writeString:message];
    }
    else{
        NSLog(@"CableDisconnected!");
       NSLog(@"Attempted To Send: %@",message);
    }
}
#pragma mark - RscMgrDelegate Methods Implementation
-(void) cableConnected:(NSString *)protocol{
    inputTextField.text = @"cableConnected";
    [rscMgr setBaud:9600];
    [rscMgr open];
    connected = YES;
}
-(void) cableDisconnected{
    inputTextField.text = @"cableDisconnected";
    connected = NO;
}
-(void) readBytesAvailable:(UInt32)length{}
-(void) portStatusChanged{}

@end
因此,当您在文本字段中输入一个字符串并按return键时,该字符串将写入Arduino串行端口,您可以在串行监视器中读取该字符串

#import <UIKit/UIKit.h>
#import <opencv2/videoio/cap_ios.h>
#import <opencv2/imgcodecs/ios.h>

using namespace cv;

@class DetectionViewModel;

@interface ViewController : UIViewController<CvVideoCameraDelegate>{
IBOutlet UIImageView* imageView;
__weak IBOutlet UITextField *inputTextField;
}

-(instancetype)initWithViewModel:(DetectionViewModel*)viewModel;

@end
#import "ViewController.h"
#import "DetectionViewModel.h"
#import "opencv2/videoio/cap_ios.h"
#import "opencv2/imgcodecs/ios.h"
#import "RscMgr.h"


@interface ViewController ()<UITextFieldDelegate>
@end

@implementation ViewController
{
@private
DetectionViewModel* _viewModel;
}
-(instancetype)initWithViewModel:(DetectionViewModel *)viewModel{
self = [super init];
if(self){
    NSLog(@"init--DetectionViewModel");
    _viewModel = viewModel;
}
return self;
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self->inputTextField.delegate=self;

}

-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self->inputTextField.delegate = nil;
}


- (void)viewDidLoad {
[super viewDidLoad];
self->inputTextField.delegate=self;

[_viewModel open];  
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.

}

#pragma mark - UITextFieldDelegate

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[_viewModel sendMessage:@"jsd@jh@@hj@jhg@jh@@jh@jh@w2Open@w2Open@"];
inputTextField.text=nil;

 return NO;
}


@end
#import <Foundation/Foundation.h>

@class RscMgr;

@interface DetectionViewModel : NSObject

@property (readonly) BOOL connected;
@property (nonatomic, strong, readonly) NSString* receivedText;

-(instancetype)initWithSerialManager:(RscMgr*)serialManager;
-(void) sendMessage:(NSString*)message;
@end
#import "DetectionViewModel.h"
#import "RscMgr.h"


@interface DetectionViewModel()<RscMgrDelegate>

@end

@implementation DetectionViewModel
{
@private
RscMgr* _serialManager;
UInt8 buf[14];
}

-(instancetype)initWithSerialManager:(RscMgr* )serialManager{
self = [super init];
if(self){
    _serialManager = serialManager;
    [_serialManager setDelegate:self];
     _receivedText = @"";
}
return self;
}


-(void)sendMessage:(NSString *)message{
NSLog(@"in sendMessage() now");
NSLog(@"baud in sendMessage is:%i",[self getBaud]);
NSLog(@"txMode in sendMessage is: %i",[self getTxMode]);

  if(_connected){

  [_serialManager writeString:message];
 }
}

-(void)setConnected:(BOOL)connected{
[self willChangeValueForKey:@"connected"];
_connected = connected;
[self didChangeValueForKey:@"connected"];
}

-(void)setReceivedText:(NSString *)receivedText{
[self willChangeValueForKey:@"receivedText"];
_receivedText = receivedText;
[self didChangeValueForKey:@"receivedText"];
}

#pragma mark - Delegate
-(void)readBytesAvailable:(UInt32)length{
NSString* messageReceived = [_serialManager getStringFromBytesAvailable];
[self setReceivedText:[_receivedText       stringByAppendingFormat:@"%@",messageReceived]];

}

-(void)cableConnected:(NSString *)protocol{
[self setConnected:YES];
[_serialManager setBaud:9600];
[_serialManager open];

}
-(void)cableDisconnected{  
[self  setConnected:NO];
}
-(void)portStatusChanged{
}

@end
unsigned char inChar;
unsigned char commandChar;
char command[100];
int commandLength = 0;
String currentCommand;
int i=0;   //line 10

int w1In1 = 22;
int w1In2 = 23;
int w1Pwm = 9;
int w2In1 = 25;    //int w2In1 = 7;
int w2In2 = 24;    //int w2In2 = 6;
int w2Pwm = 5;    //line 17

int tempLeng=0;
int tempSpeed=0; //line 20

void setup(){
  currentCommand="";
  pinMode(w1In1, OUTPUT);
  pinMode(w1In2, OUTPUT);
  pinMode(w1Pwm, OUTPUT);
  pinMode(w2In1, OUTPUT);
  pinMode(w2In2, OUTPUT);
  pinMode(w2Pwm, OUTPUT);

  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("ready");
} //line 30

void loop(){
  if(Serial.available() > 0){
    readChar();   
    Serial.print(currentCommand);//
  }
}


//*******************Reading psedo commands from Serial buffer*******************
void readChar(){
  commandChar = Serial.read();

//  if(commandChar != '$'&&){
  if( commandChar != '\r' && commandChar!='\n'&&commandChar!='@'){
    if(commandLength < 999){
     command[commandLength++]=commandChar;
   }
 }
 else{

  if(commandLength>0){
    command[commandLength]='\0';
    Serial.print("commandLength:");
    Serial.println(commandLength);
    Serial.print("arduino received >");
    Serial.println(command);
    for(i=0;command[i]!='\0';i++)
    { currentCommand +=command[i];}
    //*********************************Processing

    //***********************************processing
    commandLength = 0;
    memset(command,0b00000000, sizeof(command)); 

   }
  }

}
AppleDelegate.h and AppleDelegate.m is the default code for single view App


ViewController.h

#import <UIKit/UIKit.h>
#import "RscMgr.h"
@interface EnterCommandViewController : UIViewController  <RscMgrDelegate>
{
RscMgr* rscMgr;
IBOutlet UITextField *inputTextField;
}

-(void)sendMessage:(NSString*)message;
@end
#import "EnterCommandViewController.h"
#import "DetectionViewController.h"

@interface EnterCommandViewController () <UITextFieldDelegate>
{
    @private
    BOOL connected;
}

@end
- (void)viewDidLoad {

    [super viewDidLoad];
    rscMgr = [[RscMgr alloc] init];
    [rscMgr setDelegate:self];
    // Do any additional setup after loading the view, typically from a nib.
    [inputTextField becomeFirstResponder];
}
-(void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    inputTextField.delegate = self;
}

-(void) viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    inputTextField.delegate = nil;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
} 
#pragma mark - UITextFieldDelegate Methods
-(BOOL) textFieldShouldReturn:(UITextField *)textField{
    [self sendMessage:textField.text];
    textField.text = nil;
    return NO;
}
#pragma mark - Serial Tx/Rx Methods Implementation
-(void) sendMessage:(NSString *)message{
    if(connected == YES) {
        [rscMgr writeString:message];
    }
    else{
        NSLog(@"CableDisconnected!");
       NSLog(@"Attempted To Send: %@",message);
    }
}
#pragma mark - RscMgrDelegate Methods Implementation
-(void) cableConnected:(NSString *)protocol{
    inputTextField.text = @"cableConnected";
    [rscMgr setBaud:9600];
    [rscMgr open];
    connected = YES;
}
-(void) cableDisconnected{
    inputTextField.text = @"cableDisconnected";
    connected = NO;
}
-(void) readBytesAvailable:(UInt32)length{}
-(void) portStatusChanged{}

@end