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上沒有線程。 –