Après ce premier Tuto en guise d'échauffement, je vous propose de compliquer un tout petit peu la chose .
Il existe, encore une fois, des centaines d'exemples sur la toile. Ce Tutoriel est en rapport avec le premier sur les commentaires, et reste dans une suite logique d'apprentissage en douceur, mais avec les bases nécessaire. Si vous n'avez pas les bases et avez besoin d'explications n’hésitez pas à poster un message dans le forum correspondant.
Configuration :
-IDE : MikroC Pro for PIC Version 6.6.2
-Compilateur : Mikro prog suite fo PIC V 2.32
-Plaque Easy PIC V7
L'objectif :
Allumer une LED quand on appuie sur un Bouton poussoir (ou l'inverse, éteindre une led quand on appuie sur un BP) .
Code : Tout sélectionner
void main() { // ceci contiendra notre programme, c'est la fonction principale(main) et elle est obligatoire.
//################################# CONFIGURATION #########################################
ANSELB = 0; // Configure les broches du PORTB en digital (contrairement à analogique) état haut=1 , état bas=0 .
ANSELC = 0; // En numérique la valeur 1, c'est à dire un état haut correspond a Vcc et 0 = état bas = la masse .
PORTB = 0; // Afin d'éviter les surprises, on définit les valeurs du PORTB et PORTC à 0 avant de le mettre en sortie.
PORTC = 0; // En effet en passant le PORT B en sortie , la valeur de ses broches vont être initialisé et leurs états seront aléatoires.
// Autre méthode pour configurer les I/O ( Input/Output ou entrée/sortie)
TRISB = 0b00000000; // En écrivant "0b" on déclare que l'on va écrire en binaire. Chaque chiffres correspondra à une broche du PORT en question.
TRISC = 0b00001111; // Ainsi on configure les broches indépendamment les unes des autres.Configure tout le PORTB comme sortie en affectant la valeur 0 .
// Configure les broches 1,2,3,4 du PORTC comme entrée en affectant la valeur 1 .
//################################# Boucle infinie #########################################
while(1) // Ici c'est notre boucle sans fin.
{
// Introduction d'une condition "if" ( "si" en français)
if (PORTC.B0 == 1) // SI la broche 0 du PORTC vaut 1 , càd à l’état haut, ou Vcc alors on exécute ce qui suit, Sinon on passe au ELSE.
// Ici donc on regarde si notre BP est appuyé ou non . s'il est appuyé la valeur sera de 1(Vcc) sinon de 0 (masse).
PORTB.B0 = 1 ; // On met la Broche 0 du PORTB à 1. Ce qui aura pour effet d'allumer la led , comme 1 = Vcc
else // Ici on retrouve notre "SINON" , càd l'action a exécuter si la condition n'est pas remplie.
{
PORTB.B0 = 0 ; // Si la condition du départ n'est pas remplie donc que le PORTC.B0 n'est pas égale a 1 , donc que le BP n'est pas appuyé
} // Alors on met la Broche 0 du PORTB à 0 , donc à la masse , donc la LED est éteinte .
//----------------------------------------------------------------------------------------------------------------------------
if (PORTC.B1 == 1) // Ici la même chose à l'envers, sur un autre BP et une autre LED. Si le BP sur Broche 1 du PORTC est égale à 1.
// Alors on éteint la LED sur la Broche 1 du PORT B
{PORTB.B1 = 0 ;} // Ici vous pouvez remarquez qu'il y a des {} qui entoure la commande. En fait si il n'y a qu'une seule ligne dans le "IF" , on peut ne pas les mettre .
// Mais toutefois je vous conseille de garder le réflexe de les mettre out le temps.
else
{PORTB.B1 = 1 ;} // Sinon on l'allume. Donc quand le BP ne sera pas appuyé, la led LED sera allumée.
} // Nous arrivons à la parenthèse de la boucle infini, donc on repart au début et ainsi de suite .
} // Fin de notre fonction principale
Conseils :
- Dans ce Tutoriel, il n'ai pas question de rebond sur le BP, tout simplement car l'action à faire est en rapport avec le temps d'appui sur le BP et pas le fait de détecter un appui. Si vous ne savez vas pas ce qu'est un rebond, regardez donc le tuto à ce sujet !
- Le = ou == est très souvent une source d'erreur. Le double == est utilisé à titre de comparaison, savoir si les deux valeurs sont pareils ou njon. Tandis que un seul =affecte une valeur.
http://www.dailymotion.com/video/x31ar72