Kidule Ascenseur/Tester le hardware
Avant de commencer de faire un vrai programme pour l'ascenseur, il est bon de faire un petit programme de test qui vérifie que toutes les déclarations que l’on a faites sont correctes et correspondent bien au hardware que l’on a.
Pour tester le Hardware, voici un petit programme simple qui fait les choses suivantes:
- allume successivement les Leds 0 à 7 du Kidule Dé.
- puis si on presse sur le poussoir du Kidule dé, allume toutes les LEDs (qui se feront par la suite éteindre par le premier point)
- si on presse sur le Bouton du 1er sur le Kidule ascenseur, on entre dans un mode où le bouton du 2eme fait monter et le bouton du Rez fait descendre. Les LEDs 0 à 2 du Kidule Dé reflètent l'état des switchs de l'ascenseur
#include "hardwareAsc.h"
void wait()
{
long i;
for (i=0;i<500000;i++) {
}
}
void TestHard()
{
Led0=Allume;
wait();
Led0=Eteint;
Led1=Allume;
wait();
Led1=Eteint;
Led2=Allume;
wait();
Led2=Eteint;
Led3=Allume;
wait();
Led3=Eteint;
Led4=Allume;
wait();
Led4=Eteint;
Led5=Allume;
wait();
Led5=Eteint;
Led6=Allume;
wait();
Led6=Eteint;
if (Poussoir==Presse){
Led0=Allume;
Led1=Allume;
Led2=Allume;
Led3=Allume;
Led4=Allume;
Led5=Allume;
Led6=Allume;
wait();
}
if (Bouton1er==Presse){
while (TRUE) {
if (Bouton2eme==Presse) Monter=1; else Monter=0;
if (BoutonRez ==Presse) Descendre=1; else Descendre=0;
if (Switch2eme==Presse) Led5=Allume; else Led5=Eteint;
if (Switch1er==Presse) Led4=Allume; else Led4=Eteint;
if (SwitchRez==Presse) Led3=Allume; else Led3=Eteint;
}
}
}
void loop ()
{
TestHard();
}
l'instruction for permet de faire une boucle (c'est-à-dire répéter un bloc instructions) un certain nombre de fois
for (i=0;i<500000;i++) {
/* instructions à répéter */
}
après la (, on met
- l'instruction à faire avant la boucle: ici i=0 c'est-à-dire mettre la variable i à zero
- la condition qui dit aussi longtemps qu’il faut continuer la boucle (ici si i est plus petit que 500000)
- ce qu’il faut faire à la fin de la boucle: en général, ajouter 1 à la variable i (qui se note i++)
Le but ici est simplement de perdre du temps pour qu'on ait le temps de voir les LED s'allumer une à une; donc on ne fait rien entre les { }
l'instruction while est aussi une boucle qui effectue un bloc d'instruction tant que la condition entre parenthèse est vraie
while(condition) {
/* instructions à répéter */
}
Dans notre cas, la condition est le mot TRUE (=vrai en anglais); cette condition est toujours vraie et on s'arrêtera jamais de faire ces dernières instructions
Exercice pratique
modifier- Lancez le programme et laisser une fois clignoter toutes les LED.
- Pressez sur le Poussoir du kidule Dé jusqu'à ce que toutes les LED s'allument.
- Ensuite Pressez sur le bouton du 1er jusqu'à ce que que plus aucune LED du Kidule Dé ne soit allumées.
- Jouez en pressant le le bouton 2eme et Bouton 1er. Qu’est ce qu’il se passe si on presse sur un Bouton puis sur les deux?
Si on essaye toutes les solutions, on observe le comportement suivant
Ce qui est important est de bien comprendre la différence entre Moteur Bloqué et Moteur en roue libre:
- Moteur Bloqué: Si on met les sorties Monter et Descendre à 0, le chip de contrôle du moteur court-circuite le moteur. Or un moteur c’est aussi une dynamo: si on le fait tourner, il fabrique de l'électricité. Si on le court-circuite, cela lui mange son énergie et il s'arrête très vite.
- Moteur en roue libre: Si on met les sorties Monter et Descendre à 1, le chip de contrôle du moteur "déconnecte" les fils du moteur. Là aussi il produit de l'électricité, mais comme elle n’est pas utilisée, cela ne lui mange pas d'énergie et il peut continuer sur son élan.
Pour l'ascenseur, on vaudra donc mieux le freiner lorsqu'on arrive à un étage. Sinon on dépassera l'étage.