« Kidule Dé » : différence entre les versions

Contenu supprimé Contenu ajouté
Marc0NICOLE (discussion | contributions)
Marc0NICOLE (discussion | contributions)
Aucun résumé des modifications
Ligne 7 :
 
{{Wikiversité:PIC_Entrées_Sorties}}
 
 
=== Déclaration dans le software pour ce Hardware ===
Dans notre montage, 1 port du Kidule PIC 2550 est utilisable: PORTB de 8 bits à droite.
 
On trouve ci après les déclarations nécessaires pour adresser correctement le hardware:
Dans ce fichier, on fait deux choses:
# on donne des noms intelligents aux bits d'entrées / sorties, qui correspondent aux deux Kidules
# on a une fonction '''setupHard()''' qui permet d'initialiser correctement les registres TRISx pour indiquer si il s'agit d'entrées ou de sorties
# définir des mots parlant pour '''Allume''', '''Eteint''' ou '''Presse''' plutot que d'avoir à tout le temps réflechir si il faut un 1 ou un 0 dans ce cas
 
== TestDe01.pde ==
On va commencer par un tout petit programme pour comprendre le début de la programmation.
 
Ce programme ne fait presque rien: si on presse sur le bouton du Rez, cela allume la Led 0 du Dé:
 
<source lang="C">
//Si on presse sur le bouton du Rez du kidule Ascenseur, cela allume la Led 0 du kidule Dé
#include "hardwareDe.h" // Toutes les définitions
 
void setup()
{
setupHard();
}
 
void loop()
{
if (Poussoir==Presse) {
Led0 = Allume;
}
else {
Led0 = Eteint;
}
}
</source>
=== Explications ===
Examinons ce petit programme pas à pas:
==== Déclarations de tout le Hardware ====
<source lang="C">
#include "hardwareDe.h"
</source>
indique au compilateur qu'il faut inclure un autre fichier. C'est comme si on avait tapé toutes les lignes contenues dans ce fichier. C'est bien plus lisible de n'avoir qu'a inclure ce fichier, plutôt que de le recopier. ici, on inclu le fichier [[#hardware.h|hardware.h]] qui contient toutes les déclarations nécessaires.
 
==== Initialisation ====
<source lang="C">
void setup()
{
setupHard();
}
</source>
Dans l'environnement Pinguino, il faut impérativement déclarer une fonction '''setup()''' qui est appelée tout au début du programme une fois.
{{Définition|titre=fonction|contenu=
Une fonction est un petit bout de programme que l'on pourra appeler autant de fois que l'on veut. On lui donne un nom (ici setup). Ensuite, c'est comme si le langage avait un mot de plus.
On déclare une fonction en écrivant '''void''', le nom de la fonction (qui ne doit pas avoir d'espace, ni d'accent... que des lettres) suivit de '''()'''
Puis, on écrit le bout de programme que cette fonction représente entre '''{''' et '''}'''
}}
 
Pour l'instant, on se contente d'appeler la fonction '''setupHard()''' qui a été déclarée dans le fichier [[#hardware.h|hardware.h]]. Celle-ci configure le PIC avec les bonnes entrées et sorties pour ces deux Kidules.
 
==== Boucle principale ====
Pinguino demande que l'on déclare une 2eme fonction qui doit s'appeler '''loop()'''. Cette fonction est appelée de manière continue après setup(). c'est elle qui contient ce que notre programme doit faire inlassablement.
<source lang="C">
void loop()
{
if (Poussoir==Presse) {
Led0 = Allume;
}
else {
Led0 = Eteint;
}
}
</source>
Ce qui devient de plus en plus intéressant c'est de comprendre ce qui fait que l'on peut lire un bouton et allumer ou éteindre une LED.
 
On va commencer par le milieu:
<source lang="C">
Led0 = Allume;
</source>
 
{{Définition|titre=Instruction|contenu=
la ligne '''Led0 = Allume;''' est ce que l'on appelle en C une instruction. Une instruction est par exemple le remplissage d'une variable avec une valeur.
Un programme est une suite d'instruction les unes après les autres. Chaque instruction est traduite par le [[compilateur]] dans un langage de mini instructions que le processeur sait comprendre et exécuter.
En C, les instructions se terminent pas un ''';''' (point-virgule). '''ATTENTION''', c'est très facile à oublier et le compilateur n'aime pas du tout en donnant un message d'erreur pas facile à comprendre :-(
}}
{{Principe|titre=En C les majuscules et minuscules sont importantes|contenu=
'''ATTENTION''' le compilateur C pense que '''LED0''' ou '''Led0''', ce n'est pas du tout la même chose !!! alors regardez bien lorsque cela ne marche pas comme prévu.
 
Encore une chose: les espaces montrent la fin d'un mot (une variable, une fonction ou un mot clé comme if...). Donc impossible d'appeler la variable qui pilote la LED '''Led 0'''. le compilateur ne comprendra pas!
Pour éviter cela, on utilise souvent les majuscules minuscules lorsque l'on veut faire une petite phrase, comme par exemple '''BoutonRez''' pour parler du bouton du rez.
Dans les noms, on '''doit''' commencer par une lettre, puis on peut mettre des lettres et des chiffres et même des '_' si on veut (mais c'est moche! alors pas trop souvent)
}}
 
Pour savoir si un bouton est pressé ou non, on peut utiliser un '''test''' que l'on fait avec l'instruction '''if'''
{{Définition|titre=if|contenu=
l'instruction if est une instruction qui permet de faire un test. Elle s'écrit '''if''' (''condition'') ''instruction à faire si test vrai'' '''else''' ''instruction à faire si test faux''
 
La ''condition'' peut être faite de n'importe quelle expression qui retourne soit vrai soit faux, comme par exemple '''==''' qui regarde si on est égal à gauche et a droite.
 
'''ATTENTION''': '''==''' compare et '''=''' met quelque chose dans une variable. Malheureusement C permet d'écrire BoutonRez = Presse, ce qui ne fait pas du tout ce que l'on veut: cela met un 0 dans BoutonRez (ce qui ne fait rien car c'est une entrée) et dit que la condition est fausse (parce que 0).
 
Comme souvent, on ne peut pas mettre qu'une instruction, on peut mettre un bloc d'instruction qui commence par '''{''' et fini par '''}'''. et pour bien comprendre ce que l'on fait, on met le tout sur plusieurs ligne, bien aligné avec des espaces pour que ce soit très clair où est la condition, ce que l'on fait si c'est vrai et ce que l'on fait sinon.
 
la partie '''else''' n'est pas obligatoire.
}}
 
{{Définition|titre=Bloc d'instruction {..}|contenu=
En C, il a y beaucoup d'instruction comme '''if''' qui ne veulent qu'une instruction a éxecuter si la condition est vraie. Mais on a souvent besoin de plusieurs instruction. On peut alors faire un bloc d'instructions en commençant par '''{''' et en terminant par '''}'''.
}}
 
Toujours dans notre fichier [[#hardwareDe.h|hardwareDe.h]], on a définit
<source lang="C">
#define Poussoir PORTBbits.RB7
#define Presse 0
</source>
Comme pour la Led, on voit que le bouton du Rez est connecté sur la patte RB2 du processeur qui a lui même une variable PORTB qui contient RB2. Cette variable peut cette fois être lue (car c'est une entrée) et elle vaut 0 si le bouton et pressé (= 0 Volt) et 1 si il n'est pas pressé (5Volts). Comme pour la LED, c'est plus simple de donner des mots différents avec #define pour que l'on comprenne bien ce qui se passe.
 
=== 1er Exercice ===
en partant de ce programme, essayer de faire en plus que la Led 1 s'allume si on ne presse pas sur le bouton du Rez et qu'elle s'éteigne si on presse (le contraire de la Led0 !)
{{Solution|contenu=
<source lang="C">
#include "hardwareDe.h"
void setup()
{
setupHard();
}
void loop()
{
if (Poussoir==Presse) {
Led0 = Allume;
Led1 = Eteint;
}
else {
Led0 = Eteint;
Led1 = Allume;
}
}
</source>
Facile non ??
}}