2015-03-07 5 views
2

Я пытаюсь запустить базовую последовательную связь. Мой код arduino показан ниже.Последовательная связь Matlab & Arduino

void setup() 
    { 
     Serial.begin(9600); 

     Serial.println('a'); 
     char a = 'b'; 
     while (a != 'a') 
     { 
     a = Serial.read(); 
     } 
    } 
    void loop() 
    { 
    } 

и мой MATLAB код:

delete(instrfindall); 
s = serial('/dev/tty.usbmodem1421'); 
set(s, 'BaudRate', 9600); 
set(s, 'DataBits', 8); 
set(s, 'StopBits', 1); 
set(s, 'Parity', 'none'); 
set(s, 'Terminator', 'LF'); 
fopen(s); 

% VERIFY SERIAL COMMUNICATION HAS BEEN SETUP 
a = 'b'; 
while (a~='a') 
     a = fread(s,1,'uchar'); 
end 
if (a == 'a') 
    disp('Serial read') 
end 
fprintf(s,'%c','a'); 
mxbox = msgbox('Serial Communication Initialized'); uiwait(mxbox); 

код MATLAB выполняет и я получаю окно сообщения говорит мне, что он инициализирован, однако переменная не читается успешно и цикл в то время как выходы преждевременно, отладка Я обнаружил, что на самом деле это только петли для одной итерации, а затем продолжается. «Серийное чтение» никогда не отображается.

Любая помощь будет оценена, спасибо заранее.

Примечание

добавления disp(size(a));disp(double(a)); после fread дали выход и нет выхода соответственно

+0

Для целей отладки, вы могли бы добавить 'DISP (размер (а)); DISP (двойной (а)), 'после' fread' линии и добавить вывод на свой вопрос? – Daniel

ответ

0

Похоже, ваши условия являются логическим отрицанием, но это не так. Оба условия ложны для a=[] (или a=['a','b']). Чтение ничего не могло объяснить поведение, которое вы наблюдали. Попробуйте этот код вместо:

a = 'b'; 
while (~strcmpi(a,'a')) 
     a = fread(s,1,'uchar'); 
end 
if (strcmpi(a,'a')) 
    disp('Serial read') 
end 
+1

Спасибо за ваш ответ, когда я добавляю этот код, он застревает в цикле while, поэтому я ничего не читаю. Я также добавил вывод, поскольку ваш предыдущий комментарий предложил до конца вопроса. – tjp212

+0

@TomPower: Я не могу дать вам никакого намека, почему он ничего не получает, а просто комментарий о том, что вы делаете. Существует пакет поддержки Arduino (http://www.mathworks.com/hardware-support/arduino-matlab.html) для matlab, и есть интерфейс java (http://arduino.cc/en/Main/Software) которые могут быть легко использованы в Matlab (http://www.mathworks.com/help/matlab/using-java-libraries-in-matlab.html). Это может быть альтернативой, если вы не решите эту проблему. – Daniel

Смежные вопросы