ESP8266 D0 reste fermé

Bonsoir à tous et à toutes.
Après un sujet résolu sur la gestion des entées, je me vois confronté à autre chose.
Dans mon programme, j'utilise la PIN D0 comme une entrée. avec un poussoir et une résistance, je la connecte au GND, donc elle est à LOW, mais quand je relâche le poussoir, celle ci reste à LOW . Pourquoi? j'ai fait un petit bout de code pour tester D0, et le résultat est toujours le même.

const int ledPin = D3; // SORTIE 1
const int E4 = D0;

void setup() {
  pinMode(E4, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop() {
  if (digitalRead(E4)==LOW){
    Serial.println("D0");
    analogWrite(ledPin, 1023);
  }
  else {
    Serial.println("stop");
    analogWrite(ledPin, 0); 
  }
}

En cherchant sur le net, je ne trouve rien de probant.

Il n'y a pas de pullup interne sur D0. Il y a un pulldown et je te suggere de ne pas utiliser D0.

Bonsoir ZX80, AÏ, ça ne m’arrange pas, je n'ai plus que cette pin de libre sur un WEMOS D1 mini. Effectivement, je viens juste de voir qu'elle avait un PULLDOWN. j'ai essayer de m’en servir, mais cela provoque une erreur lors de la compilation.
'INPUT_PULLDOWN' was not declared in this scope

D3 et D4 sont occupés ?

Oui, elle sont occupées, ainsi que toutes les autres. en fait je dois réaliser un clignoteur avec ce shield, intégrant un RTC pour la gestion du lever et coucher du soleil. il y a aussi une roue codeuse câblée sur GND, D0,D5,D6 et D7. D3 et D4 sont paramétrées en sortie pour alimenter des leds.
Si vous voulez voir mon code, le voici:

#include "RTClib.h"
RTC_DS3231 rtc;

#include <sunset.h>
SunSet sun;

#include <Wire.h>

#define TIMEZONE 1
#define LATITUDE 48.856614
#define LONGITUDE 2.3522219

const int ledPin = D3; // SORTIE 1
const int E1 = D6;
const int E2 = D7;
const int E3 = D5;
const int E4 = D0;

int lum = 1023;

void setup() {
  pinMode(E1, INPUT_PULLUP);
  pinMode(E2, INPUT_PULLUP);
  pinMode(E3, INPUT_PULLUP);
  pinMode(E4, INPUT_PULLUP);

  Serial.begin(115200);
  Wire.begin();
  rtc.begin();
  rtc.adjust(DateTime(2022,02,19,18,9,0)); // année, mois, jour, heure, minute, seconde
  sun.setPosition(LATITUDE, LONGITUDE, TIMEZONE);
}

void loop() {
  
  //0,5s/1s
  if (digitalRead(E1)==LOW and digitalRead(E3)==LOW and digitalRead(E2)==HIGH and digitalRead(E4)==HIGH) {
    Serial.println("D6 et D5");
    analogWrite(ledPin, lum);
    delay(500);
    analogWrite(ledPin, 0);
    delay(1000);
  }
  // 0,1s/1,5s
  if (digitalRead(E1)==LOW and digitalRead(E2)==LOW and digitalRead(E3)==HIGH and digitalRead(E4)==HIGH) {
    Serial.println("D6 et D7");
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(1500);
  }
  // 0,1s/2s
  if (digitalRead(E2)==LOW and digitalRead(E3)==LOW and digitalRead(E1)==HIGH and digitalRead(E4)==HIGH) {
    Serial.println("D5 et D7");
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(2000);
  }
  // 1s/2s
  else if (digitalRead(E1)==LOW and digitalRead(E2)==HIGH and digitalRead(E3)==HIGH and digitalRead(E4)==HIGH) {
    Serial.println("D6");
    analogWrite(ledPin, lum);
    delay(1000);
    analogWrite(ledPin, 0);
    delay(2000);
  }
  // 0,5s/0,5s
  else if (digitalRead(E3)==LOW and digitalRead(E1)==HIGH and digitalRead(E2)==HIGH and digitalRead(E4)==HIGH) {
    Serial.println("D5");
    analogWrite(ledPin, lum);
    delay(500);
    analogWrite(ledPin, 0);
    delay(500);
  }
  // 01s/1s
  else if (digitalRead(E2)==LOW and digitalRead(E1)==HIGH and digitalRead(E3)==HIGH and digitalRead(E4)==HIGH){
    Serial.println("D7");
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(1000);
  }
  // 1s/1s
  else if (digitalRead(E1)==HIGH and digitalRead(E2)==HIGH and digitalRead(E3)==HIGH and digitalRead(E4)==HIGH){
    Serial.println("AUCUNE ENTREE");
    analogWrite(ledPin, lum);
    delay(1000);
    analogWrite(ledPin, 0);
    delay(1000);
  }
  //0,1s x 2/1s
  if (digitalRead(E1)==LOW and digitalRead(E2)==LOW and digitalRead(E3)==LOW and digitalRead(E4)==HIGH) {
    Serial.println("D5 et D6 et D7");
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(50);
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(1000);
  }
  //0,1s x 2/1,5s
  if (digitalRead(E4)==LOW and digitalRead(E1)==HIGH and digitalRead(E2)==HIGH and digitalRead(E3)==HIGH) {
    Serial.println("D0");
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(50);
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(1500);
    pinMode(E4, INPUT_PULLUP);
  }
  //0,1s x 2/2s
  if (digitalRead(E1)==LOW and digitalRead(E4)==LOW and digitalRead(E2)==HIGH and digitalRead(E3)==HIGH) {
    Serial.println("D0 et D6");
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(50);
    analogWrite(ledPin, lum);
    delay(100);
    analogWrite(ledPin, 0);
    delay(2000);
  }
  //soleil();
}

void soleil() {
  
  DateTime now = rtc.now();
  sun.setCurrentDate(now.year(), now.month(), now.day());

  int sunrise = sun.calcSunrise();
  int sunset = sun.calcSunset();
  int c_time = now.hour() * 60 + now.minute();  

  if (c_time <= sunrise){
    Serial.println("nuit matin");
    lum = 30;
  }
  else if (c_time >= sunset){
    Serial.println("nuit soir");
    lum = 30;
  }
  else {
    Serial.println("jour");
    lum = 1023;
  }
  Serial.print(c_time);
  Serial.print(":");
  Serial.print(sunrise);//lever du soleil
  Serial.print(":");
  Serial.print(sunset);//coucher du soleil
  Serial.println(" ");
}

j'ai testé D0 en INPUT_PULLDOWN_16, mais ça ne va pas, dans ce cas il faut la relier au 3,3V.
D4 ne figure pas dans le code, mais elle le sera plus tard.

Si A0 n' est pas occupée, c'est relativement facile de mettre un interrupteur la-dessus.

Bonjour ZX80,
Je ne pensais pas qu'on pouvais utiliser A0, vue que c’est une entrée analogique.
Après une petite recherche, ça fonctionne à merveille.
Merci beaucoup.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.