我正在使用MATLAB GUI进行远程控制 但我没有MATLAB的经验 这是代码,但没有实现:
1- arduino code(发射器):
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 Code&#34;这里的问题&#34; :
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 :(得分:0)
1-不要在循环中定义回调函数。
2-变量答案不是全局的。您可以使用setappdata
设置答案变量。
3-您的代码正在尽快发送变量答案!不要这样做,你必须在你的while循环中使用sleep(TIME)
。
如果您不需要连续数据流,请避免使用while并在回调中调用fprintf。
答案 1 :(得分: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