Salut,
Il faut plus de précision. Le premier micro switch (celui qui fait avancer 1 par 1 les leds) ne sert plus ?
Ton micro switch 1, 2 et 3 ont il un changement d'état impulsif ou fixe car le code ne va pas être le même. J'explique la question. Si le changement d'état est fixe, genre mesure de niveau, ou si le changement d'etat est impulsif, genre passage d'une pièce. Car si c'est le dernier cas je rejoins Noelfhim, tu dois utiliser les interruptions (les ports 2, 3, 21 puisque tu as un Mega2560). En effet en utilisant des pièces comme déclencheur (ce qui semble logique vu le type de machine que tu veux faire) de passage, l'impulsion sera trop brève pour être prise en compte. Maintenant si c'est une mesure de hauteur cela implique une séquence. Supposons que les contacts soient :
- 1 position basse
- 2 position intermédiaire
- 3 position haute
Le chargement se faisant par le haut le switch 3 va faire générer une impulsion, puis le switch 2 idem et enfin le switch 1 la se fermer. et ainsi de suite jusqu’à atteindre le niveau du switch 2 et ainsi de suite.
Il vaut mieux comprendre exactement ce qui est a faire et le but final,car pisser du code par plaisir n'est pas une solution en soit, il faut que le code soit aussi pertinent. car lors de la mise en pratique tu vas aller au devant de problème de fonctionnement car toutes les informations n'auront pas été données et une fois en place changer tes broches, le programme va être plus compliqué que si tout est clair au départ.
Maintenant pour revenir à ta dernière demande que tu allumes 5 leds ou 1 seule c'est le même chose. C'est 1 led avec 4 autres en //.
Précise comment sont placés tes switchs, comment ils sont actionnés et s'il y a des risques de séquence.
qu'il y ai 1 ou 3 BP le code est plus ou moins le même.
Et le code est celui de l'exemple Arduino "Button" que tu peux trouver dans 02. Digital.
/*
Bouton
Allume une LED branchée sur la broche 13 lorsque le bouton
branché sur la broche 2 est appuyé.
*/
// Initialisation des constantes :
const int buttonPin = 2; // Numéro de la broche à laquelle est connecté le bouton poussoir
const int ledPin = 13; // Numéro de la broche à laquelle est connectée la LED
// Déclaration des variables :
int buttonState = 0; // variable qui sera utilisée pour stocker l'état du bouton
// le code dans cette fonction est exécuté une fois au début
void setup() {
// indique que la broche ledPin est une sortie :
pinMode(ledPin, OUTPUT);
// indique que la broche ledPin est une entrée :
pinMode(buttonPin, INPUT);
}
// le code dans cette fonction est exécuté en boucle
void loop(){
// lit l'état du bouton et stocke le résultat
// dans buttonState :
buttonState = digitalRead(buttonPin);
// Si buttonState est à 5V (HIGH→bouton appuyé)
if (buttonState == HIGH) {
// on allume la LED
digitalWrite(ledPin, HIGH);
}
else {
// sinon on éteint
digitalWrite(ledPin, LOW);
}
}
La difference avec ta demande il n'y a que 1 bouton, mais le principe est le même 1 bouton allume 1 led.
il te suffit d'integrer le bouton 2 avec la led 2 et le bouton 3 avec la led 3 (chaque led representant réellement un groupe de 5 leds en // avec leurs résistances individuelles).
Si maintenant tu veux te frotter aux interruptions.
/*
Exemple pour démontrer l'utilisation des interruptions.
Bouton poussoir, connecté entre GND et la broche 2 (INT0).
Résistance PULLUP activé pour cette broche. Condensateur de 100nF
en parallèle avec le bouton recommandé.
*/
#define boutonPin 2 // C'est l'entrée INT0
// Pour qu'on puisse changer la valeur d'une variable depuis une fonction de
// gestion d'interruption, il faut que la variable soit déclaré "volatile"
volatile boolean changed = false;
// Notre fonction de traitement d'interruption. Le strict minimum, souvenez vous.
void doContact() {
changed = true;
// Difficile de faire + court
}
void setup() {
// Broche en entrée avec résistance de pull-up
pinMode(boutonPin, INPUT_PULLUP);
// Attacher notre fonction ISR, détéction de flanc déscendant (5v vers 0v)
attachInterrupt(0, doContact, FALLING);
// Montrer que nous sommes la
Serial.begin (115200);
Serial.println("Hello");
}
void loop(){
if ( changed ) {
changed = false;
Serial.println("Ha ! Vous avez touché le bouton");
// Vous pouvez aussi faire des actions comme allumer une autre led
// ou commander un servo moteur, ...
}
delay(1000);
// Vous pouvez ajouter du code ici pour faire clignoter un led, etc.
}