2015-03-20 6 views
0

Я делаю пульт дистанционного управления с помощью MATLAB GUI Но у меня нет опыта работы в MATLAB это код, но не реализовано:как отправить данные из графического интерфейса Matlab в arduino?

1- Arduino код (передатчик):

int matlabData; 
const int APIN=13; 
const int BPIN=12; 

#include <VirtualWire.h> 

char *controller; 

void setup() { 

    Serial.begin(9600); 
    pinMode(APIN,OUTPUT); 

    vw_set_ptt_inverted(true); // 
    vw_set_tx_pin(BPIN); 
    vw_setup(4000);// SPEED OF DATA TRANSFER KBPS 
} 


void GET_ACTION(){ 
if(Serial.available()>0) // if there is data to read 
matlabData=Serial.read(); // read data 

if(matlabData==1){ 
//FORWARD 
controller="F"; 
Serial.println("FORWARD"); 

} 


if(matlabData==2){ 
//BACKWARD 
controller="B"; 
Serial.println("BACKWARD"); 

} 


if(matlabData==3){ 
    //RIGHT 
    controller="R"; 
    Serial.println("RIGHT"); 
} 


if(matlabData==4){ 
    //LEFT 
    controller="L"; 
    Serial.println("LEFT"); 

} 


if(matlabData==5) { 
    //STOP 
    controller="S"; 
    Serial.println("STOP"); 
} 
} 
} 

void SEND_RF(){ 
vw_send((uint8_t *) controller, strlen(controller)); 
vw_wait_tx(); // WAIT UNTIL THE WHOLE MESSAGE IS GONE 
digitalWrite(APIN,1); 
delay(50); 
digitalWrite(APIN,0); 

} 
void loop(){ 
GET_ACTION(); 
SEND_RF(); 
//delay(1000); 
} 

2- MATLAB код "Здесь проблема":

clear all 
clc 
answer=1; % this is where we'll store the user's answer 
arduino=serial('COM10','BaudRate',9600); % create serial communication object on port COM10 

fopen(arduino); % initiate arduino communication 

while answer 
fprintf(arduino,'%s',char(answer)); % send answer variable content to arduino 


function pushbutton1_Callback(hObject, eventdata, handles) 
answer= 1; 

function pushbutton2_Callback(hObject, eventdata, handles) 
answer= 2; 

function pushbutton3_Callback(hObject, eventdata, handles) 
answer= 3; 

function pushbutton4_Callback(hObject, eventdata, handles) 
answer= 4; 

function pushbutton5_Callback(hObject, eventdata, handles) 
answer= 5; 

end 

fclose(arduino); % end communication with arduino 

3-Arduino код (приемник):

const int APIN=13; 
const int BPIN=12; 

#include <VirtualWire.h> 

#include "L298_MOTOR.h" 

L298_MOTOR L298(5,4,6,7); 

void setup() 
{ 
    Serial.begin(9600); 
    L298.ENABLE_ACTIVE(11,10); 
    L298.ENABLE_A('ON'); 
    L298.STOP(); 
    vw_set_ptt_inverted(true); // REQUIRED FOR DR3100 
    vw_set_rx_pin(BPIN); 
    vw_setup(4000); // BITS PER SEC 
    pinMode(APIN, OUTPUT); 

    vw_rx_start();  // START THE RECEIVER PLL RUNNING 
} 
    void loop() 
{ 
    uint8_t buf[VW_MAX_MESSAGE_LEN]; 
    uint8_t buflen = VW_MAX_MESSAGE_LEN; 

    if (vw_get_message(buf, &buflen)) // NON-BLOCKING 
    { 
     if(buf[0]=='F'){ 
     //FORWARD 
      L298.BACKWARD(150); 
    //  SERIAL.PRINTLN("FORWARD"); 
    digitalWrite(APIN,1); 
     } 
     if(buf[0]=='B'){ 
     //BACKWARD 
     L298.FORWARD(150); 
    // SERIAL.PRINTLN("BACKWARD"); 


    digitalWrite(APIN,1); 
     } 
     if(buf[0]=='R'){ 
      //RIGHT 
      L298.TurnLEFT(140); 
     //  SERIAL.PRINTLN("RIGHT"); 

    digitalWrite(APIN,0); 
    } 
    if(buf[0]=='L'){ 
      //LEFT 
      L298.TurnRIGHT(140); 
     // SERIAL.PRINTLN("LEFT"); 

    digitalWrite(APIN,0); 
    } 
    if(buf[0]=='S'){ 
      //STOP' 
      L298.STOP(); 
      // SERIAL.PRINTLN("STOP"); 

    digitalWrite(APIN,0); 
    } 
} 
} 

, пожалуйста, помогите.

ответ

0

1- Не определяйте свои функции обратного вызова внутри цикла.

2- Переменный ответ не является глобальным. Вы можете использовать setappdata для установки переменной ответа.

3- Ваш код отправляет переменный ответ как можно быстрее! не делайте этого, вы должны использовать sleep(TIME) в своем цикле while.

Если вам не нужна непрерывная потоковая передача данных, избегайте времени и вызывайте fprintf внутри обратных вызовов.

+0

MinaKamel Спасибо за вашу помощь, но вы имеете в виду, чтобы быть такой код: 'функция pushbutton1_Callback (hObject, eventdata, handle) setappdata (handleles.pushbutton1, 'Forward', 1) answer = getappdata (handleles.pushbutton1, 'Forward'); функция pushbutton2_Callback (hObject, данныеСобытия, ручки) setappdata (handles.pushbutton2, 'назад', 2) ответ = getappdata (handles.pushbutton2, 'назад'); при ответе fprintf (arduino, '% s', char (ответ)); % отправить текст переменной ответа на arduino ответ; сон (1000); конец' –

0

MinaKamel Спасибо за вашу помощь, но вы имеете в виду, чтобы быть такой код:

function pushbutton1_Callback(hObject, eventdata, handles) 


setappdata(handles.pushbutton1,'Forward',1) 


answer=getappdata(handles.pushbutton1,'Forward'); 


function pushbutton2_Callback(hObject, eventdata, handles) 


setappdata(handles.pushbutton2,'Backward',2) 


answer=getappdata(handles.pushbutton2,'Backward'); 


while answer 

fprintf(arduino,'%s',char(answer)); % send answer variable content to arduino 

answer ; 

sleep(1000) ; 


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