Forums LR PRESSE

Où il est question de trains, petits et grands

  • Advertisement

Arduino - Bloc automatique

Toutes les discussions sur l'Arduino !

Modérateur: MOD

Re: Arduino - Bloc automatique

Publié: Sam 09 Nov 2013, 08:38 
plutôt

const boolean OCCUPE = true;
const boolean LIBRE = false;
Avatar de l’utilisateur
jlb
Fécond
 
Messages: 679
Inscrit le: Jeu 04 Oct 2012, 15:38
Echelle pratiquée: N
Prénom: Jean-Luc

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
Ramboman
Disert
 
Messages: 423
Inscrit le: Lun 23 Oct 2006, 17:13
Localisation: Waterloo, Belgique
Âge: 74
Echelle pratiquée: LGB

Re: Arduino - Bloc automatique

Publié: 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
Dernière édition par lgperrin le Sam 09 Nov 2013, 09:35, édité 1 fois au total.
Avatar de l’utilisateur
lgperrin
Papotier
 
Messages: 174
Inscrit le: Dim 04 Mars 2012, 13:36
Localisation: Pontoise
Âge: 57
Echelle pratiquée: N-HO

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
lgperrin
Papotier
 
Messages: 174
Inscrit le: Dim 04 Mars 2012, 13:36
Localisation: Pontoise
Âge: 57
Echelle pratiquée: N-HO

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
lgperrin
Papotier
 
Messages: 174
Inscrit le: Dim 04 Mars 2012, 13:36
Localisation: Pontoise
Âge: 57
Echelle pratiquée: N-HO

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
Arduino
Prolixe
 
Messages: 1698
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
Ramboman
Disert
 
Messages: 423
Inscrit le: Lun 23 Oct 2006, 17:13
Localisation: Waterloo, Belgique
Âge: 74
Echelle pratiquée: LGB

Re: Arduino - Bloc automatique

Publié: 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é
Dernière édition par lgperrin le Sam 09 Nov 2013, 16:25, édité 1 fois au total.
Avatar de l’utilisateur
lgperrin
Papotier
 
Messages: 174
Inscrit le: Dim 04 Mars 2012, 13:36
Localisation: Pontoise
Âge: 57
Echelle pratiquée: N-HO

Re: Arduino - Bloc automatique

Publié: 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
Avatar de l’utilisateur
Arduino
Prolixe
 
Messages: 1698
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Arduino - Bloc automatique

Publié: 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).
Alain17
Démonstratif
 
Messages: 1355
Inscrit le: Ven 21 Juil 2006, 15:36
Localisation: Entre Cognac, Ré et Oléron

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
Ramboman
Disert
 
Messages: 423
Inscrit le: Lun 23 Oct 2006, 17:13
Localisation: Waterloo, Belgique
Âge: 74
Echelle pratiquée: LGB

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
Arduino
Prolixe
 
Messages: 1698
Inscrit le: Mer 25 Sep 2013, 16:14

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
lgperrin
Papotier
 
Messages: 174
Inscrit le: Dim 04 Mars 2012, 13:36
Localisation: Pontoise
Âge: 57
Echelle pratiquée: N-HO

Re: Arduino - Bloc automatique

Publié: 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 de l’utilisateur
lgperrin
Papotier
 
Messages: 174
Inscrit le: Dim 04 Mars 2012, 13:36
Localisation: Pontoise
Âge: 57
Echelle pratiquée: N-HO

Re: Arduino - Bloc automatique

Publié: 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:
Avatar de l’utilisateur
Ramboman
Disert
 
Messages: 423
Inscrit le: Lun 23 Oct 2006, 17:13
Localisation: Waterloo, Belgique
Âge: 74
Echelle pratiquée: LGB

PrécédentSuivant

Retour vers Arduino

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 5 invité(s)