Bonjour à tous!
Je me suis récemment lancé dans un projet qui a pour but de commuter l'éclairage d'une pièce à chaque entrée ou sortie de celle ci.
J'ai donc câblé un circuit mettant en oeuvre un PIC16F84A commandé sur l'entrée RA1 par un capteur infrarouge:
http://www.gotronic.fr/art-capteur-i...c005-12405.htm
Pour la sortie, on a :
RB1 : Commande d'un relais par le biais d'un transistor NPN 2N2222 + Commande d'une LED RVB sur la pin rouge
RB2 : Commande de la même LED RVB sur la pin verte
Ainsi, on a la LED RVB qui devient rouge quand l'éclairage est actif, ou alors verte lorsqu'il est au repos, et ce sur chaque front descendant.
Voici le code, en C, ingurgité et compilé par XC8 :
Malheureusement, la commutation se fait de manière instable, ne tenant pas compte du type de front (montant, descendant...).Code:#include <stdio.h> #include <stdlib.h> #include <xc.h> #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer (WDT enabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (Power-up Timer is disabled) #pragma config CP = OFF // Code Protection bit (Code protection disabled) void main(void) { TRISA=0b11111111; TRISB=0b00000000; int signal = 0; int signal_prec = 0; signal = RA1; signal_prec = signal; RB1=1; RB2=0; while(1) { signal = RA1; if((signal==0)&&(signal_prec==1)) { RB1=(!RB1); RB2=(!RB2); } signal_prec = signal; signal = RA1; } }
Quelqu'un aurait-il une idée du problème ?
Merci par avance!
-----