續前文,紅外線遙控很適合室內單機使用,一般距離五公尺內,還可以藉由牆面反射,按遙控器按鍵速度要求並不快,把前文的系統時間建起來後,將紅外線檢查放在 PROCESS_100ms()中就可以了,
// (C) 2015, Bridan Wang, CC BY-NC-SA 3.0 TW
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)
//
void PROCESS_100ms(void){
IR_CHECK();
}
#include "MeIR.h"
MeIR ir;
void IR_CHECK() { // for mBot car
//Serial.println(ir.key());
switch (ir.key()) {
case 64: // mBot-up
//MOTOR(MOVE_FORWARD, car_speed);
break;
case 25: // mBot-down
//MOTOR(MOVE_BACK, car_speed);
break;
case 7: // mBot-left
//MOTOR(MOVE_LEFT, car_speed);
break;
case 9: // mBot-right
//MOTOR(MOVE_RIGHT, car_speed);
break;
case 69: // mBot-A
//MOTOR(MOVE_STOP, car_speed);
break;
case 70: // mBot-B
break;
case 71: // mBot-C
break;
case 68: // mBot-D
break;
case 67: // mBot-E
break;
case 13: // mBot-F
break;
case 22: // mBot-0
break;
case 12: // mBot-1
break;
case 24: // mBot-2
break;
case 94: // mBot-3
break;
case 8: // mBot-4
break;
case 28: // mBot-5
break;
case 90: // mBot-6
break;
case 66: // mBot-7
break;
case 82: // mBot-8
break;
case 74: // mBot-9
break;
case 21: // mBot-setup
break;
default:
break;
}
ir.loop();
}
這裡我引用 mBlock 所提供的 MeIR.cpp 程式庫,因為它的 ir.keyPressed() 函數將紅外線碼壓縮成 1 byte 識別,可減少記憶體耗用空間。
boolean MeIR::keyPressed(unsigned char r){
irIndex = 0;
if (millis() / 1000.0 - lastIRTime>0.2){
return false;
}
return irRead == r;
}
參考它的原碼,加一個自己要的,修改如下:
unsigned char MeIR::key(){
irIndex = 0;
if (millis() / 1000.0 - lastIRTime>0.2){
return 0;
}
return irRead;
}
沒有留言:
張貼留言