Entrées qui restent activées???

bonjour a tous

j’ai fait un programme simple (et non optimiser du tout) mais j’ai une erreur… j’ai beau chercher je ne la trouve pas.
Le but de se programme est juste d’allumer la led 1 lorsque le bouton poussoir 1 est allumé et ainsi de suite jusqu’au bouton 16 avec la Led 16…

J’ai tester ce programme sur 2 cartes differentes et j’ai le meme soucis ==> les led 11, 12 13 14 reste allumées constamment.

j’ai également tester un petit chenillard au début de ce code, il fonctionne parfaitement donc ce n’est pas un probleme hardware sur les sorties

voila le programme

#define led10 9
#define led11 10
#define led12 11
#define led13 12
#define led14 13
#define led15 14
#define led16 15

#define bt1 16
#define bt2 17
#define bt3 18
#define bt4 19
#define bt5 20
#define bt6 21
#define bt7 22

void setup(){

pinMode( led10, OUTPUT );
pinMode( led11, OUTPUT );
pinMode( led12, OUTPUT );
pinMode( led13, OUTPUT );
pinMode( led14, OUTPUT );
pinMode( led15, OUTPUT );
pinMode( led16, OUTPUT );

pinMode( bt1, INPUT );
pinMode( bt2, INPUT );
pinMode( bt3, INPUT );
pinMode( bt4, INPUT );
pinMode( bt5, INPUT );
pinMode( bt6, INPUT );
pinMode( bt7, INPUT );
}

void loop()
{
int et_bt1 = digitalRead(bt1);
int et_bt2 = digitalRead(bt2);
int et_bt3 = digitalRead(bt3);
int et_bt4 = digitalRead(bt4);
int et_bt5 = digitalRead(bt5);
int et_bt6 = digitalRead(bt6);
int et_bt7 = digitalRead(bt7);

digitalWrite(led10, !et_bt7);
digitalWrite(led11, !et_bt6);
digitalWrite(led12, !et_bt5);
digitalWrite(led13, !et_bt4);
digitalWrite(led14, !et_bt3);
digitalWrite(led15, !et_bt2);
digitalWrite(led16, !et_bt1);
}

les “bt3”, “bt4”, “bt5”, “bt6” (soit les pin10 11 12 13) sont toujours activées (pourtant cela fait pareil sur deux cartes totalement differentes ??)

si queiqu’un peut me filer un coup de main, ce serait super sympa,

merci

nico

Oh la vache.. :astonished:

Utilise des tableaux "Array" sa va te simplifié la vie ! Les pins 0-1 ne doivent pas être utilisée elle sont reliées directement aux Tx Rx.

oui je connais les array, je te remercie, mais j’ai refait le programme en plus “basique” car je voulais voir si le soucis venait de mon programme.

les pin0 et 1 semblent fonctionner correctement le soucis vient des pins 10, 11, 12, 13 qui restent activés tout le temps ??

Y'a des pull-up de cablés ?

Parce que tu n'en a pas mis en setup...

Tu peux également vérifier l'état de tes entrées (si celles-ci basculent bien lorsque l'entrée change d'état) grace au terminal avec des instructions du type

Serialprint(digitalRead(bt4));

Toutes les entrées sont cablées de la meme facon et aucun court circuit (je viens encore de vérifier)

toutes les sorties sont cablées de la meme facon (shield de test avec 1 led et 1 resistance / sortie)

je viens de lancer un autre programme et les sorties 10 11 12 13 marchent correctement

sinon le prosc est un atmega 644p ( comme une sanguino)

digitalWrite(led10, !et_bt7)

il y a une erreur sur cette ligne et les suivantes
! est un opérateur logique
le bon opérateur est ~

digitalWrite(led10, ~et_bt7);

Cela dit je ne suis pas certain que le problème vienne de là.

Bubule:
Y'a des pull-up de cablés ?

Parce que tu n'en a pas mis en setup...

Tu peux également vérifier l'état de tes entrées (si celles-ci basculent bien lorsque l'entrée change d'état) grace au terminal avec des instructions du type

Serialprint(digitalRead(bt4));

je viens de verifier les entrées au multimetre et toutes sont ok....

Et au terminal ?

fdufnews:

digitalWrite(led10, !et_bt7)

il y a une erreur sur cette ligne et les suivantes
! est un opérateur logique
le bon opérateur est ~

digitalWrite(led10, ~et_bt7);

Cela dit je ne suis pas certain que le problème vienne de là.

non le soucis ne vient pas de la, le "!" fonctionne parfaitement

sinon pour la sortie terminal

les "et_bt1", "et_bt2", "et_bt7" fonctionnent parfaitement (1 a vide et 0 lorsque l’entrée est activé")

par contre les "et_bt3", "et_bt4", "et_bt5" et "et_bt6" restent toujours a "1"... donc le soucis vient des entrées et non des sorties.... mais pourquoi?????

Merci de votre aide

Ok, mais as tu testé les entrées au terminal ?

Serialprint(digitalRead(bt3)); ....; Serialprintln(digitalRead(bt6));

ca revient pas au meme ce que j'ai fait?

Non, çà permettra de voir si tes entrées basculent bien en fonction du changement d'état physique.

je viens de tester, c'est exactement pareil

l'entree est a 1 et passe a 0 lorsque l'entrée est activée sur toutes les entrees sauf sur les 4 incriminées...

les bt3 bt4 bt5 et bt6 reste constamant a 0 comme si elles etaient toujours activées? j'ai tester avec 2 cartes differents (atmel 644p et 1284p) meme soucis

Programme tes pull up. (Tu dois avoir un blême sur ceux de ta carte à bouton).

desole je comprends pas ce que tu veux dire...

j'ai essayer avec 2 cartes differentes (une avec des bp et une sans et c'est pareil)

comment programmer mes pull up?

ce que je comprends pas c'est pourquoi la plupart marche et ces 4 non?

merci de ton aide

Essaye sur la sortie 8 voir si tu as les même symptômes

n1c0l45:
desole je comprends pas ce que tu veux dire…

comment programmer mes pull up?

bon je viens de tester

void setup(){
Serial.begin(9600);
pinMode(18, INPUT_PULLUP);
pinMode(15, OUTPUT);

}

void loop(){
int sensorVal = digitalRead(18);
Serial.println(sensorVal);

if (sensorVal == HIGH) {
digitalWrite(15, LOW);
}
else {
digitalWrite(15, HIGH);
}
}

ca fait pareil......
les entrées 18, 19, 20, 21 restent activées tout le temps.... et cela sur mes 3 cartes de test (cablées differentement avec des ecu differents)

la je seche????

voila les pins entrées qui restent activées (que ce soit sur le 644p ou le 1284p)

Bonjour,

j'aurais préféré çà (je sais que çà fonctionne. Pas encore testé l'instru INPUT_PULLUP)

void setup(){
  Serial.begin(9600);
  pinMode(18, INPUT);          
  digitalWrite(18, HIGH);
  pinMode(15, OUTPUT);
}

As tu testé la même chose (au terminal), mais juste avec un fil en direct sur l'entrée (GND --> Entrée 18)?