我正在尝试使用MATLAB与StepRocker电机控制器/驱动器进行通信。我已经弄清楚如何格式化他们的命令,并且能够让它移动到许多命令。他们的命令要求通过RS-232以二进制格式发送值。我开始遇到一些问题并开始使用Arduino来回应我的命令。
我目前正在发送值1 - 255,仅用于测试通过串行通道发送字节。我将它发送到Arduino并从Arduino读取字节。除了128和159之间的数字之外,所有数字都有效。这是有问题的,因为我的一些命令需要此范围内的值。
MATLAB脚本:
Example
执行此脚本后,我得到以下输出:
class Example
def ==(other)
return true
end
end
class Hash
alias_method :original_double_equals, :==
def ==(other)
case other
when Example
other == self
else
original_double_equals(other)
end
end
end
exp = Example.new
exp == {} # => true
{} == exp # => true
{} == {} # => true
{foo: 1} == {foo: 2} # => false
查看输出,您可以看到128到159之间的数字全部为63.我对导致此问题的原因感到茫然。这是非常可重复的,无论字符串中的位置如何,无论串行字符串的长度如何,只要该范围内有数字,就会出现问题。
Arduino代码:
obj = instrfind; delete(obj); % cleanup any lost objects
clear; close force all; clc; % clear the workspace
sM = serial('COM2','BaudRate',9600, 'Terminator', 'CR', 'Timeout', 10);
fopen(sM);
pause(2); % give port time to open
% make list of numbers 1-255, skip 10/13 since they terminate on the
% arduino
cmd = [1:9 11:12 14:255];
% Send command and get echo
fprintf(sM,cmd);
pause(0.5); % give time for echo
echo = fscanf(sM);
uint8(echo)
fclose(sM);
有关如何解决此问题的任何建议或想法?