j'aimerai connecter sur mon arduino un switch de fin de course comme celui ci :
Cependant le montage n'est pas assez clair dans ma tete :S
Je pense qu'il va falloir brancher une pin au +5v de l'arduino et l'autre pin à une entrée digital qui sera configuré en input.
Sachant que le switch sera en position fermer une grande majorité du temps quelle est la résitance à choisir pour éviter un maximum la consommation de courant ?
Sur ce type de switch, tu as du NO/NF, il suffit de faire en sorte que le circuit soit ouvert la majeure partie du temps, après ce n'est qu'une question de logique de programmation...
Ya deux manières de faire, pullup et pulldown, qui sont symétriques
Voyons pull up (tirer vers le haut).
Quand l'interrupteur est ouvert, la tension de la sortie devrait être 5v. Pour faire ça, la sortie est reliée à Vcc (+5v) par l'intermédiaire d'une résistance de pull up.
Quand il est fermé, il relie la sortie au GND = 0v, et un courant est débité à travers la résistance. Une résistance de 10 K fera l'affaire, ce qui limite la fuite à 0,5 mA.
EDIT: pour pulldown, c'est l'inverse évidemment. L'interrupteur est relie à 5v et à la sortie, qui est "tirée vers le bas" par une résistance vers GND. Et donc fermé => 5v, ouvert 0v.
Il y a sûrement des raisons de préférer l'un à l'autre, mais lesquelles ? :-)
- Edité par michelbillaud 29 juillet 2016 à 9:04:06
A savoir aussi, il y a une résistance de pullup intégrée dans les arduinos. Comme ça on a juste à brancher l'interrupteur (ou bouton poussoir) à GND et à l'entrée voulu.
Il suffit de configurer avec le mode INPUT_PULLUP. Démo :
// les sorties (12, 13) s'éteignent
// quand on appuie sur les boutons
// reliés aux entrées 2 et 3.
void setup()
{
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
int b2 = digitalRead(2);
int b3 = digitalRead(3);
digitalWrite(12, b2 ? HIGH : LOW);
digitalWrite(13, b3 ? HIGH : LOW);
}
- Edité par michelbillaud 29 juillet 2016 à 9:36:53
A savoir aussi, il y a une résistance de pullup intégrée dans les arduinos. Comme ça on a juste à brancher l'interrupteur (ou bouton poussoir) à GND et à l'entrée voulu.
Il suffit de configurer avec le mode INPUT_PULLUP. Démo :
// les sorties (12, 13) s'éteignent
// quand on appuie sur les boutons
// reliés aux entrées 2 et 3.
void setup()
{
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
int b2 = digitalRead(2);
int b3 = digitalRead(3);
digitalWrite(12, b2 ? HIGH : LOW);
digitalWrite(13, b3 ? HIGH : LOW);
}
A savoir aussi, il y a une résistance de pullup intégrée dans les arduinos. Comme ça on a juste à brancher l'interrupteur (ou bouton poussoir) à GND et à l'entrée voulu.
Il suffit de configurer avec le mode INPUT_PULLUP.Donc pas besoin d'une résistance de 10kOHM ?
Absolument aucun besoin, puisque la résistance de pullup est intégrée dans le microcontrôleur, exprès pour. Il suffit de lui demander de s'en servir. Voir :
J'ai essayé (C et assembleur), ça marche. Si tu as oublié de passer en PULLUP, ça se verra, ton entrée sera flottante quand l'interrupteur sera ouvert.
Ce que ça fait, à la base
- passer à 0 les bits du registre de direction du port (DDRx) qui correspondent aux pins voulues (ce qui les met en sortie)
- envoyer 1 sur les bits correspondant du PORTx pour activer le pull up
ensuite, il n'y a plus qu'à lire sur PINx
;; Utilisation des boutons 2 et 3 (PD2 PD3)
;; en entrée PULLUP
.include "./m328Pdef.inc"
main:
ldi r16,~((1<<DDD2)|(1<<DDD3)) ; D2 et D3 en entrée
out DDRD,r16
ldi r16,(1<<PORTD2)|(1<<PORTD3) ; D2 et D3 avec pullups
out PORTD,r16
ldi r16,0b11111111 ; port B en sortie
out DDRB,r16
loop: in r16,PIND
andi R16,(1<<PIND2)|(1<<PIND3) ; masquage
out PORTB,r16
rjmp loop
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Hors sujet
Ton message est hors sujet. Afin de garder un forum clair où chaque fil de discussion répond à une problématique, il est nécessaire de ne pas multiplier les sujets à l'intérieur du même fil de discussion. Merci de créer ton propre sujet à l'aide du bouton bleu « Créer un sujet » en haut à droite du forum adéquat.
Bonhomme !! | Jeu de plateforme : Prototype.