PDA

View Full Version : Nhờ mọi người giúp đỡ mình về việc dùng quang trở để phân biệt màu.


kuni89
06-01-2014, 06:35 PM
Mình kết nối mạch theo sơ đồ sau:
http://2.bp.blogspot.com/-sNUNweY2d-0/UYkZ0oLjU9I/AAAAAAAAAIw/uQuPlbKCmxw/s640/New+Bitmap+Image.bmp
trong đó xài 16f877a nhưng thật ra mình dùng 18f4431 và các chân đầu vào của led đỏ, blue và green khác so với mạch nhưng chân quang trở kết nối với adc mình vẫn dùng an0.
khi đo điện áp đầu vào quang trở khi 3 màu bật tắt mình thu đc điện áp đầu vào khác nhau tùy theo vật cản mình đặt trước cảm biến đó là màu gì.
Nhưng mình không hiểu sao đoạn code của mình lại không hoạt động.Mọi người có thể giúp mình được không. cảm ơn mọi người nhiều.
Đây là đoạn code của mình
//=========declare device and hardware===========
#include <18f4431.h>
#device ADC=8
#FUSES HS,NOWDT,NOLVP
#use delay(clock=20000000)

unsigned int value_red,value_blue,value_green;
void cambien1(void);
//void cambien2(void);
//void cambien3(void);
//================================================
void main(void)
{
Setup_ADC(ADC_CLOCK_INTERNAL);
Setup_ADC_ports(ALL_ANALOG );
while(1)
{
output_low(pin_d1);
cambien1();
//cambien2();
//cambien3();
}
}
void cambien1(void)
{
output_high(pin_c6);
output_low(pin_c5);
output_low(pin_c4);
delay_ms(1500);
set_adc_channel(0);
delay_us(20);
value_red=read_adc(); //doc giá tri ADC màu do
output_low(pin_c6);
output_high(pin_c5);
output_low(pin_c4);
delay_ms(1500);
set_adc_channel(0);
delay_us(20);
value_green=read_adc();//doc giá tri ADC màu xanh lá cây
output_low(pin_c6);
output_low(pin_c5);
output_high(pin_c4);
delay_ms(1500);
set_adc_channel(0);
delay_us(20);
value_blue=read_adc();//doc giá tri ADC màu xanh da troi
output_low(pin_c4);

if((value_red < value_green)&&(value_red < value_blue))

output_high(pin_c6);
output_low(pin_c5);
output_low(pin_c4);


}