首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用MATLAB中的计时器提取系统时间

利用MATLAB中的计时器提取系统时间
EN

Stack Overflow用户
提问于 2013-07-31 20:36:25
回答 1查看 1.5K关注 0票数 0

我正在用MATLAB设计一个模拟时钟。目前,我的代码只是用手(小时、分钟、秒)显示时钟设计(或者更确切地说是显示情节),而不是勾选。这是我的代码:

代码语言:javascript
复制
function raviClock(h,m,s)
drawClockFace;


%TIMER begins-------
t = timer;
t.ExecutionMode = 'FixedSpacing';  %Use one of the repeating modes
t.Period = 1;                      %Fire on 1 second intervals
t.TimerFcn = @timer_setup;           %When fired, call this function
start(t);
set(gcf,'DeleteFcn',@(~,~)stop(t));
end

function timer_setup(varargin)

format shortg;
timenow = clock;
h = timenow(4);
m = timenow(5);
s = timenow(6);

% hour hand
hours= h + m/60 + s/3600;
hourAngle= 90 - hours*(360/12);

% compute coordinates for pointing end of hour hand and draw it
[xhour, yhour]= polar2xy(0.6, hourAngle);
plot([0 xhour], [0 yhour], 'k-','linewidth',7.4)

% minute hand
mins= m + s/60;
minsAngle= 90 - mins*(360/60);

% compute coordinates for pointing end of minute hand and draw it
[xmins, ymins]= polar2xy(0.75, minsAngle);
plot([0 xmins], [0 ymins], 'r-','linewidth',4)


%second's hand
second = s;
secAngle = 90- second*(360/60);

[xsec, ysec]= polar2xy(0.85, secAngle);
plot([0 xsec], [0 ysec], 'm:','linewidth',2)
%end   % while ends
end

%--------------------------------------------------------

function drawClockFace

%close all          
axis([-1.2 1.2 -1.2 1.2])  
axis square equal
hold on            


theta= 0;
for k= 0:59
    [xX,yY]= polar2xy(1.05,theta);
        plot(xX,yY,'k*')

        [x,y]= polar2xy(0.9,theta);
    if ( mod(k,5)==0 )  % hour mark
        plot(x,y,'<')
    else                % minute mark
        plot(x,y,'r*')
    end
    theta= theta + 360/60;
    end
end

%-----------------------------------------------------------------
function [x, y] = polar2xy(r,theta)

rads= theta*pi/180;  
x= r*cos(rads);
y= r*sin(rads);
end

这只是为最初调用函数时的小时、分钟和第二个参数获取值的静态数据。我尝试在much循环中使用下面的内容,但没有多大帮助

代码语言:javascript
复制
format shortg
c=clock
clockData = fix(c)
h = clockData(4)
m = clockData(5)
s = clockData(6)

并将h,m和s传递给各自的楔形。我想知道如何使用计时器指令和回调来提取小时分钟秒的信息,以便在时钟滴答时实时计算各个点的协调。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-31 21:17:05

我会在这里做几件事。

首先,如果要显示当前时间,您可能实际上不需要传递hms输入。将其添加到函数的顶部以自动设置这些变量。

代码语言:javascript
复制
if nargin == 0
    [~,~,~,h,m,s] = datevec(now);
end

然后,很容易使用时间来定期调用此函数。就像这样。

代码语言:javascript
复制
t = timer;
t.ExecutionMode = 'FixedSpacing';  %Use one of the repeating modes
t.Period = 1;                      %Fire on 1 second intervals
t.TimerFcn = @(~,~)raviClock;      %When fired, call this function (ignoring 2 inputs)
start(t);                          %GO!

使用docsearch timer对timer对象进行深入的文档化。但是上面的代码会让你开始。

要停止计时器,请运行

代码语言:javascript
复制
stop(t);

若要在窗口关闭时停止计时器,请将停止命令放入窗口删除回调中:

代码语言:javascript
复制
set(gcf,'DeleteFcn',@(~,~)stop(t));  %NOte:  Better to explicitly use a figure number, rather than gcf.
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17980481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档