1141
Vos projets / Re : arduino gare cachee
« le: février 19, 2016, 09:23:55 am »
Bonjour Marc.
Ce qu'essaye d'expliquer bricoleau est que, en l'état le programme ne fonctionnera pas car il fait des suppositions sur le fonctionnement des ILS qui sont fausses. En effet, en utilisation réelle, le déclenchement de l'ILS sera fugace et par conséquent il faudrait que le programme mémorise ce déclenchement dans un variable booléenne par exemple. Cette variable sera remise à false quand le programme fera quitter la voie au train.
Ceci dit, comme tu simules, les conditions sont différentes et tu fais sans doute en sorte que les 3 ILS soient déclenchés en même temps.
Mais il faut également filtrer les ILS. En l'état unit est incrémenté à chaque fois qu'un des ILS est déclenché. Or si le même ILS reste déclenché d'une exécution de loop à la suivante, unit est incrémenté 2 fois pour ce même ILS et au moment où le programme le teste, il ne vaut jamais 3 et unit dépasse cette valeur. Supposons par exemple le scénario suivant : à la première exécution de loop un train déclenché l'ILS 1 unit est incrémenté. A la seconde exécution unit est incrémenté une seconde fois. A la 3e exécution de loop, un second train arrive et déclenché l'ILS 2, unit est incrémenté 2 fois, une fois pour l'ILS 1 et une fois pour l'ILS 2. Au moment du test il vaut 4 et n'a jamais valu 3.
Ce qui t'intéresse en fait c'est le passage de LOW à HIGH pour chaque ILS. Le mieux est d'utiliser une bibliothèque qui fait ça pour toi. Par exemple Button : http://playground.arduino.cc/Code/Button
La fonction uniquePress est celle qu'il te faut.
Ce qu'essaye d'expliquer bricoleau est que, en l'état le programme ne fonctionnera pas car il fait des suppositions sur le fonctionnement des ILS qui sont fausses. En effet, en utilisation réelle, le déclenchement de l'ILS sera fugace et par conséquent il faudrait que le programme mémorise ce déclenchement dans un variable booléenne par exemple. Cette variable sera remise à false quand le programme fera quitter la voie au train.
Ceci dit, comme tu simules, les conditions sont différentes et tu fais sans doute en sorte que les 3 ILS soient déclenchés en même temps.
Mais il faut également filtrer les ILS. En l'état unit est incrémenté à chaque fois qu'un des ILS est déclenché. Or si le même ILS reste déclenché d'une exécution de loop à la suivante, unit est incrémenté 2 fois pour ce même ILS et au moment où le programme le teste, il ne vaut jamais 3 et unit dépasse cette valeur. Supposons par exemple le scénario suivant : à la première exécution de loop un train déclenché l'ILS 1 unit est incrémenté. A la seconde exécution unit est incrémenté une seconde fois. A la 3e exécution de loop, un second train arrive et déclenché l'ILS 2, unit est incrémenté 2 fois, une fois pour l'ILS 1 et une fois pour l'ILS 2. Au moment du test il vaut 4 et n'a jamais valu 3.
Ce qui t'intéresse en fait c'est le passage de LOW à HIGH pour chaque ILS. Le mieux est d'utiliser une bibliothèque qui fait ça pour toi. Par exemple Button : http://playground.arduino.cc/Code/Button
La fonction uniquePress est celle qu'il te faut.