A-Dコンバータの使い方が、だいたいわかったでしょうか?
課題3では、スティックの左右方向の制御に、A-Dコンバータを使いましょう。
■課題3
エルロン・スティックを右または左へ倒すとLED点灯が点灯するプログラムを作りましょう。
エルロン方向=横方向のA-Dコンバータはchannel(1)に割り当てられています。
al_adc=read_adc(1)
により、読み込み、変数に代入します。
読み込んだ値により、LEDの点灯を制御します。
課題3では、スティックの左右方向の制御に、A-Dコンバータを使いましょう。
■課題3
エルロン・スティックを右または左へ倒すとLED点灯が点灯するプログラムを作りましょう。
エルロン方向=横方向のA-Dコンバータはchannel(1)に割り当てられています。
al_adc=read_adc(1)
により、読み込み、変数に代入します。
読み込んだ値により、LEDの点灯を制御します。
// 赤外線2ch送信機TX2-006P 課題3
// A-Dコンバータ
// エルロン・スティックを右または左へ倒すとLED点灯
// ex3-006p.c PIC12F683用
#include<12f683.h>
#DEVICE ADC=10 //A-Dコンバータを10bitで使用
//読み込み値範囲:0~1023
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR
//ウオッチドック・タイマなし、パワーアップ・タイマ使用
//プロテクトなし、MCLRなし
#use delay(CLOCK=8000000) //8MHz駆動
#byte GP=5
#bit IROUT=GP.5
#bit LED=GP.4
#bit SW=GP.3
#define ON 1
#define OFF 0
#define HI 1
#define LOW 0
long th_adc,al_adc,vdd_adc;
//VR入力をA-Dコンバータより読み出し、各変数にセットする。
void adc_in(void)
{
set_adc_channel(0);//スロットル・スティック読み込み
delay_us(20);
th_adc=read_adc();
set_adc_channel(1);//エルロン・スティック読み込み
delay_us(20);
al_adc=read_adc();
set_adc_channel(2);//10kΩボリューム読み込み
delay_us(20);
vdd_adc=read_adc();
}
//メイン・ルーチン
void main()
{
int i;
set_tris_a(0x0f);//GP0~GP4入力、GP5出力
setup_adc_ports(sAN0 | sAN1 | sAN2 | VSS_VDD);//A-Dコンバータ使用宣言
setup_adc(ADC_CLOCK_DIV_32);//A-Dコンバータ・クロック
setup_oscillator(OSC_8MHz);
IROUT=OFF;
LED=OFF;
for(i=0;i<3;i++){
LED=ON;
delay_ms(250);
LED=OFF;
delay_ms(250);
}
while(1){
(その1);
if( (その2) || (その3)){
LED=ON;
}
else{
LED=OFF;
}
}
}
(その1)から (その3)空欄を埋めてプログラムを完成してください。TX2-006Pの電源スイッチを入れるとLEDが3回点滅します。ジョイスティックを左右に倒した時にLEDが点灯すれば正解です。
■ 正解
(その1)adc_in() (その2)al_adc<256 (その3)al_adc > 768
課題3のC言語ソース・ファイルとHEXファイルはこちらからダウンロードできます【ex3_006p.lzh】。
長野県飯田工業高校 竹内浩一

PICマイコンでつくるインドア・プレーン
みんなで作ろうインドア・プレーン