当我按下esp32上的启动按钮时,我试图打开LED(引脚2)!这是我的代码!知道为什么这不起作用吗?
// constants won't change. They're used here to set pin numbers:
const int buttonPin = 0; // the number of the pushbutton pin
const int ledPin = 2; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
答案 0 :(得分:1)
您的设计在多种方面存在致命缺陷,主要是在芯片启动时,I / O引脚不在您的代码控制之下,一旦检测到该信号,您的程序就会停止运行。重新启动会恢复其默认启动状态。此外,按钮输入肯定会受到中断的影响,您的轮询循环永远不会看到它变高。
如果你想在芯片启动时保持LED亮起,你需要另一个元件,比如JFET。将I / O引脚连接到JFET的栅极,将其源极和漏极引脚与LED的电源或接地极串联,然后在程序运行时将I / O引脚设置为高电平,以偏置JFET,从而保持源极和漏极之间的开路。一旦门变低,电路就会关闭,LED会亮起。当引导程序执行程序时,它会再次将该引脚设置为高电平,LED熄灭。作为奖励,您不需要浪费任何计算轮询i / o。赢:赢