LED 灯不闪烁并保持其他功能一秒钟

Led light not blinking and staying in other function for one second

我想弄清楚为什么我的 LED 灯不闪烁。我有另一个名为 Wakeablewait 的函数,它应该在 LED 打开或关闭时计算大约 1 秒。如果按钮在计时器爆发之前被点击,它 return false(尽管在更远的一点它会切换到另一个功能)。警告 LED 控制颜色输出。不知道我错过了什么。在日志语句中,它显示我一遍又一遍地输入这两个函数,但 LED 灯一直保持黄色(顺便说一下,我使用两个 LED 来制作黄色)。有人知道我错过了什么吗?

按下按钮在微控制器上等于 0,未按下时等于 1。

//This time spec is in nano seconds but equates to 10ms
const struct timespec sleepTime = { 0, 10000000 };

GPIO_Value_Type previous_button_value = BUTTON_UNPRESSED;

bool WakeableWait(int btnA, int milliseconds) {
    Log_Debug("In Wake\n");

    while (milliseconds > 0) {
        // Return true if full time elapsed, false if button was pressed
        GPIO_Value_Type value;
        GPIO_GetValue(btnA, &value);

        bool button_got_pressed = (previous_button_value == BUTTON_UNPRESSED) && (value == BUTTON_PRESSED);
        previous_button_value = value;

        if (button_got_pressed) {
            return false;
        }

        nanosleep(&sleepTime, NULL);
        milliseconds -= 10;

        return true;
    }

}
// This function should blink Yellow until button A is pressed to switch to typical working traffic light
void caution_light(int y1, int y2, int btnA) {
    //// This should blink on and off for one second
    while (true) {
        // Turn on Yellow
        GPIO_SetValue(y1, GPIO_Value_Low);
        GPIO_SetValue(y2, GPIO_Value_Low);

        // Switch to other function to wait time
        Log_Debug("Turning On\n");
        WakeableWait(btnA,1000);
 
        //Turn Led off
        GPIO_SetValue(y1, GPIO_Value_High);
        GPIO_SetValue(y2, GPIO_Value_High);

        // Leave to other function 
        Log_Debug("Turning Off\n");
        WakeableWait(btnA, 1000);
    }
}

Visual Studio 中的输出图像:

谢谢。

WakeableWait 不循环。无论如何,它只进行一次迭代,并且立即returns:return true; 语句是循环体的一部分。您的 LED 可能会以 100 Hz(每 10 毫秒)的频率闪烁,并且您的眼睛无法检测到它(您应该 看到的是 LED 比正常情况下更暗)。解决方案是将 return true; 拉出循环。

WakeableWait(....)
{
    while (milliseconds > 0) {
        ....
    }
    return true;
}