アットウィキロゴ

自動1プログラム

動作
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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。