pin 0 ; pin 1 (rx&tx) en pinmode(input), probl

bonjour à tous,

je suis sur un projet 16out/3in numériques... le hardware marche impec, la partie logicielle pour les sorties aussi. Et, après avoir épluché les topics anglais/français et lu les references et un bouquin à fond, je bloque méchant : mes entrées digitals 0 et 1 (tx/rx) restent bloquées en position haute (~5v mesurée au multimètre) ; je n'utilise bien sur pas de communication série! et mon projet est alimenté de manière autonome... ces deux entrées devrais me permettre de swicher sur 16 ensembles de chaines de données... voilà le bout de code incriminé :

void setup()
{
 pinMode(0, INPUT); //data --
 pinMode(1, INPUT); //data ++
 pinMode(2, INPUT); // lancement séquence
 pinMode(3, INPUT); // *vide*
 pinMode(4, OUTPUT);  //led 1
 pinMode(5, OUTPUT);  //led 2 
 pinMode(6, OUTPUT);  //led 3
 pinMode(7, OUTPUT);  //led 4
 pinMode(8, OUTPUT);  //led 5
 pinMode(9, OUTPUT);  //led 6
 pinMode(10, OUTPUT); //led 7
 pinMode(11, OUTPUT); //led 8
 pinMode(12, OUTPUT); //led 9
 pinMode(13, OUTPUT); //led 10
 pinMode(14, OUTPUT); //led 11
 pinMode(15, OUTPUT); //led 12
 pinMode(16, OUTPUT); //led 13
 pinMode(17, OUTPUT); //led 14
 pinMode(18, OUTPUT); //led 15
 pinMode(19, OUTPUT); //led 16
}

void loop()
{
  digi0=digitalRead(0);
  digi1=digitalRead(1);
  if (digi0==1)
  {
    if(data==1){data = 16;}
    else {data=data-1;};
    digitalWrite(data+3, HIGH); 
    delay(250);
    digitalWrite(data+3, LOW);
  };
  if (digi1==1)
  {
    if(data==16){data=1;}
    else {data=data+1;};
    digitalWrite(data+3, HIGH); 
    delay(250);
    digitalWrite(data+3, LOW);
  };
}

du coup j'ai l'affichage des leds correspondantes au n° de data qui défile sans s'arrêté...

une idée?

merci...!

Comment tu déclares tes pins (avant le setup) ?

alors j'ai du rater quelque chose... avant le setup je n'ai déclaré que des variables et chaines dont j'aurais besoin. j'ai déjà réalisé quelques protos sans avoir à déclarer les pins en dehors du setup(), mais, par acquis de conscience je n'utilisais pas les fameuses E/S des pins 0 et 1 (car j'expérimentais avec l'alimentation usb du pc, et que je n'avais pas besoins d'autant d'E/S)...

comment peut-on alors les "forcer" à un état de repos bas? (j'ai encore fouillé qql heures et je craque un peu désolé...)

merci pour cette réponse rapide!

Si tu es en "INPUT" normalement tu n'as pas à forcer l'état.

oui, c'est que je pensais, et j'ai shunté mes 3 entrées à la masse avec des résistances de 18k (trop?) en mesurant au multi j'ai :

pin0:4.7V pin1:5.1V pin2:0V (avec celle là j'ai mon défilement de leds sans problème) pin3:0.002V (non shunté)

j'ai retiré les variables 'digi0' et 'digi1', en utilisant directement digitalRead() ça fonctionne très bien (et je ne suis pas pour tout ces renommages, on s'embrouille vite...)

un ptit bout de code pour les mettre au pas ces deux pins?

merci de ton attention :)

Normalement en suivant cet exemple ça devrait aller :

http://arduino.cc/en/Reference/DigitalRead

merci, mais j’ai déjà écumé tout les exemples fournis, digitalRead fonctionne parfaitement pour toute les pins 2 à 19 mais pas pour 0 et 1 qui reste à l’état haut même shunté à la masse, je vais tenté de réduire les résistances de shunt ou d’inverser l’utilisation de ces deux premières pins (action à l’état bas ; mais j’aime pas trop, ça consomme plus, c’est dangereux pour la platine et pas très élégant)

sinon je me rabat pour un défilement dans un seul sens (pas très agréable à l’usage) en utilisant la dernier pin disponible (pin3)

ça m’intrigue quand même… j’ai revu tout mon montage, soudures propres, contacts impeccables, résistances ok…
problème matériel sur la carte arduino?

merci quand même

bon, ça à l'air de fonctionner en inversion (mes deux poussoir mette à la masse pin0 et pin1, et permettent le défilement dans les deux sens quand digitalRead()=0) et je n'ai que qql mA de drain, donc pas dangereux pour la platine...

je reste toutefois dubitatif

:-?