MATLAB串行错误发送值

时间:2017-08-22 19:40:13

标签: matlab serial-port

我正在尝试使用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);

有关如何解决此问题的任何建议或想法?

0 个答案:

没有答案