Montage et contrôle bouton poussoir Led 2 couleurs

Bonjour tout le monde,

Je reviens vers au sujet d'un montage que je peaufine. Je suis déjà passé par ce forum et vous m'aviez bien aidé. Donc je reviens :slight_smile:

Alors j'ai un bouton poussoir (lien ci joint) que je souhaite faire fonctionner comme ceci:
J'allume le systeme le bouton s'allume en vert
je fais une impulsion il s'allume en rouge
je refais une impulsion il s'allume en vert..
En gros à chaque impulsion il change de couleur. Ce bouton poussoir comme un servo via un Arduino Nano.

Je n'ai pas beaucoup d'info sur ce bouton et je n'arrive pas à le faire fonctionner. La seul chose que je fais est d'allumer via la borne + et - et quand j'inverse la polarité il change de couleur..
Les 2 autres borne ne change rien (enfin je ne trouve pas... )

Avez vous déjà vu ce type de bouton ?

Est-il possible d'inverser la polarité à chaque impulsion via l'arduino ?

Merci

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour ludo49

Oui, il s'agit certainement d'une LED bicolore du genre:
image
A câbler entre 2 ports de l'Arduino, en OUTPUT et il faut jouer avec la table de vérité ci-dessus.

Cordialement
jpbbricole

Désolé mais je suis bien en mode français..

Merci pour la réponse rapide. J'avoue, je ne suis pas trop dans mon élément ..

Mais oui ça doit être une chose comme cela.

Le Output est donc pour la programmation de l'arduino. il faut que je l'intègre à programmation actuel alors.. pas simple ..

Mais du coup pourquoi le câbler sur 2 ports alors que j'ai 4 broches sur le bouton? Je comprend pas..

Merci

Tu peux télécharger une fiche technique sur le site. Il y a sans doute plus d'infos.
Mais on est en droit de supposer qu'il y a 2 broches pour le poussoir et 2 broches pour les LEDs. un petit coup d'ohmmètre te permettrait de lever le doute.

Oui effectivement il y a une fiche technique mais le téléchargement ce fait pas je pense qu'il la renvoi par mail, mais avec le week-end..

Ha oui exact je ne comprenais pas car avec l'hohmmètre il n'y avait rien car pour moi ça devait passer par le +

Mais effectivement le + et - sont pour le Led et les 2 autres broches sont pour le bouton..

Super merci ça avance. du coup maintenant la partie bouton fonctionnera avec mon programme actuel mais il faut que j'apporte la partie Led avec les infos de jpbbricole .. et là c'est autre chose..

Eventuellement je veux bien de l'aide sur cette partie.

Pour info,Texte préformaté voici mon programme actuel qui fonctionne bien:

#include <SCServo.h>

SCServo SERVO; 

#define PINBOUTON 8
#define POS0 0
#define POS1 1000
#define SPEED 1000
#define IDSERVO 1
#define WAITINGTIME 2000

bool positionNumber = 0;
uint16_t servoPositions[2] = {POS0, POS1};
                                    
void setup() {
  pinMode (PINBOUTON, INPUT_PULLUP);                               // Initialisation du pin de lecture du bouton
  Serial.begin(1000000);
  SERVO.pSerial = &Serial;
  delay(500);
  SERVO.EnableTorque(IDSERVO, true);
  SERVO.WritePos(IDSERVO, servoPositions[positionNumber], SPEED);  // Initialisation de la position du servo
}


void loop() {
  if(!digitalRead(PINBOUTON)) {
    positionNumber = !positionNumber;                 
    SERVO.WritePos(IDSERVO, servoPositions[positionNumber], SPEED);
    delay(WAITINGTIME); 
  }
}

Bonjour ludo49

Bah! c'est pas si terrible :wink:
J'ai intégré la façon de faire dans ton programme, je te laisse jouer au jeux des 7 différences et poser des questions.

#include <SCServo.h>

SCServo SERVO;

#define PINBOUTON 8
#define pinledBicoloreA 9
#define pinledBicoloreB 10

#define POS0 0
#define POS1 1000
#define SPEED 1000
#define IDSERVO 1
#define WAITINGTIME 2000

bool positionNumber = 0;
uint16_t servoPositions[2] = {POS0, POS1};

void setup() {
	pinMode (PINBOUTON, INPUT_PULLUP);                               // Initialisation du pin de lecture du bouton
	pinMode (pinledBicoloreA, OUTPUT);                               // Initialisation du pin d'une des 2 LED
	pinMode (pinledBicoloreB, OUTPUT);                               // Initialisation du pin de l'autre LED
	ledBicolore(positionNumber);
	
	Serial.begin(1000000);
	SERVO.pSerial = &Serial;
	delay(500);
	SERVO.EnableTorque(IDSERVO, true);
	SERVO.WritePos(IDSERVO, servoPositions[positionNumber], SPEED);  // Initialisation de la position du servo
}


void loop() {
	if(!digitalRead(PINBOUTON)) {
		positionNumber = !positionNumber;
		ledBicolore(positionNumber);
		SERVO.WritePos(IDSERVO, servoPositions[positionNumber], SPEED);
		delay(WAITINGTIME);
	}
}
void ledBicolore(int position)
{
	if (position == 0)     // Allumer rouge
	{
		digitalWrite(pinledBicoloreA, LOW);
		digitalWrite(pinledBicoloreB, HIGH);
	} 
	else     // Allumer en vert
	{
		digitalWrite(pinledBicoloreA, HIGH);
		digitalWrite(pinledBicoloreB, LOW);
	}
}

C'est testé avec les fonctions du servo désactivées.

Cordialement
jpbbricole

1 Like

Ha super et bien j'en demandais pas tant mais j'avoue que ça m'aide beaucoup. merci Merci

Petite question au sujet des pins 9 et 10 je branche uniquement sur GND ?

Bonjour ludo49

Non, comme indiqué au post #3, c'est à dire A sur 9 et B sur 10, ne pas oublier la résistance, 330 ohms devrait aller.

Cordialement
jpbbricole

Ok car je pense via un shield pour valider le montage et ensuite le passer version définitive.

Donc les branches qui correspondant sont 9 et 10 en (il me semble)

Pour la résistance je ne suis pas sur d'en avoir besoin car je suis en 5V partout bouton également ..

Autre chose j'ai un message d'erreur en téléversant que voici :

Arduino : 1.8.15 (Mac OS X), Carte : "Arduino Nano, ATmega328P (Old Bootloader)"

Le croquis utilise 2976 octets (9%) de l'espace de stockage de programmes. Le maximum est de 30720 octets.
Les variables globales utilisent 211 octets (10%) de mémoire dynamique, ce qui laisse 1837 octets pour les variables locales. Le maximum est de 2048 octets.
avrdude: ser_open(): can't open device "/dev/cu.usbserial-1420": No such file or directory
Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Oh que oui!

Oui

La compilation est OK, ton PC ne "voit" pas ton Nano.

Cordialement
jpbbricole

Ho que oui ? il en faut un du coup ? Avec une résistance est-il possible de diminuer la puissance pour diminuer la Conso ?

Ha oui effectivement j'avais deja eu le souci avec le port usb. DU coup c'est tout bon ça téléverse :slight_smile:

et bien bonne nouvelle ça fonctionne. donc vraiment top merci merci

il y ajuste cette histoire de résistance si il y a possibilité de diminuer la Conso ça serait top.

Merci

Bonsoir ludo49

A toi d'essayer, tu peux commencer à 330 ohms par exemple, en augmentant cette valeur, donc diminuer la consommation, tant que la luminosité des LED est acceptable.

Cordialement
jpbbricole

Ok tres bien et il faut en mettre sur les 2 fils 9 et 10 ?

Petite question au passage est-il possible d'avoir une sorte de veille sur le système. Par exemple au bout de 20 min sans action de bouton le système ce met en veille et pour le remettre en route il suffit de re-appuyer sur le bouton..
Cela est possible avec un Arduino Nano?

Merci

Bonsoir ludo49

Non, comme indiqué ici.

Cordialement
jpbbricole

Ha oui effectivement je n'avais pas fait attention... Merci je vais pouvoir tester cela.

Merci beaucoup pour votre aide c'est top

Alors petit retour du test de ce week end. Déjà c'est vraiment top ça marche bien.

Cependant j'aimerais connaitre le nombre de cycle que je peux avoir au maximum (jusqu'à ce que la batterie soit à plat)..

A partir de cela je pourrais éventuellement diminuer la résistance afin d'avoir une meilleur visibilité de la led en extérieur. actuellement je suis avec une résitance de 470 ohms et suivant la lumière extérieur je vois plus ou moins bien..

J'ai vu qu'il y avait des codes comme ceci:

while (true) {
    // instructions exécutées à l'infini
}

faut'-il rajouter ce code à mon actuel tout simplement?

Merci

Bonsoir, me revoilà.

J'ai reçu un nouveau servo plus costaud qui sera plus sur que l'actuel.
Il s'agit d'un feetech STS3032. J'ai téléchargé la librairie et j'ai commencé a faire un premier code (ci joint) mais il présente cette erreur:
exit status 1 'SCSERVO_H' was not declared in this scope

Je pense que le nom n'est pas reconnu par la librairie ..je comprend pas trop.. Vous en pensez quoi ?

#include <SCServo.h>

SMS_STS sms_sts;

#define PINBOUTON 8
#define pinledBicoloreA 9
#define pinledBicoloreB 10

#define POS0 0
#define POS1 1000
#define SPEED 1000
#define IDSERVO 1
#define WAITINGTIME 2000

bool positionNumber = 0;
uint16_t servoPositions[2] = {POS0, POS1};

void setup() {
  pinMode (PINBOUTON, INPUT_PULLUP);                               // Initialisation du pin de lecture du bouton
  pinMode (pinledBicoloreA, OUTPUT);                               // Initialisation du pin d'une des 2 LED
  pinMode (pinledBicoloreB, OUTPUT);                               // Initialisation du pin de l'autre LED
  ledBicolore(positionNumber);
  
  Serial.begin(1000000);
  SCSERVO_H.pSerial = &Serial;
  delay(500);
  SERVO.EnableTorque(IDSERVO, true);
  SERVO.WritePos(IDSERVO, servoPositions[positionNumber], SPEED);  // Initialisation de la position du servo
}


void loop() {
  if(!digitalRead(PINBOUTON)) {
    positionNumber = !positionNumber;
    ledBicolore(positionNumber);
    SCSERVO_H.WritePos(IDSERVO, servoPositions[positionNumber], SPEED);
    delay(WAITINGTIME);
  }
}
void ledBicolore(int position)
{
  if (position == 0)     // Allumer rouge
  {
    digitalWrite(pinledBicoloreA, LOW);
    digitalWrite(pinledBicoloreB, HIGH);
  } 
  else     // Allumer en vert
  {
    digitalWrite(pinledBicoloreA, HIGH);
    digitalWrite(pinledBicoloreB, LOW);
  }
}

Merci pour votre aide

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