c - Arduino 创建延迟函数

标签 c time arduino

我正在尝试制作自己的延迟函数。简而言之,mydelay 函数每 secs 秒调用一次 toggled 函数。我知道代码写得不好(这是第一个版本)。但我只是想让它正常工作。然后我会重构它。但是我有一些意想不到的错误。 x 函数中的循环第一次正常工作。它打印“I am in while”1 秒,然后打印“Im ending mydelay”,这是我想要的行为。但是在完成 x 中的循环之后。第二次循环时。它进入 mydelay 函数(没问题)。但是它根本就不会打印“我在一段时间内”。它只是打印“Im ending mydelay”,这是不好的。

代码如下:

#include <Arduino.h>
int led = 7;
void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  x();
  Serial.println("Im ending main loop");
}

void x() {
  for (int i = 0; i <= 10; i++) {
    mydelay(led, 0, 1);
    mydelay(led, 1, 1);
  }
}

void mydelay(int pin, int hol, int secs) {
  int starttime = millis();
  while ((millis() - starttime) <= (secs * 1000)) Serial.println("I am in while");
  toggled(pin, hol);
  Serial.println("Im ending mydelay");
}

void toggled(int pin, int hol) {
  digitalWrite(led, hol);
}

最佳答案

int starttime = millis(); 更改为 unsigned long starttime = millis();。这可能就是问题所在,因为如果您使用int,您的程序将在 32 秒后变得疯狂。这是一个问题,因为 int 只能保存从 -32,768 到 32,767 的数字。

另外,你不妨试试这个:

while ((millis() - starttime) <= (secs * 1000))
{
  Serial.println("I am in while");
}

关于c - Arduino 创建延迟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40533507/

相关文章:

c - 在函数中将数组声明为静态的目的是什么?

time - 在科学集群上使用并行处理时 $time 意味着什么?

今天在 sql 数据库中的 Java INSERT

c++ - 两位数月份格式的Arduino打印

c++ - WiFiNINA 获取 JSON 数据时出现问题

arduino - 无法对 ESP8266 进行编程

c - 如果输出缓冲区有数据,调用 bufferevent_free 后会做什么?

c - 双链表查询

计算 C 程序中耗时(以毫秒为单位)

c - 试图理解 itoa 功能