加速度センサの振りを検出

振ったら「A」をシリアルで送る。
てきとう。

// 加速度センサのX,Y,ZはそれぞれA0,A1,A2に接続する
int BAUD_RATE = 9600;
int NORM_MAX  = 290;
int CALC_NORM_INTERVAL = 99;
long IGNORE_INTERVAL   = 1200; // 250

int  senseCount = 0;
long ignoreTimer = 0;
long rawVals[3] = {0, 0, 0};

void setup() {
  Serial.begin(BAUD_RATE);
}

void loop() {
  for (int i=0;i<3;i++) {
    int val = analogRead(i); 
    rawVals[i] += val;
  }
  
  if (++senseCount >= CALC_NORM_INTERVAL) {
    detectTouch();
    restoreSensingData();
  }
}

void detectTouch() {
  double norm, tmp;
  
  for (int i=0;i<3;i++) {
    rawVals[i] = rawVals[i] / 
      CALC_NORM_INTERVAL - 512;
    tmp += rawVals[i] * rawVals[i];
  }
  norm = sqrt(tmp);
  
  //Serial.print(norm);
  
  if (norm > NORM_MAX && millis() - ignoreTimer > IGNORE_INTERVAL) {
    //Serial.print("\ttouched");
    
    Serial.println("A");
    ignoreTimer = millis();
  }
  //Serial.println("");
}

void restoreSensingData() {
  for (int i=0;i<3;i++) {
    rawVals[i] = 0;
  }
  senseCount = 0;
}