我有一个L476vg开发板,正在运行以下代码。我的目标是检测按钮的状态变化,但如果按住按钮,也不会导致LED闪烁。我下载了一些代码变体,但它们似乎都无法正常工作。有人可以指出如何修改以下代码,以便led可以在按下按钮时更改状态,而不会由于按住按钮而更改状态
#include "mbed.h"
DigitalOut myLed(LED1); //initializing the needed variable
and pins
DigitalIn myButton(USER_BUTTON);
int main() {
int myState = 0;
int count = 0;
int toggle = 0;
while (1){
if (myState != myButton){ //detect change of state
count ++; // if state has changed increment the count
myState != myState; // record the state change
toggle = count % 2; // determin the toggle direction
if (toggle != 0){ //read the toggle
myLed != myLed;} // if odd toggle the led
if (toggle = 0){
myLed = myLed; } // if even keep same state
else
myLed = myLed;
}
}
}
答案 0 :(得分:0)
我认为有关此代码有几点要指出:
myLed=myLed
之类的作业根本没有任何作用。如果不为变量分配新值,则它将保留其现有值。删除它们以使代码更清晰。bool
类型,但在C或C ++中没有真正的“布尔”(真/假)数据类型。一切都是数字。除非文档另有说明,否则无法保证myButton
输入可以采用的两个值与您要设置的myState
的两个值相同。与其将myState
切换为myState=!myState
,还不如将其设置为使用例如来镜像输入变量的值,这样会更安全。 myState=myButton
。count
变量在做什么。您是否要仅检测按钮按下而不释放?如果是这样,最可靠的方法就是检查myButton
的值。=!
更改为!=
,但这是不正确的。 a=!b
赋予a
值为'not b
'(如果b
为true,则a
为false,反之亦然); a!=b
是一个比较,如果a
和b
不相等,则评估为true。如果您犯了这种错误,那么最好阅读更多有关基本C语法的信息。如果我正确理解了代码的意图,那么我的建议是:
DigitalOut myLed(LED1);
DigitalIn myButton(USER_BUTTON);
int main() {
int myState = 0;
while (1) {
if (myState != myButton) { // detect change of state
myState = myButton; // record the state change
if (myButton) { // if the button is down,
myLed = !myLed; // toggle the led
}
}
}
(尽管由于您在这方面的问题不清楚,我可能误解了您的要求。)