[Non Réglé] Bouton Poussoir multifunc. valeur aléatoire :(

Bonjour à tous,

Pour essayer de résumer au maximum : j’ai réalisé une platine électronique permettant de commander 12 spot LED en 12V. Je commande tout ça avec une arduino nano et un adafruit 16 channel 12bit connecté à 12 transistor TIP 31.
Le cahier des charges était simple : commander les 12 spots avec un seul bouton poussoir ou plutôt commander les différents modes d’éclairage.

Après plusieurs mise sous tension, tout est OK sauf le bouton poussoir, qui est en INPUT_PULLUP (avec un fil entre l’arduino et le BP de 1m).

A la mise sou tension, tout se passe comme il faut jusqu’à ce que je veuille charger de mode avec le bouton poussoir et à ce moment, j’ai que des valeurs aléatoires issu du BP et les modes changent aléatoirement, chose indésirable.

Voici un aperçu, ci-dessous, de la fonction permettant l’usage des différentes fonctions du BP que j’ai déjà testé à part et qui est complètement opérationnel.

Après de multiples recherches sur ce forum et bien d’autre, je n’ai pas trouvé réponse à ma question.

Merci d’avance pour votre aide.

void fBP ( ) {
  //Serial.println ( "#######Entree fBP#######" );
  if ( BP [ 0 ] == 0 && BP [ 1 ] == 1 ) {
    Timer [ 0 ] = millis ( );
    Timer [ 1 ] = Timer [ 0 ] + dDELAYBP; }
  else if ( BP [ 0 ] == 1 && BP [ 1 ] == 1 ) {
    for ( i = 0 ; i < 5 ; i ++ ) {
      Second [ i ] = 0; } }
  Timer [ 0 ] = millis ( );
  BP [ 1 ] = BP [ 0 ];
  BP [ 0 ] = digitalRead ( PinBP );
  delay ( dDELAYLOOPBP );
  Serial.print ( "                                 Valeur de BP = " );
  Serial.println ( BP [ 0 ] );
  //Serial.print ( "Valeur du Bouton Poussoir : " );
  //Serial.println ( BP [ 0 ] );
  if ( Second [ 0 ] == 0 && Timer [ 0 ] >= Timer [ 1 ] && BP [ 1 ] == 0 && BP [ 0 ] == 0 ) {
    Second [ 0 ] = 1;
    Timer [ 0 ] = millis ( );
    Timer [ 1 ] = Timer [ 0 ] + dDELAYBP; }
  else if ( Second [ 0 ] == 1 && Second [ 1 ] == 0 && Timer [ 0 ] >= Timer [ 1 ] && BP [ 1 ] == 0 && BP [ 0 ] == 0 ) {
    Second [ 1 ] = 1;
    Timer [ 0 ] = millis ( );
    Timer [ 1 ] = Timer [ 0 ] + dDELAYBP; }
  else if ( Second [ 0 ] == 1 && Second [ 1 ] == 1 && Second [ 2 ] == 0 && Timer [ 0 ] >= Timer [ 1 ] && BP [ 1 ] == 0 && BP [ 0 ] == 0 ) {
    Second [ 2 ] = 1;
    Timer [ 0 ] = millis ( );
    Timer [ 1 ] = Timer [ 0 ] + dDELAYBP; }
  else if ( Second [ 0 ] == 1 && Second [ 1 ] == 1 && Second [ 2 ] == 1 && Second [ 3 ] == 0 && Timer [ 0 ] >= Timer [ 1 ] && BP [ 1 ] == 0 && BP [ 0 ] == 0 ) {
    Second [ 3 ] = 1;
    Timer [ 0 ] = millis ( );
    Timer [ 1 ] = Timer [ 0 ] + dDELAYBP; }
  else if ( Second [ 0 ] == 1 && Second [ 1 ] == 1 && Second [ 2 ] == 1 && Second [ 3 ] == 1 && Second [ 4 ] == 0 && Timer [ 0 ] >= Timer [ 1 ] && BP [ 1 ] == 0 && BP [ 0 ] == 0 ) {
    for ( i = 0 ; i < 5 ; i ++ ) {
      Second [ i ] = 0; }
      BPReturn [ 0 ] = 5; }
  else if ( Second [ 2 ] == 0 && Timer [ 0 ] <= Timer [ 1 ] && BP [ 0 ] == 1 && BP [ 1 ] == 0 ) {
    for ( i = 0 ; i < 5 ; i ++ ) {
      Second [ i ] = 0; } 
      BPReturn [ 0 ] = 1; }
  else if ( Second [ 2 ] == 1 && Second [ 4 ] == 0 && Timer [ 0 ] <= Timer [ 1 ] && BP [ 0 ] == 1 && BP [ 1 ] == 0 ) {
    for ( i = 0 ; i < 5 ; i ++ ) {
      Second [ i ] = 0; }
      BPReturn [ 0 ] = 3; } 
  Serial.print ( "Valeur de BPReturn [ 0 ] = " );
  Serial.println ( BPReturn [ 0 ] ); }

Bonjour,
Voir ici avant tout

Merci

Demandez au modérateur de déplacer votre question dans le forum principal

Après de multiples recherches sur le net, encore et toujours, il existe plusieurs solutions un peu plus approfondies pour éviter le parasitage.
Cependant celles-ci sont tournées sur le parasitage dû au relâchement du BP tandis que mon problème survient n'importe quand et pas nécessairement à l'appuie ou au relâchement du BP.

Je reviendrais poster le résultat ou la solution pour les personnes rencontrant un problème similaire.

Si vous essayez avec un fil de 10cm avez vous le même soucis?

J'utilise actuellement un fil de 10 cm (+/-) avant de finaliser l’installation et de la cabler définitivement le montage sur un fil de 1m (+/-).

bonjour,
quelle section ton fil?
as tu essayer de torsader tes fils sur toute la longueur?
si tu as un anneau de ferrite trouvé dans une alim HS de pc, passe les fils dedans en plus de la torsade.