Masalah buffer Serial Matlab

Saya mencoba berkomunikasi dari Simblee Rfduino saya ke Matlab, dengan kode Arduino berikut:

char testing[] = {1,2,3,4,5,6,7,8,'\0'};

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(6,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(6,LOW);
  Serial.flush();
  testing(EMG);
  Serial.flush();
  digitalWrite(6,HIGH);
}

Dengan Python saya dapat membaca 1-8 dengan benar dalam urutan yang benar secara konsisten.

Namun di Matlab terus berubah urutannya tanpa konsistensi, dengan kode berikut:

function serial()
global ser 
ser = serial('COM5', 'BaudRate', 9600, 'FlowControl', 'hardware');
fopen(ser);

end 
function serial_callback(~, ~)
    global ser
    time = tic;
    fread(ser,1) % pull in data from serial port
    toc(time);    
end

Saya pikir mungkin ada beberapa masalah dalam buffer Serial. Bisakah Anda memberikan panduan tentang cara agar Matlab secara konsisten membaca data secara berurutan? Apakah orang lain bisa membuat Matlab membaca dengan andal dari port serial? Terima kasih!


person pjay    schedule 01.06.2016    source sumber


Jawaban (1)


Anda dapat mengatur FlowControl ke perangkat lunak (flag xOn dan xOff). Perangkat keras hanya mungkin dilakukan jika Anda memiliki "sumber daya perangkat keras".

Buffer input Matlab biasanya bekerja dengan prinsip fifo.

Setelah fopen() Anda harus menunggu satu detik. Karena beberapa mikrokontroler (seperti Arduino uno ...) restart setelah inisialisasi antarmuka uart.

--> jeda(1);

person matt    schedule 28.05.2019