Arduino - Bloc automatique

Toutes les discussions sur l'Arduino !

Modérateur : MOD

Répondre
Avatar du membre
jlb
Fécond
Messages : 694
Enregistré le : jeu. 04 oct. 2012, 16:38
Echelle pratiquée : N
Prénom : Jean-Luc
Site Internet : http://modelleisenbahn.triskell.org

Re: Arduino - Bloc automatique

Message par jlb » sam. 09 nov. 2013, 08:38

plutôt

const boolean OCCUPE = true;
const boolean LIBRE = false;

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 18:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 75

Re: Arduino - Bloc automatique

Message par Ramboman » sam. 09 nov. 2013, 08:52

Exact !
Mais il me semble que les deux sont bons...
En tout cas, je n'ai pas d'erreur de compilation...

Avatar du membre
lgperrin
Papotier
Messages : 180
Enregistré le : dim. 04 mars 2012, 13:36
Echelle pratiquée : N-HO
Site Internet : http://www.ligea-modélisme.fr
Localisation : Pontoise
Âge : 58

Re: Arduino - Bloc automatique

Message par lgperrin » sam. 09 nov. 2013, 09:18

Nands a écrit :Je ne comprends pas très bien :
Ce que dit la ligne 10 est exact.
Ce que dit la ligne 500 est exact.
Dans cette itération la zone Z8 qui était occupée s'est libérée.
S1 passera donc du rouge au vert, pourquoi devrait-il y avoir le risque du rouge et du vert allumés ou éteints ensemble ?
L'itération démarre.
On arrive à la ligne 10 : à ce moment la zone est occupé et le feu rouge s'allume car c'est l'équation du feu rouge (pas du feu vert)
On arrive à la ligne 500 : à ce moment la zone est libre et le feu vert s'allume car c'est l'équation du feu vert (pas du feu rouge)
Juste après avoir exécuté la ligne 500 nous avons le feu vert et le feu rouge allumés simultanément.

J'aurais du numéroter les lignes en suivant : ligne 10 équation du feu rouge, ligne 11 équation du feu vert : c'est modifié dans l'article
Modifié en dernier par lgperrin le sam. 09 nov. 2013, 09:35, modifié 1 fois.

Avatar du membre
lgperrin
Papotier
Messages : 180
Enregistré le : dim. 04 mars 2012, 13:36
Echelle pratiquée : N-HO
Site Internet : http://www.ligea-modélisme.fr
Localisation : Pontoise
Âge : 58

Re: Arduino - Bloc automatique

Message par lgperrin » sam. 09 nov. 2013, 09:21

Arduino a écrit :Gérard,

Si on reprend ton schéma publié en page 1, tu confirmes que les trains se déplacent dans le sens inverse des aiguilles d'une montre ? Et que la voie n'est parcourue que dans un seul sens ? Et que le post d'aujourd'hui tient compte de cela ?

Christian
Bien vu Christian, c'est modifié Z8 en Z1

Avatar du membre
lgperrin
Papotier
Messages : 180
Enregistré le : dim. 04 mars 2012, 13:36
Echelle pratiquée : N-HO
Site Internet : http://www.ligea-modélisme.fr
Localisation : Pontoise
Âge : 58

Re: Arduino - Bloc automatique

Message par lgperrin » sam. 09 nov. 2013, 09:24

ramboman a écrit :Pourquoi ne pas utilisé la clarté intrinsèque au langage "C" ?
Plutôt que VRAI ou FAUX, utiliser la puissance du langage :
const boolean OCCUPE = 1;
const boolean LIBRE = 0;
...
Comme tu le verras dans le prochain post, il n'y a aucun intérêt à utiliser une constante.

C'est juste histoire de bien fixer les conventions.

Avatar du membre
Arduino
Prolixe
Messages : 1701
Enregistré le : mer. 25 sept. 2013, 17:14

Re: Arduino - Bloc automatique

Message par Arduino » sam. 09 nov. 2013, 09:50

Comme tu le disais, le fait que tu numérotes tes articles permet aux Arduineurs de s'y référer (le mieux, à mon avis étant de les imprimer). Et il faut bien avoir compris l'article N avant d'essayer de comprendre l'article N+1.

Donc, pour bien suivre ce projet, il ne faut pas hésiter à poser les questions si quelque chose ne parait pas clair ; on peut faire des erreurs en rédigeant un post et trainer cette erreur un bon bout de temps avant de s'en apercevoir. Alors, toute remarque est bonne à prendre.

La description des articles à venir me rend déjà impatient (oui, je sais, ton patron et Madame ... :siffle: )

Bon weekend.

Christian

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 18:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 75

Re: Arduino - Bloc automatique

Message par Ramboman » sam. 09 nov. 2013, 11:08

lgperrin a écrit :
ramboman a écrit :Pourquoi ne pas utilisé la clarté intrinsèque au langage "C" ?
Plutôt que VRAI ou FAUX, utiliser la puissance du langage :
const boolean OCCUPE = 1;
const boolean LIBRE = 0;
...
Comme tu le verras dans le prochain post, il n'y a aucun intérêt à utiliser une constante.

C'est juste histoire de bien fixer les conventions.
L'idée est de remplacer '0' et '1' par "LIBRE" ou "OCCUPE", pour rendre le programme plus lisible...

#define LIBRE 0
#define OCCUPE 1

devraient aussi faire l'affaire ...

Avatar du membre
lgperrin
Papotier
Messages : 180
Enregistré le : dim. 04 mars 2012, 13:36
Echelle pratiquée : N-HO
Site Internet : http://www.ligea-modélisme.fr
Localisation : Pontoise
Âge : 58

Re: Arduino - Bloc automatique

Message par lgperrin » sam. 09 nov. 2013, 13:13

Article 3

Dans cette partie nous ne traiterons pas de l’acquisition des entrées et de la mise à jour des sorties.
Cette partie, fonction du type de carte Arduino et du système d’entrées/sorties additionnel utilisé, sera traitée prochainement.

Reprenons les conditions d’allumage du feu rouge d’un signal énoncé dans l’article 1

Feu rouge (sémaphore) allumé si :
la zone aval est occupée
ou
la zone d'arrêt du signal suivant est occupée

Nous pouvons les formuler autrement :

Si : la zone aval est occupée ou la zone d'arrêt du signal suivant est occupée
Alors : le feu rouge est allumé
Sinon : le feu rouge est éteint

Pour le feu rouge du signal 1 :

Si : la zone Z_1 est occupée ou la zone ZA_2 est occupée
Alors : le feu S_1 est allumé
Sinon : le feu S_1 est éteint

Ce qui se traduira en langage informatique par :

if (Z_1 == false || ZA_2 == false)
{
S_1 = true ;
}
else
{
S_1 = false ;
}

Afin d’avoir un code plus compact, nous pouvons écrire l’instruction « if else » sur une seule ligne

if (Z_1 == false || ZA_2 == false) {S_1 = true ;} else {S_1 = false ;}

Nous pouvons transformer l’expression Z_1 == false en !Z_1 (idem pour ZA_2) ce qui donne :

if (!Z_1 || !ZA_2) {S_1 = true ;} else {S_1 =false ;}

Il existe, une autre manière plus élégante qui consiste à écrire l’équation du feu S_1

S_1 = !Z_1 || !ZA_2 ;


En ce qui concerne le feu jaune (avertissement), ses conditions d’allumage sont :

Si : le feu rouge du signal précédent est allumé et la zone aval est libre et la zone d'arrêt du signal suivant est libre
Alors : le feu jaune est allumé
Sinon : le feu jaune est éteint

Pour le signal 1 :

Si S_2 est allumé et la zone Z_1 est libre et la zone ZA_2 est libre
Alors : le feu A_1 est allumé
Sinon : le feu A_1 est éteint

Ce qui donne :

if (S_2 == true && Z_1 == true && ZA_2 == true) {A_1 = true ;} else {A_1 = false ;}

ou encore

if (S_2 && Z_1 && ZA_2 ) {A_1 = true ;} else {A_1 = false ;}

ou en équation logique

A_1 = S_2 && Z_1 && ZA_2 ;

Pour le feu vert (voie libre) :

Si : le feu rouge du signal précédent est éteint et la zone aval est libre et la zone d'arrêt du signal suivant est libre
Alors : le feu vert est allumé
Sinon : le feu vert est éteint

Pour le signal 1 :

Si S_2 est éteint et la zone Z_1 est libre et la zone ZA_2 est libre
Alors : le feu VL_1 est allumé
Sinon : le feu VL_1 est éteint

Ce qui donne :

if (S_2 == false && Z_1 == true && ZA_2 == true) {VL_1 = true ;} else {VL_1 = false ;}

ou encore

if ( !S_2 && Z_1 && ZA_2 ) {VL_1 = true ;} else {VL_1 = false ;}

ou en équation logique

VL_1 = !S_2 && Z_1 && ZA_2 ;


Pour le signal S1, nous aurons trois lignes de programme correspondant à chaque feu :

if (!Z_1 || !ZA_2) {S_1 = true ;} else {S_1 =false ;}
if (S_2 && Z_1 && ZA_2 ) {A_1 = true ;} else {A_1 = false ;}
if (!S_2 && Z_1 && ZA_2 ) {VL_1 = true ;} else {VL_1 = false ;}

ou encore sous forme d’équation

S_1 = !Z_1 || !ZA_2 ;
A_1 = S_2 && Z_1 && ZA_2 ;
VL_1 = !S_2 && Z_1 && ZA_2 ;

Dans l’article suivant, le programme pour les huit signaux de l’article 1 sera présenté
Modifié en dernier par lgperrin le sam. 09 nov. 2013, 16:25, modifié 1 fois.

Avatar du membre
Arduino
Prolixe
Messages : 1701
Enregistré le : mer. 25 sept. 2013, 17:14

Re: Arduino - Bloc automatique

Message par Arduino » sam. 09 nov. 2013, 15:11

Waouhhh !

Voilà qui avance ! :applause:

Attention tout de même, quand tu parles du compactage du code, à ne pas laisser les gens à la traine ; je veux dire, pour un premier exemple, il est parfois préférable d'avoir un code qui se lit mieux plutôt qu'un code efficace (qu'on réservera au mode expert). Je dis cela pour ceux qui n'ont jamais pratiqué l'algèbre de Boole, mais qui, étant logiques, en font sans le savoir (Comme M. Jourdain :wink: ).

Il faut aussi avoir bien en tête tes notations (Sémaphore, Avertissement, Voie Libre), d'où l'utilité d'imprimer tes articles pour pouvoir s'y référer (et d'avoir le petit plan du ovale). On le redira jamais assez :lol:

Bravo pour ce premier travail.

Christian

Alain17
Démonstratif
Messages : 1426
Enregistré le : ven. 21 juil. 2006, 16:36
Localisation : Entre Cognac, Ré et Oléron

Re: Arduino - Bloc automatique

Message par Alain17 » sam. 09 nov. 2013, 15:16

Juste pour ne pas "confusioner" les débutants, je pense qu'il serait bon, si on travaille avec des variables de type "boolean", d'utiliser uniquement les opérateurs booléens "&&" (ET) et "||" (OU) et pas les opérateurs sur octets "&" (ET bit à bit) et "|" (OU bit à bit).

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 18:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 75

Re: Arduino - Bloc automatique

Message par Ramboman » sam. 09 nov. 2013, 15:17

Question pour le spécialiste : après compilation, est-ce qu'un code 'compact' est plus performant qu'un code lisible ?

Avatar du membre
Arduino
Prolixe
Messages : 1701
Enregistré le : mer. 25 sept. 2013, 17:14

Re: Arduino - Bloc automatique

Message par Arduino » sam. 09 nov. 2013, 15:30

ramboman a écrit :Question pour le spécialiste : après compilation, est-ce qu'un code 'compact' est plus performant qu'un code lisible ?
Cela dépend des cas ; voir à ce sujet ton livre (il me semble que tu l'as) Arduino Cookbook de Michael Margolis, traduit en français par Dominique Maniez chez Dunod "La boîte à outils Arduino, 105 techniques pour réussir vos projets".

Christian

Avatar du membre
lgperrin
Papotier
Messages : 180
Enregistré le : dim. 04 mars 2012, 13:36
Echelle pratiquée : N-HO
Site Internet : http://www.ligea-modélisme.fr
Localisation : Pontoise
Âge : 58

Re: Arduino - Bloc automatique

Message par lgperrin » sam. 09 nov. 2013, 16:24

Alain17 a écrit :Juste pour ne pas "confusioner" les débutants, je pense qu'il serait bon, si on travaille avec des variables de type "boolean", d'utiliser uniquement les opérateurs booléens "&&" (ET) et "||" (OU) et pas les opérateurs sur octets "&" (ET bit à bit) et "|" (OU bit à bit).
Merci, j'en prend note et je rectifie l'article.

Il est vrai qu'après 25 ans de pascal, ce sont de subtilité que je ne maitrise pas encore

Avatar du membre
lgperrin
Papotier
Messages : 180
Enregistré le : dim. 04 mars 2012, 13:36
Echelle pratiquée : N-HO
Site Internet : http://www.ligea-modélisme.fr
Localisation : Pontoise
Âge : 58

Re: Arduino - Bloc automatique

Message par lgperrin » sam. 09 nov. 2013, 16:35

Arduino a écrit :Waouhhh !

Attention tout de même, quand tu parles du compactage du code, à ne pas laisser les gens à la traine ; je veux dire, pour un premier exemple, il est parfois préférable d'avoir un code qui se lit mieux plutôt qu'un code efficace (qu'on réservera au mode expert). Je dis cela pour ceux qui n'ont jamais pratiqué l'algèbre de Boole, mais qui, étant logiques, en font sans le savoir (Comme M. Jourdain :wink: ).
Compactage est une mauvaise expression. Je voulais dire que si l'instruction "If Else" est courte, on peut l'écrire sur une seule ligne, ce qui permet d'avoir plus de code visible à l'écran.

En ce qui concerne l'algèbre de Boole, je ne développe pas mais je l'évoque pour ceux qui voudrons creuser. On peux être un débutant en micro contrôleur et avoir des connaissance en algèbre de Boole.

Avatar du membre
Ramboman
Disert
Messages : 423
Enregistré le : lun. 23 oct. 2006, 18:13
Echelle pratiquée : LGB
Localisation : Waterloo, Belgique
Âge : 75

Re: Arduino - Bloc automatique

Message par Ramboman » sam. 09 nov. 2013, 16:48

Arduino a écrit :
ramboman a écrit :Question pour le spécialiste : après compilation, est-ce qu'un code 'compact' est plus performant qu'un code lisible ?
Cela dépend des cas ; voir à ce sujet ton livre (il me semble que tu l'as) Arduino Cookbook de Michael Margolis, traduit en français par Dominique Maniez chez Dunod "La boîte à outils Arduino, 105 techniques pour réussir vos projets".

Christian
C'est devenu mon livre de chevet... mais c'est un des derniers chapitres que je ne maîtrise pas encore. Promis, je m'y mets ce soir :ange3:

Répondre