Arduino没有线程。线程通常是操作系统的一个功能。使用Arduino,您没有经典意义上的操作系统。 你的代码,包括它使用的库,直接在硬件上运行。
该系统已设置,以便您的loop
函数将被重复调用。一次做多件事的通常方式(如控制电机速度,读取传感器和更新显示器)是在循环过程中完成一些任务。在伪代码,可能是这样的:
void loop() {
int rpm = read_rpm_from_sensor();
adjust_motor_timing(rpm, target_rpm);
display_speed(rpm);
}
好像你也有阶段:初始化阶段用户在其中输入值,运行阶段和完成阶段。你可以通过使用一个全局的“状态”变量来处理这些变量,这个变量跟踪你所处的阶段。你在setup()中初始化你的状态,然后在循环()中读取它以决定你需要做什么工作。
enum { enter_values, run, finish } state;
void setup() {
// your other initialization goes here
state = enter_values; // set up the starting state
}
void loop() {
switch (state) {
case enter_values:
get_values_from_keyboard();
state = run;
break;
case run:
int rpm = read_rpm_from_sensor();
adjust_motor_timing(rpm, target_rpm);
display_speed(rpm);
if (enough time has elapsed) {
state = finish;
}
break;
case finish:
stop_motor();
// go back to the initial state for the next run
state = enter_values;
break;
}
}
这应该给你一个一般结构的想法。
对于某些需要非常精确定时的传感器和外围设备,您可能会使用直接处理硬件的中断。但是,这是一个非常相似的想法:你需要将你需要做的工作分解成非常小的块,你可以一遍又一遍地做。唯一改变的是中断可能会(简要地)中断你正在做的任何事情。但CPU一次只能做一件事。
Arduino上没有线程。 –