如何在微控制器按钮上使while循环更快?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在微控制器按钮上使while循环更快?相关的知识,希望对你有一定的参考价值。

我正在使用带有按钮A的微控制器。按住此按钮2秒钟,其值将变为0,并且颜色变为蓝色或绿色,当我松开时,其值将返回1。但是除非再次单击并更改颜色,否则颜色保持不变。问题是,不必花2秒钟的时间去更换led灯。如何使值(0或1)的读取速度更快?

这是while循环中的代码片段。


// here are the states for reference. Everything is either a 0 or a 1
const int BUTTON_PRESSED = 0;
const int BUTTON_UNPRESSED = 1;

const int GREEN_LED = 0;
const int BLUE_LED = 1;

    const struct timespec sleepTime = { 1, 0 };

    while (true) {
        Value_Type value;
        // this function get the input of button a when pressed
        GetValue(button_A_fd, &value);
        Log_Debug(
           "Button value (%d)
", value);

        // Processing the button.

        //Turns LED ON; Button not pressed down
        if (value == BUTTON_UNPRESSED) {
            last_button_state = BUTTON_UNPRESSED;
        } else {

            // if last button state is 1 then now it is being pressed
            if (last_button_state == BUTTON_UNPRESSED) {
                // Flip LEDs
                if (active_led == BLUE_LED) {
                    active_led = GREEN_LED;
                }
                else if (active_led == GREEN_LED) {
                    active_led = BLUE_LED;
                }

                last_button_state = BUTTON_PRESSED;
                // sets the pointer to the 0 bit of the file to write
                lseek(fd_storage, 0, SEEK_SET);
                // write current active led to mutable storage and save
                write(fd_storage, &active_led, sizeof(active_led));
            }
        }
        // Blinking the active LED.
        // reading input only when pressed and turn off other led
        if (active_led == GREEN_LED) {
            // turn off blue led, then turn on green
            SetValue(blue_led_fd, Value_High);
            SetValue(green_led_fd, Value_Low);
            nanosleep(&sleepTime, NULL);
            SetValue(green_led_fd, Value_High);
            nanosleep(&sleepTime, NULL);
        }
        else if (active_led == BLUE_LED) {
            // turn off green led, then turn on blue
            SetValue(green_led_fd, Value_High);
            SetValue(blue_led_fd, Value_Low);
            nanosleep(&sleepTime, NULL);
            SetValue(blue_led_fd, Value_High);
            nanosleep(&sleepTime, NULL);
        }
    }
}



我试图将GetValue()放在代码的几个部分中,以查看它是否可以更快地获取值,但是不起作用。我怎么可以从这里搬走?我希望我共享了足够的代码来理解问题。谢谢。

答案

经过进一步检查,我发现了这些:enter image description here

以上是关于如何在微控制器按钮上使while循环更快?的主要内容,如果未能解决你的问题,请参考以下文章

Keil - 我的 while 循环不起作用

C# 中 XBOX 控制器的事件处理程序?

如何使循环计算更快

使用导航控制器按下后退按钮后如何防止前一个片段显示?

使用导航控制器按下后退按钮后,如何防止先前的片段出现?

如何在移动视图上使输入和按钮堆栈相互叠加