Problème avec une résistance de pullup

Luke
jeu, 02/13/2020 - 15:07
Bonjour à tous,
Avant toute chose, je précise que je suis un grand débutant amateur, je n'ai aucune formation en électronique, mais j'adore les nouvelles technologies.J'ai découvert arduino il y a quelques jours, j'ai commandé un kit de démarrage et en attendant mon colis, je m'entraine sur le site tinkercad ( je pense que vous connaissez ).
J'ai suivi les tutoriels de la chaine U=RI,qui m'ont amené ici.
Je bloque sur le tuto suivant.
En fait tout fonctionne parfaitement, j'ai reproduit le schéma de la vidéo, mais quand il parle "d'enlever la résistance de pullup", chez moi ça ne marche plus, la LED ne s'allume pas et le bouton n'a aucun effet.
J'imagine qu'il y a quelquechose à recabler, j'ai tout essayé en fait ( un peu au hasard j'avoue ), En recablant le bouton poussoir sur le +, j'ai remarqué que la LED s'allume de nouveau, mais le bouton n'a plus aucun effet sur la LED.
Si quelqu'un veut bien m'expliquer la marche à suivre, et le pourquoi, ce serait très sympa :)
Voici où je me suis arrêté sur ce tuto ( tout fonctionne avec ce schéma et ce code ) :
int portPushButton = 13;
int portLED =2;
int etatPushButton = HIGH;
void setup() {
pinMode(portPushButton, INPUT);
pinMode(portLED, OUTPUT);
}
void loop() {
etatPushButton = digitalRead(portPushButton);
if (etatPushButton == HIGH)
{
digitalWrite(portLED, HIGH);
}
else
{
digitalWrite(portLED, LOW);
}
}
Merci d'avancepour vos réponses
Walter
jeu, 02/13/2020 - 16:05
Bonjour, dans ton code tu n'a pas changé INPUT en INPUT_PULLUP qui doit aller avec la suppression de la résistance.
L'arduino contient déjà une résistance de pullup, donc si tu active ton entré avec cette résistance interne, tu n'es pas obligé d'en utiliser une sur ta breadboard.
Luke
jeu, 02/13/2020 - 17:10
Merci walter pour ta réponse.
En fait, même en mettant pinMode(portPushButton, INPUT_PULLUP),ça ne fonctionne pas .... Voilà où j'en suis,la LED s'allume mais le bouton poussoir n'a aucun effet...
Là je sèche, voilà où j'en suis, j'ai rajouté INPUT_PULLUP supprimé la résistance et recablé le + sur le bouton poussoir :
int portPushButton = 13;
int portLED =2;
int etatPushButton = HIGH;
void setup() {
pinMode(portPushButton, INPUT_PULLUP);
pinMode(portLED, OUTPUT);
}
void loop() {
etatPushButton = digitalRead(portPushButton);
if (etatPushButton == HIGH)
{
digitalWrite(portLED, HIGH);
}
else
{
digitalWrite(portLED, LOW);
}
}
Merci encore pour votre aide :)
Walter
jeu, 02/13/2020 - 18:40
pourquoi tu as remplacé la résistance par le fils?
Sur la vidéo il n'es pas question, uniquement d'enlever la résistance ?
Puisque tu demande à l'arduino une résistance en PULLUP branché sur le +5V d'un coté et à l'entrée digital de l'autre.
si tu connecté l'entrée de l'arduino aussi au +5V, ta résistance ne sert à rien puisqu'au même potentiel des deux cotés.
Luke
jeu, 02/13/2020 - 18:43
En fait,quand j'enlève simplement la résistance, il ne se passe plus rien, La LED ne s'allume plus .... en rajoutant ce fil elle s'allume .... je comprend pas trop là
Anonyme
ven, 02/14/2020 - 08:56
Bonjour Luke
Ne cherche pas plus longtemps, tu n'as pas de chance car il y a un bug sur l'entrée 13 dans Tinkercad la fonction pullup ne fonctionne pas elle est bien active sur les Arduino UNO réel. Cela vient sans doute du fait que cette entrée est aussi matérialisée pas la LED ( LED_BUILTIN ) qui de trouve sur les cartes Arduino.
Donc change la pin 13 par la pin 12 par exemple et INPUT_PULLUP fonctionnera.
Par contre sur une vrai carte Arduino UNO si tu ne mets pas de résistance de Pullup ni le paramètre INPUT_PULLUP sur l'entrée tu risques de voir ta LED clignoter de manière alléatoire car celle ci est soumises aux champs électromagnétique de l'environnement dans lequel elle est !
Si je peux me permettre, tu écris :
int etatPushButton = HIGH; // de déclarer cette variable à HIGH ne sert strictement à rien
Ton code je pense fonctionne à l'envers car la LED s'éteint quand le bouton est rélâché et inversement
Pour débuguer un circuit je te conseille d'utiliser le port série associé à des Serial.println(xxx); dont xxx réprésente une variable quelconque et par exemple dans ton cas
Serial.println( digitalRead(portPushButton) ); tu verras alors qu'il n'y a aucun changement !
Pour simplifier ton code tu peux écrire cela :
/* Pour inverser le fonctionnement remplace ajoute un "!" devant digitalRead(Button) comme ceci :
digitalWrite(portLED, !digitalRead(Button)); */
Luke
ven, 02/14/2020 - 13:58
Merci pour ta réponse ! Effectivement en passant sur la broche 12 ça fonctionne normalement.
J'ai testé ton code, effectivement il est + propre, plus simple, et plus court :)
Au passage, existe-t-il une bonne alternative à tinkercad ?? Il est bien mais je pense qu'on peut trouver mieux :)
Anonyme
ven, 02/14/2020 - 14:55
Pour l'instant, en ce qui concerne les simulateurs, je ne pense pas, enfin simulateurs gratuit, il en existe mais hors de prix style Eagle avec les addin's.
Juste un petit truc pu coder !
Évite les variables avec des noms très long, c'est en général source d'erreur et souvent beaucoup moins parlant, n'utilise que les mots anglophones lorsqu'il sont plus courts et intelligibles par un epu tout le monde. Enfin c'est ma façon de faire et je m'y retrouve beaucoup plus facilement.
Luke
ven, 02/14/2020 - 17:35
Oui tu as raison, merci du conseil !
Une autre question,un peu hors sujet :D ....
J'ai remarqué que si je connecte une LED sur un port digital, j'ai du courant sur le +.
Par contre quand je connecte une LED sur un port analogique, il n'y a pas de courant... je suis obligé d'aller chercher une autre source de courant. ( ce qui augmente le nombre de cables à utiliser )
Je me trompe sûrement, mais à mon avis c'est parce qu'on parle " d'entrées /sorties digitale " et " d'entrée analogique " ? Pouvez-vous m'éclaircir sur ce point ?
Merci encore :)
Anonyme
ven, 02/14/2020 - 18:13
Les ports analogiques peuvent aussi être déclarés en digital exemple
pinMode(A0 , OUTPUT);
ou pinMode( A1, INPUT_PULLUP);
Il n'y a que des entrées Analogiques ! Si tu applique une tension entre 0 et 5 volts sur A5 par exemple
Tu pourras lire une valeur proportionnelle de 0 à 1023 par la fonction analogRead(A5);
regarde en bas à droite on peut chatter ici !
Ai-je répondu à ton attente ?
Par contre on peux simuler une sortie Analogique Sur la sortie 7 par exemple :
pinMode(8, OUTPUT);
analogWrite(8,255);
Mais ce n'est qu'un simulation de sortie Analogique voir ici :
https://fr.wikipedia.org/wiki/Modulation_de_largeur_d%27impulsion
Walter
ven, 02/14/2020 - 18:25
Bonjour, pour que tu es du courant, il faut que ta broche soit positionné au niveau HIGH(+5V).
si tu es sur une broche définie en INPUT, normalement elle ne devrait pas être fixé à un potentiel particulier(+5V), notamment pour une entrée analogique.
Sauf si tu la positionne explicitement comme tu l'a fait dans ton programme initial pour ton entrée digital.
un lien vers le diagramme de sortie de l'arduino Uno
Luke
sam, 02/15/2020 - 06:04
Ok merci pour ces précisions, j'y vois un peu plus clair :)
Anonyme
sam, 02/15/2020 - 14:27
Je viens de trouver un simulateur que je ne connaissais pas il y a peu de temps c'est Simulide
Par contre j'ai galèré pour ne plus avoir de message d'erreur si vous êtes intéressé je ferais un tuto, mais pour le moment j'ai simplement testé Blink avec succès !
Luke
sam, 02/15/2020 - 17:10
Alors j'ai testé rapidement Simulide, c'est pas mal, mais je n'arrive pas à lancer le programme, il y a des erreurs. Visiblement je dois créer un chemin vers un dossier, enfin c'est pas très clair ...; comment il faut faire ?
Anonyme
dim, 02/16/2020 - 07:25
Je connais les tutos que j'ai trouvé sont Nuls il ne donnent pas toutes les trucs et astuces.
Si tu es MAJEUR et uniquement si tu es MAJEUR il est possible, si tu veux de se joindre pas téléphone, les échanges de 06 se feront par le tchat dans l'affirmative.
Anonyme
dim, 02/16/2020 - 14:06
J'ai profité de ce sujet pour créer un tuto qui permet de mieux utiliser SimulIde donc il vous faudra aller ici
Luke
dim, 02/16/2020 - 22:19
super merci beaucoup je vais jeter un oeil :)