Arduino 同时运行两个函数

Arduino 同时运行两个函数,arduino,Arduino,该程序是一个简单的程序,设计用于在串行监视器上同时绘制您的和Uc。Arduino运行第一个for循环并绘制F1函数,然后对F2执行相同的操作。我的目标是同时绘制它们 我的想法是实际花费一小部分时间,比如说10毫秒,绘制F1图,接下来10毫秒绘制F2图,但我不知道如何写下来。我认为millis函数是解决方案,但我不太确定如何实现它 const short int R=5000; 常数浮点数C=0.0005; 常数浮点数TE=0.1; 常数浮点Tau=R*C; const short int E=5

该程序是一个简单的程序,设计用于在串行监视器上同时绘制您的和Uc。Arduino运行第一个for循环并绘制F1函数,然后对F2执行相同的操作。我的目标是同时绘制它们

我的想法是实际花费一小部分时间,比如说10毫秒,绘制F1图,接下来10毫秒绘制F2图,但我不知道如何写下来。我认为millis函数是解决方案,但我不太确定如何实现它

const short int R=5000; 常数浮点数C=0.0005; 常数浮点数TE=0.1; 常数浮点Tau=R*C; const short int E=5; 浮子t、Tinit、Tfin; 无效设置{ //将安装代码放在此处,以便运行一次: Serial.begin9600; } 空穴环{ //F1 对于t=0;t可以用来解决您的问题。它有大量的文档,它被广泛用于非官方的图书馆。 试试看

如果您看到以下内容,您将很容易做到:

线程实例示例 回调示例 这辆车还是有问题的,但我想它会有帮助的 如果你想在没有库的情况下完成,那么你需要创建两个没有循环的函数

void f1()
{
  float Ur = E*exp(-t/Tau);
  Serial.println (Ur);
}

void f2()
{
  float Uc = E*(1-exp(-t/Tau));
  Serial.println (Uc);
}
现在,在void循环中,您可以实现线程的基本逻辑,这将非常粗糙,但满足您的需求。例如:

void loop() {
unsigned long now = millis();

static unsigned long last_finger_update;
if (now - last_finger_update >= FINGER_UPDATE_PERIOD) {
    last_finger_update = now;
    f1();
}


static unsigned long last_wrist_update;
if (now - last_wrist_update >= WRIST_UPDATE_PERIOD) {
    last_wrist_update = now;
    f2();
}
}
您必须声明两个变量

const unsigned long FINGER_UPDATE_PERIOD = 1000;
const unsigned long WRIST_UPDATE_PERIOD  = 1000;

所有时间单位均以毫秒为单位。从internet收集。最确定的处理方法是:

for (t = 0; t <= 20; t = t + TE) {
    float Ur = E*exp(-t/Tau);
    float Uc = E*(1-exp(-t/Tau));
    Serial.println (Ur);
    Serial.println (Uc);
}

你可以很容易地做到这一点,如果你在MCU中运行RTOS,因为你知道其他解决方案也将是顺序的


我一直在使用TridentTD_EasyFreeRTOS库,它有一种简单的方法,可以拥有多个任务并在不同的草图文件中控制它们。

我忘了提到我不能使用任何其他库。我已经更新了答案,请看,我想这将对您有好处。这如何避免常见的线程问题,如资源匮乏?它似乎是一个不必要的复杂解决方案。它不必要地复杂,但没有库,我没有其他方法:悲伤:那么…为什么不把你的行分散到一个循环中呢?将来,请记住这个网站:
while (true) {
    task_one();
    task_two();
}