Entrées défectueuses

Salut, j’ai acheté un kit d’apprentissage avec une Arduino Mega 2560 (made in China). J’ai voulu réaliser mon plus grand projet avec ce kit. Mais quand j’ai cherché un code pour lire la température et l’humidité avec DHT11 et je l’ai téléversé, le moniteur série me met « Error reading temperature and humidity ». J’ai essayé un autre code mais cette fois ci avec un écran LCD 16x2 et il me met la température 0 degrés Cesius et l’humidité 0 pourcent. J’ai essayé un bouton poussoir avec deux cablages (un avec une résistance de 10K ohmes et un autre sans résistance mais je l’ai déclaré en INPUT_PULLUP) et la valeur est toujours 1. J’ai essayé avec le module Big Sound et ça affiche des chiffres aléatoires mais qui augmentent légèrement quand je tourne le potentiomètre du module. J’ai essayé avec un Water Sensor et la valeur es encore aléatoire dans l’intervale de 300-400. Les entrées fonctionnaient quand j’ai acheté le kit. Mais maintenant aucune broche ne lis les valeurs. Je vais essayer avec un potentiomètre dès que je terminerais mes devoirs. Mais je me demande, c’est un problème du BootLoader (que je devrais mettre à jour si c’est le cas) ou un problème de la carte. Merci de me répondre.

Remarque préalable :
La présentation de ton texte (écriture au kilomètre sans paragraphe) le rend illisible et franchement je n'ai fait que le survoler.

Concernant le DHT11 les premières bibliothèques donnaient des erreurs de lecture à foison.

Ce n'est plus le cas depuis de nombreuses années, mais peut-être es-tu tombé sur une ancienne version qui traine toujours sur la toile.

Le mieux est de charger les bibliothèques à l'aide du gestionnaire de bibliothèque de l'IDE. Voir menu "Outils"

Bonjour semsemsamsoum

Je suppose que tu utilise le "breadboard"
image
du kit pour faire tes montages, comment est alimenté le tout et, surtout, est-ce-que le GND de l'Arduino et celui du breadbord sont reliés ensemble?
Si possible, fait une photo de ton montage.

Cordialement
jpbbricole

J’ai mis tout les GND sur la barre GND de ma breadboard que j’ai relié avel le GND de l’arduino et le tout est alimenté en 5V (la barre + de ma breadborad que j’ai aussi relié au 5V de l’arduino). Ça c’est concernant mon projet. Puis j’ai tout décablé et j’ai utiliser le module Big Sound tout seul, puis le bouton poussoir, puis le Water Sensor. Chaque composant tout seul. Dsl je ne peux pas t’envoyer le cablage car je n’ai pas droit au kit jusqu’à la fin des devoirs. Quand j’ai utilisé les composants individuellement je n’ai pas utilisé la breadboard

faites vos devoirs puis ensuite postez plus de détail sur les montages (une photo d'un schéma par exemple - prenez le temps aussi de lire "Les bonnes pratiques du Forum Francophone” pour voir comment poster correctement )

Bonjour semsemsamsoum

Excellent!

Si, par le terme "tout seul" tu veux dire directement sur l'Arduino et que ça ne fonctionne toujours pas, j'ai bien peur pour la santé des E/S de l'Arduino.
Si ton affichage LCD est en i2C, les pin SDL et SCA (21, 20) fonctionnent puisqu'un message s'affiche.

Cordialement
jpbbricole

  • Mettez un fil dans la broche 5V de votre Arduino et pour le moment gardez l'autre côté en l'air

  • chargez ce code sur votre MEGA

void setup() {
  Serial.begin(115200);
  Serial.println();

  for (byte pin = 2; pin <= 13; pin++) {
    pinMode(pin, INPUT);
    if (pin < 10) Serial.write('0');
    Serial.print(pin);
    Serial.write(' ');
  }

  for (byte pin = A0; pin <= A15; pin++) {
    pinMode(pin, INPUT);
    Serial.write('A');
    if (pin - A0 < 10) Serial.write('0');
    Serial.print(pin - A0);
    Serial.write(' ');
  }
  Serial.println();
}

void loop() {

  for (byte pin = 2; pin <= 13; pin++) {
    Serial.print(digitalRead(pin) == HIGH ? F(" H ") : F(" L "));
  }

  for (byte pin = A0; pin <= A15; pin++) {
    Serial.print(digitalRead(pin) == HIGH ? F("  H ") : F("  L "));
  }

  Serial.println();
  delay(1000);
}
  • ouvrez la console série à 115200 bauds assez grande pour que tout tienne sur 1 seule ligne

Vous devriez voir s'afficher

02 03 04 05 06 07 08 09 10 11 12 13 A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15

puis ensuite

 L  L  L  L  L  L  L  L  L  L  L  L   L   L   L   L   L   L   L   L   L   L   L   L   L   L   L   L 

qui défile toutes les secondes

  • branchez l'autre extrémité du fil relié à 5V dans une des pins 2..13 ou A0..A15

--> vous devriez voir un H qui s'affiche dans la colonne correspondant au N° de pin

par exemple en branchant mon fil dans la pin 7 je vois cela:

02 03 04 05 06 07 08 09 10 11 12 13 A00 A01 A02 A03 A04 A05 A06 A07 A08 A09 A10 A11 A12 A13 A14 A15
 L  L  L  L  L  H  L  L  L  L  L  L   L   L   L   L   L   L   L   L   L   L   L   L   L   L   L   L 

essayez les pins une à une pour voir si ça vous dit bien 'H' pour chacune.

1 Like

Certaines breadboards ont des demi rails d'alim, ils sont en deux parties indépendantes qu'ils faut soit alimenter séparément (c'est prévu pour utiliser du 5 V et du 3,3 V) soit relier entre-elles.

Si mes broches SDA et SCL fonctionnent ça veut dire que c’est que la carte Ardnuino n’a aucun problème ? Et aussi c’est quoi l’E/S ? Au passage, j’ai dit que les entrées fontionnaient il y a 1 an et demi. Peut-être que je devrais mettre à jour le BootLoader.

Merci beaucoup. Je l’essayerai.

Bonsoir semsemsamsoum

Au moins ces 2 pin sont bonnes.
Les E/S sont les entrées/sorties. Je n'ai pas souvenir que le Mega aie changé de bootloader.
As-tu fait le test de J-M-L?

Cordialement
jpbbricole

Les SCA et les SCL fonctionnent bien. Les autres broches fonctionnent toutes en sortie. Je n’ai pas testé toutes les broches en les déclarant INPUT ou INPUT_PULLUP. J’essayerai la méthode de J-M-L

Le bootloader n'est qu'une aide au téléchargement du programme.
Il simplifie l'opération, mais il n'est pas indispensable.

Il n'a rien à voir avec ton problème.

Une I/O, ou E/S en français, c'est tout bêtement une pin du micro.
Quand une pin est en mode entrée, c'est Input ou Entrée.
Quand une pin est en mode sortie, c'est Output ou Sortie.

Si j'étais toi puisque tu te poses la question de savoir si tu n'as pas cramer des E/S je décâblerais tout.
Je ferais un programme qui ne ferait que tester les E/S.
Pour tester en mode Sortie :
Avec une led + résistance de préférence autour de 1000 ohms.
Un coup la led+résistance est connectée à la masse -> elle s'allume si tu mets un état HAUT (HIGH)
Un coup la led + résistance est connectée au Vcc (5V) elle s'allume pour un état bas (LOW).
Pour tester en mode Entrée : la pin est soit reliée à la masse, soit au Vcc et lecture de l'état avec digitalRead et affichage avec des Serial.print

La méthode est à ras les pâquerettes et complètement basique.
Elle a, à mon avis, l'intérêt de faire débiter les sorties, mais pas trop, pendant leur test.

Merci beaucoup. Toutes les entées fonctionnent. Mais la D13 toujours H et pour les analogiques parfois elles sont en H même si elles ne sont pas branchées. Ca s'affiche en H 5 secondes après le débranchement ou sont en H sans les brancher. La plupart du temps les broches voisines (Par exemple je branche le broche A0 et la A1 se met en H avec la A0)

Ici j'ai branché la A1 après la A0 mais la A0 je met en L 5 secondes après. Bref j'utiliserai la plupart du temps les pins digitales donc il faut réviser mon programme pour le projet c'est tout je pense ? Merci beaucoup pour votre aide 68tjs, jpbbricole et J-M-L. Juste si vous pouvez répondre à ma dernière question.

Essayes avec ce code et au lieu de brancher sur 5V branchez sur GND


void setup() {
  Serial.begin(115200);
  Serial.println();

  for (byte pin = 2; pin <= 13; pin++) {
    pinMode(pin, INPUT_PULLUP);
    if (pin < 10) Serial.write('0');
    Serial.print(pin);
    Serial.write(' ');
  }

  for (byte pin = A0; pin <= A15; pin++) {
    pinMode(pin, INPUT);
    Serial.write('A');
    if (pin - A0 < 10) Serial.write('0');
    Serial.print(pin - A0);
    Serial.write(' ');
  }
  Serial.println();
}

void loop() {

  for (byte pin = 2; pin <= 13; pin++) {
    Serial.print(digitalRead(pin) == HIGH ? F(" H ") : F(" L "));
  }

  for (byte pin = A0; pin <= A15; pin++) {
    Serial.print(digitalRead(pin) == HIGH ? F("  H ") : F("  L "));
  }

  Serial.println();
  delay(1000);
}

Les pins devraient être H par défaut et passer à L et vous ne devriez pas voir de fluctuations

Avez vous fait le test en sortie expliqué par @68tjs ?

Euh non je ne l’ai encore pas fait mais avant d’avoir créé ce sujet elle fontionnaient. Je ne sais pas maintenant. Je vais essayer l’après-midi.

Pour les broches digitales c'est bon mais pour les analogiques elles sont toutes en L par défaut.
J'ai branché le GND ça reste L et quand j'ai branché le 5V à la A6 il y a la A5 et la A7 qui sont passées en H.


Bon pour les digitales c'est bon pour l'entrée mais les analogiques il y a encore un problème.

Merci, le test de sortie fonctionne à perfection :wink:

j'ai oublié un PULLUP

for (byte pin = A0; pin <= A15; pin++) {
    pinMode(pin, INPUT_PULLUP);  // <==== OUBLIE DE LE METTRE ICI AUSSI
    Serial.write('A');
    if (pin - A0 < 10) Serial.write('0');
    Serial.print(pin - A0);
    Serial.write(' ');
  }

C'est bon, la carte fonctionne correctement. J'ai essayé un bouton poussoir et c'est bon, puis j'ai testé le DHT11 et aussi ça fonctionne. Donc on peut fermer le sujet. J-M-L, 65tjs, et jpbbricole, je vous remercie infiniment.