Bonjour Danièl,
Je pense qu'on peut dire que ton programme est plutôt mal conçu et n'a pas la valeur didactique que tu souhaites.
Si tu veux intégrer d'autres ILS, d'autres boutons, d'autres Leds, tu n'y arriveras pas !
Il faut toujours avoir en tête que la loop() est une boucle qui se répète indéfiniment. A l'intérieur de la loop(), il doit y avoir une suite d'actions (conditionnées par des tests) et RIEN qui l'arrête : Donc il est interdit d'écrire ça :
while (digitalRead (ILS) == HIGH) { // on attent le retour du train 1
}
Car ton programme s'arrête si la condition n'est pas réunie !
A la place il faut écrire :
if (digitalRead (ILS) == HIGH) { // au retour du train 1
//faire ce qu'il y a à faire dans ce cas
}
Autre anomalie à fuir systématiquement car cela stoppe aussi ton programme (plus rien ne se passe pendant ce temps et, comme le disait Christophe, rien n'empêche ta loco de sortir des rails à l'improviste) :
delay(attente_0);
A la place il faut utiliser une variable globale
long int temps_0
Quand tu veux démarrer la tempo tu écris
temps_0 = millis();
Quand tu veux tester la tempo pour savoir si la durée attente_0 est atteinte, tu écris :
if (millis() - temps_0 >= attente_0) {
// faire ce qu'il faut faire quand la tempo attente_0 est atteinte
}
Maintenant que plus rien ne bloque ton programme, il faut repenser entièrement ce que tu veux lui faire faire en étudiant toutes les actions possibles et toutes les conditions qui permettent de réaliser ces actions, sachant que la loop() va répéter tout cela indéfiniment et très rapidement.
Il faudra donc utiliser des variables d'état pour chaque action, qui autorisent chaque action dans un test if.
Tu trouveras des tonnes d'exemples sur Locoduino qui te montrent comment faire tout cela, comme celui de cet article :
http://www.locoduino.org/spip.php?article117Si tu as besoin de plus d'explications n'hésites pas à demander.
Cordialement
Dominique