Avec le schéma en pièce jointe, Je veux arriver au cas de figure suivant:
-Quand j'appuie sur un bouton S3 par exemple, la Led correspondante s'allume (S1->D1, S2->D2, S3->D3 et S4->D4) Normal.
-Ensuite quand j'appuie sur un second bouton (S1) en même temps que S3 c'est toujours D3 qui reste allumée et c'est seulement quand je relâche S3 que La Led D1 s'allume.
C'est à dire que si j'appuie sur un bouton puis sur un autre c'est toujours le premier bouton qui garde sa valeur même si quelconque autre bouton est appuyé la mise à jour se fait une fois le premier bouton relâché.
Non il faut regarder le schéma électrique :
Si S1 est appuyé n'importe quelle combinaison avec S2 S3 et S4 sera équivalente à S1.
Idem pour S2 avec S3 et S4 = S2
Idem pour S3 avec S4 = S4
Ce doit être les conditions dans la série de if qui ne sont pas bonnes.
PS les valeurs de résistances R12 R13 R14 R15 sont illisibles.
Pour être clair dans ce que je voudrais faire.
Avec le code ci-dessous, quand on appuie sur S1 puis sur S2 où bien S2 puis sur S4 ça se passe comme je le souhaite mais pas si j'appuie sur S2 puis S1 où bien S4 puis sur S2
En fichier joint, le schéma avec les valeurs de résistances.
Il me semble avoir répondu ICI.
A partir du moment où tu appuies sur S1, les autres boutons sont court-circuités.
S1 relie A0 à la masse. Donc si tu appuies sur S2, S3 ou S4, comme A0 est déjà à ZERO ... NO WAY.
Ne cherche pas à coder mais décrit en français ce qu'il doit se passer avec les conditions associées et tu verra si ta solution est possible.
Tu as une autre solution qui fonctionnerait :
Regardes ce qu'il se passe si tu modifies le câblage des contacts et que tu mets un contact en parallèle sur chaque résistance.
Tu verra que cela fonctionnera mieux.
Tu peux aussi regarder du coté des réseaux R/2R -> les différentes valeurs de tension seront mieux réparties.
-Si deuxième bouton appuyé simultanément avec 1er bouton : Choix = EtatPrécédent
-Si premier bouton relâché : Choix = lb
J'ai tenté quelque chose avec les boutons 3 et 4:
int Choix = 0;
int PrecEtat = 0;
int Lis_boutons_ana() {
int EntreeAna = analogRead(A0);
if (EntreeAna < 50) return 1;
if (EntreeAna > 100 && EntreeAna < 250) return 2;
if (EntreeAna > 250 && EntreeAna < 400) return 3;
if (EntreeAna > 400 && EntreeAna < 600) return 4;
if (EntreeAna > 900) return 0;
}
void setup() {
Serial.begin(9600);
pinMode(A0 , INPUT);
pinMode(2 , OUTPUT);
pinMode(3 , OUTPUT);
pinMode(4 , OUTPUT);
pinMode(5 , OUTPUT);
}
void loop() {
int lb = Lis_boutons_ana();
if (lb == 1) {
Choix = 1;
}
if (lb == 2) {
Choix = 2;
}
if (lb == 3) {
if (PrecEtat == 0)
{
Choix = 3;
PrecEtat = 3;
}
if (lb != PrecEtat and lb > 0) {
Choix = PrecEtat;
}
}
if (lb == 4) {
if (PrecEtat == 0)
{
Choix = 4;
PrecEtat = 4;
}
if (lb != PrecEtat and lb > 0) {
Choix = PrecEtat;
}
}
if (lb == 0) {
PrecEtat = 0;
Choix = 0;
}
Serial.print(lb);
Serial.print(" ");
Serial.print(Choix);
Serial.print(" ");
Serial.println(PrecEtat);
//Serial.println(Choix);
switch (Choix) {
case 0:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 2:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 3:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
case 4:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
break;
}
}
Le Problème c'est qu'en analogique on ne peut pas savoir si deux boutons sont appuyés en même temps ni si un bouton est relâché.
C'est bien ça?
Sinon si quelqu'un sait le faire ça m'aiderai.
68tjs:
Tu as une autre solution qui fonctionnerait :
Regardes ce qu'il se passe si tu modifies le câblage des contacts et que tu mets un contact en parallèle sur chaque résistance.
Tu verra que cela fonctionnera mieux.
Tu peux aussi regarder du coté des réseaux R/2R -> les différentes valeurs de tension seront mieux réparties.
+1
Un circuit imprimé ne se fait que quand on est assuré que le montage est fonctionnel. C'est une évidence.
Clairement tu aurais du maquetter pour vérifier ton schéma avant de faire le circuit imprimé.
Tout n'est pas perdu pour autant : un circuit imprimé cela se bidouille avec un fer à souder, un scalpel pour couper les pistes en cuivre et du fil.
Il te faut ABSOLUMENT obtenir des tensions différentes et avec suffisamment d'écart entre deux tensions voisines pour que cela reste mesurable.
Je suis en total accord avec ce qu'à dit hbachetti : ton schéma ne fera JAMAIS ce que tu veux faire, ce n'est pas la peine de revenir dessus.
Par contre je reviens sur le réseau R/2R qui est le schéma qui te donnera la meilleure répartition des tensions.
Mais il va y avoir du câblage, possible sur plaquette pastillée.