用户工具

站点工具


ocrobot:alpha:kitone:tutorial09

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
ocrobot:alpha:kitone:tutorial09 [2019/07/15 02:30] 董凯萍ocrobot:alpha:kitone:tutorial09 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +~~NOTOC~~
 +====== Blink Without Delay(不使用delay来使LED闪烁) ======
  
 +<WRAP left round info 100%>
 +这个例子里你会学到怎么设置一个类似的计时器。
 +</WRAP>
 +有时候你需要同时做两件事,比如读取按键信息的同时想点亮熄灭一个LED,在这种情况下,你可能不会想去用[[reference:language:delay|delay()]]函数,因为使用[[reference:language:delay|delay()]]的时候会中断你的控制器其他工作。如果控制器执行delay的时候你按下了按键,这样就会错过按键按下的信息。
 +
 +这个例程教你不用[[reference:language:delay|delay()]]来使一个LED闪烁。点亮LED后记录时间。在[[reference:language:loop|loop()]]中,它会检测需要点亮的LED的时间是否到了。如果到了,就触发点亮或者熄灭LED,重新记录时间,这样LED就可以持续的闪烁。
 +
 +类似的就像你在微波炉里做披萨,同时等着接收重要的邮件。你把披萨放在微波炉,设置10分钟,同样的[[reference:language:delay|delay()]]就是设置一个十分钟的计时器直到微波炉到0,如果重要的邮件在此之间来了,你就错过了这个邮件。
 +
 +你再真实世界里要做的就是放好披萨,检查邮件,还可以去做一些其他的不太占用很多时间的事,然后你再回来看微波炉是否到0了,到了0就表明披萨做好了。
 +
 +
 +
 +===== ALPHA MEGA328-U核心 =====
 +==== 硬件 ====
 +
 +  * [[ocrobot:alpha:parallelexpansion:index|ALPHA 并行扩展板]]
 +  * [[ocrobot:alpha:mega328-u:main|ALPHA MEGA328-U]]
 +  * [[ocrobot:alpha:11led:index|ALPHA 11 LED模块]]
 +
 +
 +==== 搭建电路 ====
 +
 +  - ALPHA 11 LED模块插入并行扩展版1号槽位。
 +  - ALPHA MEGA328-U模块插入并行扩展板2号槽位。
 +  - USB线连接计算机与ALPHA MEGA328-U。
 +{{ocrobot:alpha:kitone:led435.png?nolink|}}
 +==== 代码 ====
 +
 +<code cpp>
 +/* Blink without Delay
 +  不使用delay函数来使一个连接在数字口的LED闪烁,这意味着别的代码可以同时执行,而不会被LED的代码打断。
 +*/
 +
 +const int ledPin =  2;           // 设置LED的引脚
 +
 +int ledState = LOW;              // 设置 LED状态
 +long previousMillis = 0;        // 存储上一次LED状态改变的时间
 +
 +long interval = 1000;           // 设置间隔时间为1000毫秒
 +// 下面的变量是长整形,因为以毫秒为单位测量的时间会快速地变成一个更大的,整形无法存储的数字。
 +
 +void setup() {
 +  pinMode(ledPin, OUTPUT);       // 设置数字口输出
 +}
 +
 +void loop() {
 +  unsigned long currentMillis = millis();   // 检查是否到了亮灭灯的时间,也就是,如果现在和上一次亮灭灯的时间差比你设置的间隔时间大
 +  if (currentMillis - previousMillis > interval) {
 +    previousMillis = currentMillis;       // 保存最后一次亮灯的时间
 +    if (ledState == LOW)      // 如果LED灭了就点亮它 ,反之亦然:
 +      ledState = HIGH;
 +    else
 +      ledState = LOW;
 +    digitalWrite(ledPin, ledState); // 设置变量ledState为LED数字输入:
 +  }
 +}
 +</code>
 +
 +<WRAP left round tip 100%>
 +这个例子中我们使用了一个新函数:[[reference:language:millis|millis()]]。该函数返回[[knowledge:electronic:mcu|MCU]]运行当前程序从开始到现在的毫秒数。这个返回值大概在五十天之后会溢出(归零)。
 +</WRAP>
 +
 +[[ocrobot:alpha:kitone:main|返回上一级]]
ocrobot/alpha/kitone/tutorial09.txt · 最后更改: 2023/06/07 04:23 由 127.0.0.1