c - 如何使用Arduino测量10秒内的电压?

标签 c time arduino

我正在构建一个测量组件(光电开关)电压的程序。当电位低于5V时,灯就会亮。

但我的问题是,如果电压低于 5 V 持续 10 秒或更长时间,我希望 Arduino 打开灯。例如,如果电压电平低于 5 V 持续 8 秒,然后再次变为高于 5 V,则灯不应亮起。

这是迄今为止我的代码:

int Pin = 2;
const float baselineVoltage = 5.0;

void setup() {
    Serial.begin(9600);
    pinMode(Pin,OUTPUT);
}

void loop() {
    int sensorValue = analogRead(A0);
    float voltage = sensorValue * (5.0 / 1023.0);
    Serial.println(voltage);
    if(voltage < baselineVoltage){
        digitalWrite(2,HIGH);
   }
delay(10);
}

最佳答案

我相信这样的方法可以解决您的 10 秒延迟问题。如果您想要同样的 10 秒延迟来将其关闭,则需要执行类似的操作。

int Pin = 2;
const float baselineVoltage = 5.0;
int belowBaselineVoltage = false;
unsigned long turnOnAt;
const unsigned long turnOnDelay = 10 * 1000;

void setup() {
    Serial.begin(9600);
    pinMode(Pin, OUTPUT);
}

void loop() {
    int sensorValue = analogRead(A0);
    float voltage = sensorValue * (5.0 / 1023.0);
    Serial.println(voltage);

    if (voltage < baselineVoltage)
    {
        if (belowBaselineVoltage == true)
        {
            if (millis() >= turnOnAt)
            {
                digitalWrite(2, HIGH);
            }
        }
        else
        {
            belowBaselineVoltage = true;
            turnOnAt = millis() + turnOnDelay;
        }
    }
    else
    {
        belowBaselineVoltage = false;
    }
}

关于c - 如何使用Arduino测量10秒内的电压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050119/

相关文章:

c - 如何在open mp的for循环中解析 "return 0 or return 1"?

c - Arduino 功能几乎相同但输出却大相径庭

使用 C : mocking nested function calls 进行 Cmocka 单元测试

c - 多线程和 CPU 缓存

c - 通过 libCurl 发送电子邮件 (C)

java - 在java中持续跟踪时间

ios - 10 分钟后重置 Swift 应用程序

C# 时间戳问题

c++ - Arduino C++:从外部类创建对象

c++ - Arduino Nano 33 物联网软件序列号