超音波センサについて教えてください
超音波センサについてなのですが、パラレルポートを使って制御しようとしているのですがなかなかうまくいきません。
浅草ギ研さんからでているPING)))を使っているのですが、サンプルプログラムがPICを使用してのもので、
トリガをうってやれば、350マイクロ秒ホールドオフした後、音波を出して帰ってきた時の時間で距離を出すというものです。
プログラム全文
#include <12F675.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOMCLR,BROWNOUT //内部4MHzクロック指定
#use delay(clock=4000000) //delayを使えるようにする
#use rs232(baud=9600,xmit=PIN_A5,rcv=PIN_A3,parity=N,bits=8) //シリアル設定
//(上の行説明)GP5を送信、GP3を受信に設定。
//12F675の場合は初期値がADCモードになっているので、デジタル入力を使う場合は事前にADCなどを切る必要がある。
//16F84などのPICはこの処理は不要。(初期値がデジタルIOだったり、ADCが無かったりする。)
//コンパレータとADCを切るために特殊レジスタを操作します。とりあえずアドレスを割り当て。(アドレスはデータシートに書いてある)
#byte CMCON=0x19
#byte GPIO=0x05
#byte ANSEL=0x9F
void main(void){
set_tris_a(0x00);
output_low(PIN_A0); //GP0をLowに(とりあえず。)
//コンパレータなどを切って、デジタルIOピンにする処理
GPIO=0x00; //以下3行はデジタルIOに切り替える手順
CMCON=0x07;
ANSEL=0x00;
//タイマ0を設定(内部クロック使用の場合は4クロックで1カウントなので注意)
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_128);
delay_ms(1000); //PINGが正常に立ち上がるまで待つ
printf("START\r\n");
while(1){
set_tris_a(0x00); //GP0を出力に
//トリガパルス出力
output_high(PIN_A0); //トリガパルス立ち上げ
delay_us(5);
output_low(PIN_A0); //トリガパルス立ち下げ
//GP0を入力に切り替え
set_tris_a(0x01); //GP0を入力に
//パルス幅測定
while (!(input(PIN_A0))); //パルス立ち上がりまで待つ
set_timer0(0); //タイマーをリセット(カウント開始)
while (input(PIN_A0)); //パルスの立下りまで待つ
printf("Dist=%u\r\n\r\n",get_timer0()); //結果出力
delay_ms(500); //0.5mSウェイト
}
}
こんな感じです。
全体的にわからないんですが、
特に
while (!(input(PIN_A0))); //パルス立ち上がりまで待つ
set_timer0(0); //タイマーをリセット(カウント開始)
while (input(PIN_A0)); //パルスの立下りまで待つ
この部分のlinuxのC言語への書き換え方がわからなくて苦労しています。
どなたか教えてもらえないでしょうか?
OSはVine linuxです。言語はC言語です。