Färg upptäckt med hjälp av RGB LED (3 / 4 steg)
Steg 3: Koden
Denna kod är skriven för en Microchip PIC 16F887, men förhoppningsvis kan du få den allmänna idén. Jag använde inbyggda potentiometern på min utveckling ombord för att variera färgspektrumet RGB LED (och det går inte igenom hela spektrumet eftersom jag inte har 3 PWM moduler, men det är bra nog)Kommentarer ingår.
#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 = 0x17
#byte CCP2CON = 0x1D
#byte PWM1CON = 0x9B
int värde = 128;
int p1 = 0;
int p2 = 0;
void my_setup_ccp1(int8 value)
{
output_low(PIN_C2);
CCP1CON = värde;
PWM1CON = 0;
}
void my_setup_ccp2(int8 value)
{
output_low(PIN_C1);
CCP2CON = värde;
}
//===================================
void main)
{
A4 = strömkälla för fotodiod
output_high(PIN_A4);
output_high(PIN_B1);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_adc_ports(sAN0);
Timer/avbryta installationen
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) {/ / förhindra PIC från att gå i vila.
STÄLL IN PWM DUTY CYCLE
output_high(PIN_A5);
PIN A3 är fotodiod anslutningen
IF(input(PIN_A3) == 1)
output_high(PIN_A4);
annat
output_low(PIN_A4);
Läs värdet av potentiometer att ändra färgen på LED
värde = read_adc();
Växla (värde) {
fall 0:
P1 = värde;
output_low(PIN_C0);
P2 = värde;
bryta;
fall 50:
P1 = värde;
output_high(PIN_C0);
P2 = värde;
bryta;
fallet 100:
P1 = värde;
output_high(PIN_C0);
P2 = värde;
bryta;
fall 150:
output_high(PIN_C0);
P1 = 50;
P2 = värde;
bryta;
fall 200:
output_low(PIN_C0);
P1 = 0;
P2 = värde;
bryta;
fall 250:
P1 = 0;
P2 = värde;
output_low(PIN_C0);
bryta;
}
P1 = värde;
P2 = 128 - p1;
set_pwm1_duty(P1);
set_pwm2_duty(P2);
}
}