乐鑫技术交流
直播中

刘高

10年用户 952经验值
擅长:嵌入式技术
私信 关注
[问答]

用Arduino编写ESP8266程序,定义某个IO为输入,另一个为输出为什么没效果?

用Arduino编写ESP8266程序,定义某个IO为输入,另一个为输出,为何没效果
以下是代码:
#define PIN_LED   16
#define PIN_IN 5

void setup()
{
pinMode(PIN_LED, OUTPUT);        //输出模式
pinMode(PIN_IN, INPUT);          //输入模式
digitalWrite(PIN_LED,HIGH);      //LED默认关闭
}

void loop()
{
  digitalRead(PIN_IN);
  if(PIN_IN)
  {
    digitalWrite(PIN_LED, LOW);    //打开LED     
  }
  else
  {
    digitalWrite(PIN_LED, HIGH);   //关闭LED
  }
}
上电后灯就常亮,给4脚置低后,灯依然亮着。模块是安信可的ESP-12F。请各位大佬指教。(4脚已经接了上拉)
                  

回帖(1)

美信电子

2024-6-22 15:30:39
根据您提供的代码片段,我将为您分析可能的问题,并提供一些建议来解决这个问题。

首先,让我们看一下您的代码:

```cpp
#define PIN_LED 16
#define PIN_IN 5

void setup() {
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED, HIGH); // LED默认关闭
  pinMode(PIN_IN, INPUT);
}

void loop() {
  digitalRead(PIN_IN);
  if(PIN_IN) {
    digitalWrite(PIN_LED, HIGH);
  } else {
    digitalWrite(PIN_LED, LOW);
  }
}
```

问题1:在`setup()`函数中,您首先设置了`PIN_LED`为输出模式,然后将其设置为高电平。接着,您设置了`PIN_IN`为输入模式。但是,您在设置`PIN_IN`为输入模式之前已经读取了它的状态。这可能导致`PIN_IN`的初始状态不正确。

解决方案:在`setup()`函数中,先设置`PIN_IN`为输入模式,然后再设置`PIN_LED`为输出模式。

修改后的`setup()`函数:

```cpp
void setup() {
  pinMode(PIN_IN, INPUT);
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED, HIGH); // LED默认关闭
}
```

问题2:在`loop()`函数中,您使用了`if(PIN_IN)`来判断`PIN_IN`的值。但是,`PIN_IN`是一个宏定义,而不是一个变量。您应该使用`digitalRead(PIN_IN)`来获取实际的输入值。

解决方案:使用`digitalRead(PIN_IN)`来获取`PIN_IN`的值,并用它来判断条件。

修改后的`loop()`函数:

```cpp
void loop() {
  int inputValue = digitalRead(PIN_IN);
  if(inputValue == HIGH) {
    digitalWrite(PIN_LED, HIGH);
  } else {
    digitalWrite(PIN_LED, LOW);
  }
}
```

综上所述,以下是修改后的完整代码:

```cpp
#define PIN_LED 16
#define PIN_IN 5

void setup() {
  pinMode(PIN_IN, INPUT);
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED, HIGH); // LED默认关闭
}

void loop() {
  int inputValue = digitalRead(PIN_IN);
  if(inputValue == HIGH) {
    digitalWrite(PIN_LED, HIGH);
  } else {
    digitalWrite(PIN_LED, LOW);
  }
}
```

这个代码应该可以正常工作,将LED的状态与`PIN_IN`的输入状态同步。如果仍然没有效果,请检查硬件连接是否正确,以及ESP8266模块是否正常工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分