afficher différents message depuis un selectionneur

bonjour,
le montage est le suivant
: un sélectionneur 3 positions, 1 écran lcd un arduino uno
le but : afficher 3 messages différents dépendant de la position du slectionneur
voila le code :

#include <Wire.h>
#include <rgb_lcd.h>

boolean __ardublockDigitalRead(int pinNumber)
{
  pinMode(pinNumber, INPUT);
  return digitalRead(pinNumber);
}


//libraries at http://duinoedu.com/dl/lib/grove/EDU_LCD_RGB_Backlight_Grove/ 
rgb_lcd monRgb;

void setup()
{
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  digitalWrite(4,HIGH);
  digitalWrite(5,HIGH);
  monRgb.begin(16,2);
     monRgb.setCursor(0,0);
     monRgb.write("Sélectionner port" );
    delay( 2000 );
}

void loop()
{
  if ((  digitalRead(4) == ( LOW ) ) && (digitalRead(5) == ( LOW ) ) )
  {
    monRgb.clear();
    monRgb.setCursor(0,1);
    monRgb.write("bluetooth" );
    delay( 100 );
  }
  else
  {
    if (  digitalRead(4) == ( HIGH ) ) 
    {
      monRgb.clear();
      monRgb.setCursor(5,1);
      monRgb.write("usb" );
      delay( 100 );
    }
    else
    {
     monRgb.clear();
      monRgb.setCursor(5,1);
      monRgb.write("dvd" );
      delay( 100 );
    }
  }
}

problème :
le message ne change pas (usb) lorsque l'on tourne le sélectionneur
pourtant quand je mesure au multimètre les différences de potentiels des sorties d4 d5 d6 et de la masse de l'arduino j'observe bien 5v ou 0v selon la sortie sélectionnée

Sans titre.png

Bonjour,

Traces les valeurs de digitalRead(4), digitalRead(5), digitalRead(6) avec des Serial.print().

Tu as un monRgb.clear(); chaque fois que tu passes dans la loop. Ton message va s'afficher 100 ms, ça va clignoter.

bonjour , j' ai pas trop de connaissance en prog , par contre , je trouve bizare

d' avoir des pins 4 et 5 en entrées

pinMode(4, INPUT);
        pinMode(5, INPUT);

de les mettres a un

digitalWrite(4,HIGH);
  digitalWrite(5,HIGH);

puis plus tard de poser une condition sur leur état.

if ((  digitalRead(4) == ( LOW ) ) && (digitalRead(5) == ( LOW ) ) )

??

il serait préférable de mémoriser l'état courant (0, 1 ou 2)
et de n'agir sur l'écran qu'en cas de changement d'état.

PBZOOM:
bonjour , j' ai pas trop de connaissance en prog , par contre , je trouve bizare
d' avoir des pins 4 et 5 en entrées
de les mettres a un

C'est l'équivalent de digitalMode(4,INPUT_PULLUP);

L'affichage ne clignote pas 0.1s est un temps de rafraichissement cohérent avec la persistance rétinienne
J'ai pensé à un problème de masse et j'ai relié la masse de l'arduino à l'ensemble du système mais pas de changement
Mémoriser l'état courant est une idée, faut il utiliser des interruptions?

Non, ça devrait fonctionner, c'est qu'il y a un problème sur les entrées.
Affiches les valeurs lues sur les entrées sur le moniteur série.

Il y a quelque chose qui ne va pas dans ton schéma
Sans titre.png

Tu utilises le pullup interne, donc le commun devrait être a GND et non au 5V

dim22:
Mémoriser l'état courant est une idée, faut il utiliser des interruptions?

Pas du tout.

Tu crées une variable qui vaudra 0, 1 ou 2 selon l'état.
Dans le setup, tu l'initialises à la bonne valeur en testant les pins.
Dans le loop, tu tests les pins, tu détermines l'état (fais une fonction qui sera aussi utilisée dans le setup) et si c'est le même que précédemment, tu ne fais rien.
Si l'état a changé, tu notes la nouvel état dans ta variable et tu fais l'action que tu as à faire.

Autre incohérence avec le schéma, tu ne testes pas D6 dans ton soft mais uniquement D4 et D5.

voila ça marche:
Le problème était au niveau des résistances de pull up
effectivement en mettant le commun à la masse et en permutant low et high dans le script ça marche
merci à tous