我正在尝试用Arduino uno,传感器,LED和WiFi屏蔽做项目。我正在Arduino uno中对传感器数据进行模拟输入。如果传感器值超过阈值水平,基本程序会点亮LED。这个程序运行正常。现在,我希望借助WiFi shield将输入数据上传到Google电子表格。安装WiFi防护罩后,基本功能甚至无法执行。因此,我想知道Arduino微控制器是否支持同时访问两个硬件级组件?
答案 0 :(得分:2)
https://arduino.stackexchange.com/a/288
来自protothreads网站的例子:Protothreads是非常轻量级的无堆栈线程 严重的内存受限系统,如小型嵌入式系统或 无线传感器网络节点。 Protothreads提供线性代码 在C语言中实现的事件驱动系统的执行.Protothreads可以 与或不与底层操作系统一起使用 阻止事件处理程序。 Protothreads提供顺序流动 控制没有复杂的状态机或完整的多线程。
#include "pt.h"
struct pt pt;
struct timer timer;
PT_THREAD(example(struct pt *pt))
{
PT_BEGIN(pt);
while(1) {
if(initiate_io()) {
timer_start(&timer);
PT_WAIT_UNTIL(pt,
io_completed() ||
timer_expired(&timer));
read_data();
}
}
PT_END(pt);
}
但是永远不会在任何高效代码中使用while(1)
,这会在某些时候锁定你的arduino - 而是创建一个合理的健全性检查并将其放入loopheader,甚至可能放一个IO检查那里你可以通过一个硬件按钮停止程序 - 这不仅是一个很酷的功能,而且还有一些人称之为"良好的编码"
答案 1 :(得分:1)
Arduino UNO微控制器(ATmega328)完全具备多任务处理能力,但这需要脱离Arduino"草图"传统上是结构化的。有许多可能的方法,例如事件驱动编程或甚至传统的抢占式实时内核(RTOS)。我建议看看事件驱动的编程。例如,在Arduino Playground上,你可以找到一个项目" Arduino的QP状态机框架" (见http://playground.arduino.cc/Code/QP)。其中,该项目引用了一个应用笔记:"事件驱动的Arduino编程"在http://www.state-machine.com/arduino/AN_Event-Driven_Arduino-1.5.x.pdf