Robofun 機器人論壇

標題: [求助]紅外線感測反射設置 [打印本頁]

作者: ray60803    時間: 2014-4-23 12:25
標題: [求助]紅外線感測反射設置
小弟剛接觸,想做一個小實驗為用紅外線接收發射做反射式感應,以下為程式,但是傳完程式後,可以正常動作2~7次,之後就沒有反應了,接收發射器也正常,不知道是哪邊的問題,有大大可以幫忙解惑嗎?  再一問,如果頻率調高是否可以讓反射的距離變長?
/*
* irObjectDetection.pde: 紅外線物體偵測
*/

const int irReceiver = 2;                // 紅外線接收器
const int irLed  = 3;                    // 紅外線發射器
const int ledPin = 13;                   // 紅外線指示燈
const unsigned int frequency = 38000;    // 發射頻率(單位: Hz)

void setup() {               
  Serial.begin(9600);                    // 開啟 Serial port, 通訊速率為 9600 bps
  pinMode(irReceiver, INPUT);           // 把 irReceiver 接腳設置為 INPUT
  pinMode(irLed, OUTPUT);               // 把 irLed 接腳設置為 INPUT
  pinMode(ledPin, OUTPUT);              // 把 ledPin 設置為 OUTPUT

  tone(irLed, frequency);               // 產生指定頻率的脈波 (Pulses)
}

// 讓指示燈閃爍幾下
void blinkLED() {
  for (int i=1; i<= 4; i++) {
    digitalWrite(ledPin, HIGH);          // 打開指示燈
    delay(100);
    digitalWrite(ledPin, LOW);           // 關掉指示燈
    delay(100);
  }  
}

void loop() {
  int ir_status = digitalRead(irReceiver);   // 讀取 irReceiver 的狀態
  Serial.println(ir_status);                  // 把 irReceiver 的狀態印到 Serial Port

  // 檢查 irReceiver 是否有收到紅外線訊號
  // 有的話,ir_status 會是 0 (因為 Receiver 會把訊號反向, 所以 0 代表有收到訊號)
  if (ir_status == 0)                     
    blinkLED();                             // 讓指示燈閃爍幾下
}




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2