Too many input arguments

匿名 (未验证) 提交于 2019-12-03 02:38:01

问题:

I get the following error message about too many input arguments in my fprintf function. But it seems to me that just the right amount of arguments were passed.

All this is in the context of a guide GUI I made (see picture at the end).

Error while evaluating uicontrol Callback  calibration button hit     20     200  10 10         2520         25197  2520 25197     'C0 2520 25197 10 10'  Error using serial/fprintf (line 115) Too many input arguments.  Error in UserInterface>StaticCalibrationBtn_Callback (line 202) fprintf(handles.s, 'C0 %s %s %s %s',StartStepsStr,EndStepsStr,Increment,Wait);  

Here is the code

function StaticCalibrationBtn_Callback(hObject, eventdata, handles)     % hObject    handle to StaticCalibrationBtn (see GCBO)     % eventdata  reserved - to be defined in a future version of MATLAB     % handles    structure with handles and user data (see GUIDATA)     disp('calibration button hit');     Start = str2double(get(handles.CalFromUserTxt, 'string')); % Fetches the user inputed start location in mm and converts to double     disp(Start);     End = str2double(get(handles.CalToUserTxt, 'string')); % same for End position     disp(End);     Increment = get(handles.CalUserIncrementTxt, 'string'); % fetches the increment user inputed data as a string     disp(Increment);     Wait = get(handles.CalUserSpeedTxt, 'string'); % fetches the wait inputed data as a string     disp(Wait);     StartSteps = round(Start/0.00793750000); % computes the starting step position,double division     disp(StartSteps);     handles.StartSteps = StartSteps; % creats a place for the start steps inside the handles structure, to be fetched by anythingelsest be saved with guidata(hObject,handles)     EndSteps = round(End/0.00793750000); % computes the end step position     disp(EndSteps);     handles.EndSteps = EndSteps; % stores the end steps to be accessed by anything else must be saved with guidata(hObject,handles)     StartStepsStr = num2str(StartSteps); % converts the StartSteps double into a string so it can be sent over serial as a string     disp(StartStepsStr);     EndStepsStr = num2str(EndSteps); % converts the EndSteps double into a string so it can be sent over serial as a string     disp(EndStepsStr);     OutputString = strcat('C0' , {' '} , StartStepsStr , {' '} , EndStepsStr , {' '} , Increment , {' '} , Wait);     disp(OutputString);     fprintf(handles.s, 'C0 %s %s %s %s',StartStepsStr,EndStepsStr,Increment,Wait); 

and where handles.s comes from

function SerialBtn_Callback(hObject, eventdata, handles) % hObject    handle to SerialBtn (see GCBO) % eventdata  reserved - to be defined in a future version of MATLAB % handles    structure with handles and user data (see GUIDATA comPort = get(handles.COMportTxt,'String'); if(~exist('serialFlag','var'))     [handles.s, handles.serialFlag] = setupSerial(comPort); end guidata(hObject,handles); end 

And the setupserial funciton

function [ s, flag] = setupSerial(comPort) %Initialize serial port communication between Arduino and Matlab %Ensure that the arduino is also communicating with Matlab at this time.  %if setup is complete then the value of setup is returned as 1 else 0.  flag =1; s = serial(comPort); set(s,'DataBits',8); set(s,'StopBits',1); set(s,'BaudRate',9600); set(s,'Parity','none'); fopen(s); a='b'; while (a~='a')     a=fread(s,1,'uchar'); end if (a=='a')     disp('serial read'); end fprintf(s,'%c','a'); mbox = msgbox('Serial Communication setup.'); uiwait(mbox); fscanf(s,'%u'); end 


USING THE FOLLOWING RESOLVED THE ISSUE

OutputString = sprintf('C0 %s %s %s %s',StartStepsStr,EndStepsStr,Increment,Wait); fprintf(handles.s,'%s', OutputString); 

回答1:

There are multiple functions called fprintf, one for files, one for serial objects and some others. You are using functionally which you know from the fprintf for files, but you are using it with a serial object. Check the right documentation which can be accessed via doc serial/fprintf



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!