Retour à la page précédente

Commun

M. GUITARD M.ROTY M. THIERIOT

Simulons l'allumage des feux d'un carrefour avec Quick Basic!


La page a été mise à jour le 

Prérequis

Comment stocker et coder des informations ?

Simulons l'allumage d'un carrefour avec ELWIN

Quand l'ordinateur commande

 

Utilitaire

Lancement de QuickBasic

 

Introduction

L'objectif de ce TP est créer un programme en quick basic afin de contrôler le fonctionnement des feux d'un carrefour.

Ce problème sera décomposé en plusieurs étapes :


Plan

1 - Comment commander les feux avec Quick Basic?

2 - Créons notre premier cycle

3 - Programmons un fonctionnement continu

4 - Comment distinguer le jour et la nuit ?

5 - Automatisation jour-nuit

6 - Compte rendu

Rédacteur : JM

Retour au sommaire général

 
 
 

-

Retour en haut de la page

1 - Comment commander les feux avec Quick Basic?

Expériences

Aides à la programmation

Alimenter le module DEL en +15V, 0V, -15 V puis connecte ce module à ton ordinateur.

Connecter le module feux tricolore sur le module DEL.

En se servant du QuickBasic, dresser la liste des nombres décimaux (et de leur conversion binaire) qui vont être utiles pour commander des feux tels qu'ils fonctionnent en France.

Remarque : L'allumage des feux est commandé par 8 broches du port parallèle. Il est alors possible de commander l'état de ces 8 broches à l'aide du logiciel ELWIN mais aussi du QuickBasic (voir ci-contre).

Avec le QuickBasic, quand tu écris une ligne de programme " OUT &h378,27  ", les 8 broches du port parallèle prennent respectivement les états 0 0 0 1 1 0 1 1 qui est la conversion en binaire de 27.
Bien noter que 0 0 0 1 1 0 1 1 correspond à une information contenue dans un octet. On indique alors dans la commande sa conversion en décimal.

Si on décompose l'ordre donné à l'ordinateur :

  • OUT : mettre la sortie

  • &h378: situé à l'adresse 378

  • 27 : dans l'état correspondant à la conversion binaire de 27.

 

Retour en haut de la pageParagraphe suivant

 

-

Retour en haut de la page

2 - Créons notre premier cycle

 

Expériences

Aides à la programmation

Créer un programme qui va faire fonctionner les feux du carrefour sur un cycle : Les voitures pourront passer une fois sur la 1ère rue, une fois sur la deuxième rue.

N'oublie pas d'enregistrer ton programme sous le non cyclfeux.bas par exemple.

Un tel programme nécessite l'utilisation d'un ordre du type SLEEP (3).
Un tel ordre inséré après une ligne de programme demande à l'ordinateur d'attendre 3 secondes avant de passer à la ligne suivante.
Essaye d'autres durées ! Qu'est-ce qui n'est pas possible ?

 

xxx

Retour en haut de la pageParagraphe suivant

 

-

Retour en haut de la page

3 - Programmons un fonctionnement continu

 

Expériences

Aides à la programmation

Créer un programme qui va faire fonctionner les feux du carrefour en continu. Pour répéter plusieurs fois la même opération, les langages de programmation utilise des boucles : Choisir le type de boucle qui semble le mieux convenir.

- 1er exemple de boucle : Ce genre de boucle appelé boucle FOR-NEXT permet de répéter une série d'action un nombre déterminé de fois. Essayer le programme suivant :

CLS
FOR n=1 to 5
PRINT "BONJOUR"
PRINT "CA VA ?"
NEXT n

- 2ème exemple de boucle : Ce genre de boucle appelée boucle jusqu'à permet de répéter une série d'action un nombre illimité de fois jusqu'à ce qu'une condition soit remplie. Essayer le programme suivant :

CLS
DO
PRINT "BONJOUR"
PRINT "CA VA ?"
LOOP UNTIL INKEY$ <> ""

Ne pas oublier pas d'enregistrer ton nouveau programme sous le non feuxjour.bas par exemple !

CLS : efface l'écran.

FOR n=1 to 5 annonce le début de la boucle, la valeur initiale de n et la valeur finale de n pour laquelle il faudra sortir de cette boucle.

NEXT n augmente la valeur de n d'une unité à chaque tour de boucle si bien que n prend successivement les valeurs 1, 2, 3, 4, 5 pour laquelle le programme sort de la boucle.

 

 

 

 

DO annonce le début de la boucle.

LOOP UNTIL ordonne de répéter les opérations précédentes jusqu'à ce qu'une condition soit remplie.

INKEY$<> "" la condition est qu'il y ait une touche du clavier enfoncée (INKEY$) qui soit différente(<> donc supérieure ou inférieure) de rien (il n'y a rien entre le guillemets).
Il suffit donc d'appuyer sur n'importe quelle touche pour sortir de la boucle.

 

Retour en haut de la pageParagraphe suivant

 

-

Retour en haut de la page

4 - Comment distinguer le jour et la nuit ?

 

 

 

Expériences

Aides à la programmation

Le module carrefour comporte une photorésistance qui permet de détecter le jour ou la nuit. 
Il faut rappeler que les feux de certains carrefous clignottent tous à l'orange la nuit.

Cette photorésistance commande l'état d'une des broches du port parallèle (la broche "busy"). Cette broche fait partie d'une série de 8 broches (codant un octet) dont l'adresse est 379. Quelle est la valeur de l'octet 379 pour le jour ? pour la nuit ? Note ces valeurs elles vont te resservir.

La commande quick basic INP (&h379) est une variable qui prend la valeur décimale de l'octet qui code les 8 broches dont l'adresse est 379. Cette valeur dépend donc de l'état de la photorésistance.

La commande PRINT INP(&H379) l'ordinateur affiche alors à l'écran (PRINT) la valeur décimale de l'octet qu'il a lu (INP abréviation de input) sur les broches situées à l'adresse 379 (&H379).

 

 

Retour en haut de la pageParagraphe suivant

 

-

Retour en haut de la page

5 - Automatisation jour-nuit

 

Expériences

Aides à la programmation

Il te reste maintenant à créer un programme où les feux fonctionnent en continu et passent automatiquement du mode jour au mode nuit selon la luminosité détectée par la photorésistance.

Pour cela, tu auras sans doute besoin d'utiliser une commande permettant de mettre des conditions.
A toi d'appliquer ce genre de condition au carrefour.

 

 

 

Ne pas oublier d'enregistrer ton nouveau programme sous le non feuxauto.bas par exemple

Commande IFTHENELSEEND IF
(en français) si … alors … sinon … fin de la partie conditionnelle.

Essayer ce programme pour comprendre, normalement il se passe d'explication...

CLS
INPUT " code ? ",c
IF c= 0 THEN
PRINT " bonjour "
PRINT " tu as le bon code "
ELSE
PRINT "attention "
PRINT "Ce code est faux "
END IF

 

 

Retour en haut de la pageParagraphe suivant

 

-

Retour en haut de la page

6 - Compte rendu

Imprime le programme final

Rédige un commentaire explicatif de ce programme

 

 

Retour en haut de la page