【问题标题】:Matlab and ArduinoMatlab 和 Arduino
【发布时间】:2015-10-16 21:21:47
【问题描述】:

我正在尝试测试 matlab 和 arduino 之间的通信,但发生了一些奇怪的事情。 我尝试使用数字 1 到 10 来接收它们。它适用于 2,3,4....10 但对于 1 我得到:

警告:读取不成功:在超时期限内未返回指定数量的数据。

如果我再次运行它,我会得到相同的结果。 1 我得到错误,我得到 2 到 10。我没有在运行之间重置 arduino。这就是奇怪的部分。

我的 arudino 代码:

uint32_t next_number;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  next_number = 0;
}

void loop() {
  if (Serial.available() >= sizeof(next_number)) {
    uint8_t data_read = Serial.readBytes((uint8_t*)&next_number, sizeof(next_number));
    Serial.write((uint8_t*)&next_number, 4);
    digitalWrite(13, HIGH);
  }
}

我的 Matlab 代码:

function send_song_to_arduino()
    delete(instrfind);
    s = serial('COM3');
    disp(['s input buffer size ', num2str(s.InputBufferSize)]);
    set(s,'Terminator','LF'); % define the terminator for println
    set(s,'Databits',8);
    set(s,'Stopbits',1);
    set(s,'Parity','none');
    set(s, 'BaudRate', 9600);
    fopen(s);
    disp(['available at start ', num2str(s.bytesavailable)]);
    disp(['left to send at start ', num2str(s.BytesToOutput)]);
    if (s.bytesavailable > 0)
        fread(s, s.bytesavailable, 'uint8')
    end
    disp('starting');
    for i=1:10
        fwrite(s, i, 'uint32');
        pause(1);
        disp(['available ', num2str(s.bytesavailable)]);
        received = fread(s, 1, 'uint32');
        disp(['recv ', mat2str(received)]);
    end
    disp(['done available ', num2str(s.bytesavailable)]);
    disp(['total sent ', num2str(s.ValuesSent)]);
    disp(['left to send at end ', num2str(s.BytesToOutput)]);
    fclose(s);
    delete(s);
end

结果:

>> send_song_to_arduino
available at start 0
left to send at start 0
starting
available 0
Warning: Unsuccessful read: The specified amount of data was not returned within the Timeout period. 
recv zeros(1,0)
available 4
recv 2
available 4
recv 3
available 4
recv 4
available 4
recv 5
available 4
recv 6
available 4
recv 7
available 4
recv 8
available 4
recv 9
available 4
recv 10
done available 0
total sent 10
left to send at end 0

【问题讨论】:

    标签: matlab arduino


    【解决方案1】:

    我的解决方案: 显然,matlab串行打开重置arduino。 arduino 端的串行需要一些时间才能启动,因此在 arduino 准备好之前发送第一个请求。我只是在 fopen 之后添加了一个暂停。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多