gpt4 book ai didi

c - 在 Arduino 上每 y 秒执行一次函数 x 秒

转载 作者:行者123 更新时间:2023-12-05 01:29:05 28 4
gpt4 key购买 nike

我想在 Arduino 上每 Y 秒执行一次 X 秒的函数。

我试图控制电阻以恒定速率(每分钟 1 摄氏度)加热一些水,所以我的想法是:我将测量它运行整整一分钟时的速率,然后我会将其调整到所需的速率。

假设它每分钟加热 5o 摄氏度,所以我想激活电阻 60/5 秒,但不是一下子,我想每 12 秒激活 1 秒电阻以保持速率不变无论如何(如果天太冷、太热、如果我更换设备等)

大家觉得这可能吗?如果没有,任何想法我怎样才能使它工作?我看到了 Timer.h 库,但它似乎没有解决我的问题 =/

在此先感谢,如果任何信息有用,请告诉我!

最佳答案

我认为最简单的方法是使用millis() 函数。这是一个示例,但这取决于您的控件的运行方式。

const int onTime=1000; // in ms
const int offTime=12000; // in ms
const int resistorPin=7; // Change as necessary
boolean currentlyOn=false;
unsigned long startTime;

void setup(){
pinMode(resistorPin,OUTPUT);
digitalWrite(resistorPin,LOW);
startTime=millis(); // Initialize
}

void loop(){
if (currentlyOn && millis()>startTime+onTime){ // Switch resistor off
digitalWrite(resistorPin,LOW);
currentlyOn=false;
startTime=millis(); // Reset timer
}
if (!currentlyOn && millis()>startTime+offTime){ // Switch resistor on
digitalWrite(resistorPin,HIGH);
currentlyOn=true;
startTime=millis(); // Reset timer
}
delay(10);
}

我不知道这是否会在控制温度方面起作用,因为我预计这会涉及显着的非线性,但至少电阻会做你想要的。如果您真的想控制温度,我建议您使用一个反馈回路,您可以在其中测量温度并进行相应调整(也许使用 PID Controller ?)。但这当然要复杂得多。

编辑:一些额外的想法:
我建议使用基于millis() 的方法的原因是因为它允许您在等待时执行其他代码,使其更加通用。但是如果你不需要它,你总是可以变得 super 简单并使用延迟():
void loop(){
digitalWrite(resistorPin,HIGH);
delay(onTime);
digitalWrite(resistorPin,LOW);
delay(offTime);
}

最后,您也可以将电阻器连接到 PWM 引脚并使用analogWrite() 代替,使电阻器始终处于低电平激活状态。

关于c - 在 Arduino 上每 y 秒执行一次函数 x 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com