好的,我最近开始了Arduino的编程,目前我有基本的闪烁功能,以及一个RGB LED程序,它可以将LED在褪色时转换为蓝色、绿色和红色。我有两个LED,一个简单而基本的黄色LED,它被认为是一个“工作状态”的指示器。和一个RGB的LED。现在,我希望RGB one能够正常地通过它的颜色转换,尽管我想保持黄色LED的持续闪烁。如何编写代码以使两个进程可以同时运行?
发布于 2013-06-28 10:44:18
类似于:
int timekeeper=0;
while (1)
{
do_fade(timekeeper);
if (timekeeper%100==0) {
do_blink_off();
}
if (timekeeper%100==50) {
do_blink_on();
}
delay(10);
timekeeper++;
}这是根据记忆完成的,因此您的里程可能会有所不同。我已经将timekeeper传递给了do_fade(),这样您就可以计算出您在淡入淡出中走了多远。do_fade()将更新淡入淡出,然后立即返回。do_blink_on()和do_blink_off()是相似的-更改您需要更改的内容,然后返回。在本例中,do_fade()每10毫秒调用一次,do_blink_off()每秒调用一次,do_blink_on()调用1/2秒(因此,1/2秒,off,1/2秒,on,1/2秒...)
发布于 2013-06-28 21:13:11
AMADANON的答案是有效的,但是请记住,像这样做多个任务的首选方法是使用计时器中断。例如,如果您希望代码在淡入淡出后执行其他操作,这些其他函数的计时将干扰您的LED闪烁。为了解决这个问题,您可以使用Arduino中内置的计时器。
在后台,计时器开始计数,当计时器达到某个值时,它会重置计数器并触发中断服务例程,您可以在该例程中打开/关闭LED。
这里有一个关于用定时器中断闪烁发光二极管的教程:http://www.engblaze.com/microcontroller-tutorial-avr-and-arduino-timer-interrupts/
发布于 2020-04-04 10:36:36
尝试用于Arduino的RTOS。
您创建的任务是独立的循环。我使用它,它工作得很好。
https://create.arduino.cc/projecthub/feilipu/using-freertos-multi-tasking-in-arduino-ebc3cc
此外,我还建议在Arduino环境中使用PlatformIO。然后,您还可以通过库导入RTOS。
示例代码片段:
在设置中:
void TaskMotion( void *pvParameters ); // Senses input from the motion sensor和
xTaskCreate( // Create task
TaskMotion
, "Motion" // A name just for humans
, 12800 // Stack size
, NULL
, 1 // priority
, NULL );..。在Arduino循环下(只有延迟(1000);in):
// ╔╦╗╔═╗╔╦╗╦╔═╗╔╗╔ ╔═╗╔═╗╔╗╔╔═╗╔═╗╦═╗
// ║║║║ ║ ║ ║║ ║║║║ ╚═╗║╣ ║║║╚═╗║ ║╠╦╝
// ╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝ ╚═╝╚═╝╝╚╝╚═╝╚═╝╩╚═
void TaskMotion(void *pvParameters) // This is a task.
{
(void) pvParameters;
// initialize stuff.
for (;;) // A Task shall never return or exit.
{
Serial.println("TEST MOTION");
delay(10000);
}
}复制粘贴并将"TaskMotion“更改为"LED”。您可以根据需要创建任意多个任务。RTOS管理每个任务。例如,如果一个任务有延迟( 10 ),那么接下来的10毫秒将用于另一个任务。
https://stackoverflow.com/questions/17356368
复制相似问题