سلام.من ميخوام توسط gui متلب و پورت سريال، يك رشته رو به ميكرو ارسال كنم و توسط اون رشته يك موتور پله اي رو كنترل كنم.اگر رشته مذكور رو در ترمينال متلب بنويسم موتور كار ميكنه البته پس از زدن كليد اينتر ،اما توي متلب نمي دونم اين \n رو كدوم قسمت fprintf قرار بدم تا كار كنه البته وقتي اجرا مي كنم خطا ندارم و رشته ايجاد شده رو مي بينم اما موتور حركت نميكنه اينگار چيزي به پورت سريال ارسال نميشه اينم برنامه بنظرتون مشكل از كجاست؟
ممنون
کد:
function n1_Callback(hObject, eventdata, handles)
% hObject handle to n1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
spee=get(handles.s1,'String');
stardeg=get(handles.sd1,'String');
stopdeg=get(handles.sd2,'String');
rotd=get(handles.rd,'Value');
y4=num2str(rotd);
s=strcat('#',',',spee,',',stardeg,',',stopdeg,',',y4,',',':')
m=serial('com1','baudrate',9600,'databits',8);
fopen(m);
fprintf(m,'%s',s,'\n');
fclose(m);
delete(m);
(۲۴-شهریور-۱۳۹۰, ۰۰:۲۶:۴۴)leila.66 نوشته است: [ -> ]سلام.من ميخوام توسط gui متلب و پورت سريال، يك رشته رو به ميكرو ارسال كنم و توسط اون رشته يك موتور پله اي رو كنترل كنم.اگر رشته مذكور رو در ترمينال متلب بنويسم موتور كار ميكنه البته پس از زدن كليد اينتر ،اما توي متلب نمي دونم اين \n رو كدوم قسمت fprintf قرار بدم تا كار كنه البته وقتي اجرا مي كنم خطا ندارم و رشته ايجاد شده رو مي بينم اما موتور حركت نميكنه اينگار چيزي به پورت سريال ارسال نميشه اينم برنامه بنظرتون مشكل از كجاست؟
سلام
فكر كنم اگه به اين صورت تغيير بدي درس بشه:
(۲۴-شهریور-۱۳۹۰, ۱۰:۲۹:۰۶)علي برقي نوشته است: [ -> ] (۲۴-شهریور-۱۳۹۰, ۰۰:۲۶:۴۴)leila.66 نوشته است: [ -> ]سلام.من ميخوام توسط gui متلب و پورت سريال، يك رشته رو به ميكرو ارسال كنم و توسط اون رشته يك موتور پله اي رو كنترل كنم.اگر رشته مذكور رو در ترمينال متلب بنويسم موتور كار ميكنه البته پس از زدن كليد اينتر ،اما توي متلب نمي دونم اين \n رو كدوم قسمت fprintf قرار بدم تا كار كنه البته وقتي اجرا مي كنم خطا ندارم و رشته ايجاد شده رو مي بينم اما موتور حركت نميكنه اينگار چيزي به پورت سريال ارسال نميشه اينم برنامه بنظرتون مشكل از كجاست؟
ممنون
function n1_Callback(hObject, eventdata, handles)
% hObject handle to n1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
spee=get(handles.s1,'String');
stardeg=get(handles.sd1,'String');
stopdeg=get(handles.sd2,'String');
rotd=get(handles.rd,'Value');
y4=num2str(rotd);
s=strcat('#',',',spee,',',stardeg,',',stopdeg,',',y4,',',':')
m=serial('com1','baudrate',9600,'databits',8);
fopen(m);
fprintf(m,'%s',s,'\n');
fclose(m);
delete(m);
سلام
فكر كنم اگه به اين صورت تغيير بدي درس بشه:
ممنون.رشته ايجاد مي شه اما چيزي به پور ارسال نميشه يا حداقل موتور حركت نمي كنه
کد:
s=strcat('#',',',spee,',',stardeg,',',stopdeg,',',y4,',',':');
در مورد ارسال نشودن اطلاعات شما به پورت
(۲۴-شهریور-۱۳۹۰, ۱۳:۰۷:۳۳)h0x00i نوشته است: [ -> ]کد:
s=strcat('#',',',spee,',',stardeg,',',stopdeg,',',y4,',',':');
در مورد ارسال نشودن اطلاعات شما به پورت
ممنون اما وقتي ; آخر دستور strcat ميذارم كلي ارور ميده و ومن درست دليل استفاده از fprintf(m,'#!\r',s);
نفهميدم و امتحانش كردم اما باز جواب نداد و اين خطاها رو داد.
??? Error using ==> serial.fopen at 72
Port: COM1 is not available. Available ports: COM2,
COM3.
Use INSTRFIND to determine if other instrument
objects are connected to the requested device.
Error in ==> gu11>n1_Callback at 184
fopen(m);
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> gu11 at 42
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)gu11('n1_Callback',hObject,eventdata,guidata(hObject))
??? Error while evaluating uicontrol Callback
گاهی وقتا که برنامه مشکل داره ونیم کاره باز اجرا میشه این اشکال پیش میاد بهتره برنامه رو اصلاح کنی بعد متلب ببندی دوباره باز کنی
(۲۴-شهریور-۱۳۹۰, ۲۱:۲۸:۳۴)h0x00i نوشته است: [ -> ]گاهی وقتا که برنامه مشکل داره ونیم کاره باز اجرا میشه این اشکال پیش میاد بهتره برنامه رو اصلاح کنی بعد متلب ببندی دوباره باز کنی
من هنوزم اینگار نمیتونم رشته رو بفرستم .یه کدم برا دریافت نوشتم ولی ارور time out میده و بعدم رشته رو خالی دریافت میکنه
a=' '
(۲۹-شهریور-۱۳۹۰, ۲۳:۵۶:۱۶)leila.66 نوشته است: [ -> ]من هنوزم اینگار نمیتونم رشته رو بفرستم .یه کدم برا دریافت نوشتم ولی ارور time out میده و بعدم رشته رو خالی دریافت میکنه
a=' '
سلام
پيشنهاد ميكنم به دستور سريالت يه timeout هم اضافه كني:
کد:
m=serial('COM1','BaudRate',9600,'DataBits',8,'Timeout',10);
timeout زمان نوشتن برای اینکه عملکرد خواندن و یا نوشتن کامل شود را مشخص می کند .
در مورد دريافت بايد بگم كه ميكرو كنترلر Terminator ارسال نمي كنه لذا متلب اونو تشخيص نمي ده و پيام زير را مي دهد:
Warning: A timeout occurred before the Terminator was reached.
براي رفع اين مشكل بايد يه ترمينيتور خالي رو تعريف كني :
کد:
set ( m , 'Terminator' , ' ' )
(۳۰-شهریور-۱۳۹۰, ۰۰:۱۴:۴۴)علي برقي نوشته است: [ -> ] (۲۹-شهریور-۱۳۹۰, ۲۳:۵۶:۱۶)leila.66 نوشته است: [ -> ]من هنوزم اینگار نمیتونم رشته رو بفرستم .یه کدم برا دریافت نوشتم ولی ارور time out میده و بعدم رشته رو خالی دریافت میکنه
a=' '
سلام
پيشنهاد ميكنم به دستور سريالت يه timeout هم اضافه كني:
کد:
m=serial('COM1','BaudRate',9600,'DataBits',8,'Timeout',10);
timeout زمان نوشتن برای اینکه عملکرد خواندن و یا نوشتن کامل شود را مشخص می کند .
در مورد دريافت بايد بگم كه ميكرو كنترلر Terminator ارسال نمي كنه لذا متلب اونو تشخيص نمي ده و پيام زير را مي دهد:
Warning: A timeout occurred before the Terminator was reached.
براي رفع اين مشكل بايد يه ترمينيتور خالي رو تعريف كني :
کد:
set ( m , 'Terminator' , ' ' )
سلام من هم همین مشکل دارم وقتی میخواهم کارکتر دریافت کنم مینویسه
Warning: Unexpected Warning: The input buffer was filled before the
Terminator was reached
ترمیناتور خالی تعریف کردم ولی مشکل رفع نشد راهی دیگه ای برای رفع این مشکل نمیدونید؟با تشکر