Étape 3: Le Code
Ce code a été écrit pour un PIC de Microchip 16F887, mais j’espère que vous pouvez obtenir l’idée générale. J’ai utilisé le potentiomètre intégré sur ma planche de développement pour faire varier le spectre de couleur de la LED RGB (et il ne va pas à travers le spectre entier parce que je n’ai pas 3 modules PWM, mais c’est assez bon)Commentaires inclus.
#include < 16F887.h >
#include < delay.h >
#include « delay.c »
#include < stdlib.h > à
#include < STRING.h >
#use delay(clock = 4000000)
#FUSES INTRC, NOWDT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP
#byte CCP1CON = 0 x 17
#byte CCP2CON = 0x1D
#byte PWM1CON = 0x9B
int valeur = 128 ;
int p1 = 0 ;
int p2 = 0 ;
Sub my_setup_ccp1(int8 value)
{
output_low(PIN_C2) ;
CCP1CON = value ;
PWM1CON = 0 ;
}
Sub my_setup_ccp2(int8 value)
{
output_low(PIN_C1) ;
CCP2CON = value ;
}
//===================================
Sub main()
{
A4 = source d’alimentation pour la photodiode
output_high(PIN_A4) ;
output_high(PIN_B1) ;
setup_adc(ADC_CLOCK_INTERNAL) ;
set_adc_channel(0) ;
setup_adc_ports(sAN0) ;
Réglage de la minuterie/interruption
enable_interrupts(INT_TIMER2) ;
my_setup_ccp1(CCP_PWM) ;
my_setup_ccp2(CCP_PWM) ;
setup_timer_2 (T2_DIV_BY_1, 128, 1) ;
setup_compare (2, COMPARE_PWM| COMPARE_TIMER2) ;
while(1) {/ / PIC empêcher d’aller dormir.
CYCLE D’UTILISATION RÉGLAGE PWM
output_high(PIN_A5) ;
Broche A3 est la connexion de la photodiode
if(Input(PIN_A3) == 1)
output_high(PIN_A4) ;
d’autre
output_low(PIN_A4) ;
Lire la valeur du potentiomètre pour modifier la couleur de LED
valeur = read_adc() ;
commutateur (valeur) {}
case 0 :
P1 = value ;
output_low(PIN_C0) ;
P2 = value ;
rupture ;
case 50 :
P1 = value ;
output_high(PIN_C0) ;
P2 = value ;
rupture ;
boîte de 100 :
P1 = value ;
output_high(PIN_C0) ;
P2 = value ;
rupture ;
cas 150 :
output_high(PIN_C0) ;
P1 = 50 ;
P2 = value ;
rupture ;
boîte de 200 :
output_low(PIN_C0) ;
P1 = 0 ;
P2 = value ;
rupture ;
boitier 250 :
P1 = 0 ;
P2 = value ;
output_low(PIN_C0) ;
rupture ;
}
P1 = value ;
P2 = 128 - p1 ;
set_pwm1_duty(P1) ;
set_pwm2_duty(P2) ;
}
}