動作
1、ライン検出し移動
2、回転
3、ライン検出して移動
4、タッチセンサで上昇
5、回転
6、ライン検出し移動
7、回転
8、ライン検出し移動
9、タッチセンサで下降
10、終了
プログラム
<3052.h>
int ads[3];
int ocout=0;
void ioinit(void)
{
PB.DDR = 0xff; ///DCmoter出力
P4.DDR = 0xfe; ///タッチセンサの入力
P3.DDR = 0xff; ///シリノイドの出力
}
void adinit(void) ///
AD変換の設定
{
AD.ADCSR.BIT.ADF = 0;
AD.ADCSR.BIT.SCAN = 1;
AD.ADCSR.BIT.CKS = 3;
AD.ADCSR.BIT.CH = 0;
}
void wait(void) ///割り込みするまでの噛ませ犬役
{
int t = 20000;
while(t--);
}
void failyeyes(void)
{
if((ads[1]>2.5) && (ads[0]<2.5 && ads[2])<2.5)
{
PB.DR.BYTE = 0x55;
wait();
}
else if((ads[1]<2.5) && (ads[0]>2.5 && ads[2])<2.5)
{
PB.DR.BYTE = 0xf5; /// 左がずれたときに、右回転
wait();
}
else if((ads[1]<2.5) && (ads[0]<2.5 && ads[2])>2.5)
{
PB.DR.BYTE = 0x5f; ///右がずれたときに、左回転
}
else if((ads[1]>2.5) && (ads[0]>2.5 && ads[2])>2.5)
{
PB.DR.BYTE = 0x55;
ocout++;
}
}
void main(void)
{
while(1){
int i;
AD.ADCSR.BIT.ADST = 1; ///AD変換開始
while(AD.ADCSR.BIT.ADF == 0); ///AD変換が終わったら
AD.ADCSR.BIT.ADF = 0;
for(i=0;i<3;i++){
ads[i] = AD.ADDRA >> 6; ///結果をAN0に合わせる
ads[i] = (int)((ads[i]*(5.0/1024.0)*1000.0)+0.5);
failyeyes();
if(ocout==3)
{
PB.DR.BYTE = 0x55;
wait(); ///半分の時間まで
PB.DR.BYTE = 0xf5; ///回転させる
while(ocout == 3)
{
PB.DR.BYTE = 0x55;
wait();
if(P4.DR.BYTE = 0x01)
{
P3.DR.BYTE = 0x01;
wait(); ///終わるまでの時間
ocout =0;
}
}
}
}
}
}
最終更新:2011年02月10日 13:00