/**************************************** * 赤外線距離センサー使用 * 赤外線障害物検知器 by T.Inoue 2018/12/19 * 距離は実測概略値250cmで0.15Vを出力し検知 * 電源電圧5V基準、実機はラダーLEDとブザー表示 ***************************************/ #include <16f688.h> #fuses INTRC_IO,NOWDT,NOPROTECT,PUT,BROWNOUT,NOMCLR #device ADC=10 //A・D変換10ビットモード #use delay(CLOCK = 8000000) //クロック8MHz #use fast_io(A) #use fast_io(C) //変数定義 float V_out=0; //変換結果データ Vout void Ledout(); /*********** メイン関数 ******************/ void main() { //クロック周波数変更 setup_oscillator(OSC_8MHZ); //A/Dコンバータ設定 setup_adc_ports(sAN0 | VSS_VDD); setup_adc(ADC_CLOCK_DIV_8); //4usec set_tris_a(0x09); //RA0,RA3ピン入力、RA1,2,4,5,出力モード set_tris_c(0x00); //RC0,1,2,3,4,5,出力モード output_a(0); //reset output_c(0); //reset //// アナログ入力繰り返しループ while(1) { set_adc_channel(0); //チャネル0を選択 delay_us(50); //アクイジションタイム待ち V_out = read_adc(); //A/D変換結果読込み V_out = (V_out * 5.0) / 1024; //フルスケール5.0Vに変換 Ledout(); delay_ms(500); //0.5秒待ち } } void Ledout() { if((V_out >=1.5)&&(V_out <2.5)){ output_bit(PIN_A1,1); //0.2m-0.3m output_bit(PIN_A2,1); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=1.0)&&(V_out <1.5)){ output_bit(PIN_A1,1); //0.3m-0.4m output_bit(PIN_A2,0); output_bit(PIN_C0,1); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=0.6)&&(V_out < 1.0)){ output_bit(PIN_A1,1); //0.4m-0.6m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,1); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=0.4)&&(V_out < 0.6)){ output_bit(PIN_A1,1); //0.6m-0.9m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,1); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=0.35)&&(V_out < 0.4)){ output_toggle(PIN_A1); //0.9m-1.4m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,1); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=0.3)&&(V_out < 0.35)){ output_toggle(PIN_A1); //1.4m-1.6m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,1); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=0.25)&&(V_out < 0.3)){ output_toggle(PIN_A1); //1.6m-1.8m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,1); output_bit(PIN_A4,0); output_bit(PIN_A5,0); } if((V_out >=0.2)&&(V_out < 0.25)){ output_bit(PIN_A1,0); //1.8m-2.2m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,1); output_bit(PIN_A5,0); } if((V_out >=0.15)&&(V_out < 0.2)){ output_bit(PIN_A1,0); //2.2m-2.5m output_bit(PIN_A2,0); output_bit(PIN_C0,0); output_bit(PIN_C1,0); output_bit(PIN_C2,0); output_bit(PIN_C3,0); output_bit(PIN_C4,0); output_bit(PIN_C5,0); output_bit(PIN_A4,0); output_bit(PIN_A5,1); } if(V_out < 0.15){ output_a(0); //2.5m以上 output_c(0); } }