我的项目是关于制造旋涂机。基本上是一种使用离心机来覆盖微厚度基板的机器。无论如何,对于这个项目,它需要我键入电机用于旋转基板的时间和速度。然后读取电机的转速,并重新启动新的会话。我现在的问题是,如何在使用传感器读取转速的同时运行电机。让我来看看这台机器的过程,
步骤1:设置电机速度(使用伺服值103-180)和电机定时秒(电机需要旋转多长时间)。
在此步骤中,有3个阶段的速度和时间设置。我需要使用键盘键入这个阶段的速度和时间。
步骤2:旋转电机和转速测量读数
对于此步骤,速度和时间的值将变为整数。这允许电动机根据给定的时间旋转。同时,当电机旋转时,转速测量也开始,读取电机的转速并显示在LCD屏幕上。
步骤3:电机停止并重复步骤1
这是我的问题,如何在转速读取时让电机旋转?我可以用单线程还是多线程(希望在多线程中获胜,仍然是arduino的初学者)
答案 0 :(得分:3)
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一次只做一件事。