• 追加された行はこの色です。
  • 削除された行はこの色です。
###
//#define DEBUG true
class CapaSensor {
  private:
  int vCtrlPin;
  int vSensingPin;
  int vTryNumber;
  int vThreshold;
  
  public:
  CapaSensor(int aCtrlPin, int aSensingPin, int aTryNumber) {
    pinMode(aCtrlPin, OUTPUT);
    pinMode(aSensingPin, INPUT);
    vCtrlPin = aCtrlPin;
    vSensingPin = aSensingPin;
    vTryNumber = aTryNumber;
    vThreshold = (int)(read() * 1.2);
#if DEBUG    
    Serial.print("CapaSensor[");
    Serial.print(vCtrlPin);  
    Serial.print("-");
    Serial.print(vSensingPin);  
    Serial.print("x");
    Serial.print(aTryNumber);  
    Serial.print(">");
    Serial.println(vThreshold);
#endif
  }
  int read() {
    int ret = 0;
    for(int i = 0; i < vTryNumber; i++) {
      int cnt = 0;
      digitalWrite(vCtrlPin, HIGH);
      while(digitalRead(vSensingPin) < HIGH) {
        cnt++;
      }
      if (ret < cnt) ret = cnt;
      digitalWrite(vCtrlPin, LOW);
      delay(5);
    }
    return ret;
  }
  int touched() {
    int ret = 0;
    for(int i = 0; i < vTryNumber; i++) {
      int cnt = 0;
      digitalWrite(vCtrlPin, HIGH);
      while(digitalRead(vSensingPin) < HIGH) {
        cnt++;
        if (cnt > vThreshold) {
          return true;
          #if DEBUG
            Serial.print("@-");
            Serial.print(vThreshold);
            Serial.print(" <? ");
            Serial.println(cnt);
          #endif
        }
      }
      if (ret < cnt) ret = cnt;
      digitalWrite(vCtrlPin, LOW);
      delay(5);
    }
#if DEBUG
    Serial.print(ret > vThreshold ? "@ " : "  ");
    Serial.print(vThreshold);
    Serial.print(" <? ");
    Serial.println(ret);
#endif
    return ret > vThreshold;
  }
};

int oLed = 13;
CapaSensor* capa;
void setup() {
  Serial.begin(9600);
  Serial.print("Setup");
  analogWrite(oLed, 0);
  capa = new CapaSensor(8,9,10);
}

void loop() {
  analogWrite(oLed, capa->touched()?128:0);
  delay(100);
}
###


    技術 一覧 検索 最新 バックアップ リンク元   ヘルプ   最終更新のRSS