Tilt game probleem

Hi!

Ik heb wat moeilijkheden met coderen en hoop dat iemand mij kan helpen.
Wat ik heb is een simpel spelletje (simon says Simon. The memory game to test your concentration. Play my simon free online at www.freegames.ws) waarbij de 4 knoppen zijn vervangen door het kantelen in 4 richtingen van de accelerometer (MPU6050). Mijn probleem is dat zodra ik de sensor kantel, deze richting of 'knop' herhaaldelijk wordt uitgelezen. Wat ik probeer te bereiken is dat zodra de sensor is gekanteld deze waarde 1 keer wordt gebruikt en de sensor eerst terug naar zijn neutrale positie moet voordat deze zijde een 2e keer kan worden uitgelezen.

Deze code is verantwoordelijk voor het uitlezen van de sensor:

#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"

MPU6050 accelgyro;

int16_t ax, ay, az;

int getTilt()
{
  // read raw accel measurements from device
  accelgyro.getAcceleration(&ax, &ay, &az);
     
  if (ax < -7000) 
  {
    return 4;
  }
  if (ax > 7000) 
  {
    return 3;
  }
  if (az < -7000)
  {
    return 2; 
  }
  if (az > 7000)
  {
    return 1;    
  }
   return 0;

// Array Filter to cancel out sensor fluctuations
int getTiltAverage() {
  int arrayLength = 20;
  int tiltValues[arrayLength];
  int zeros = 0,ones = 0, twos = 0, threes = 0, fours = 0;
  for (int i=0; i < arrayLength; i++) { tiltValues[i] = getTilt(); delay(15); }
  for (int i=0; i < arrayLength; i++) {
    switch (tiltValues[i]) {
    case 0:
      zeros++;
      break;
    case 1:
      ones++;
      break;
    case 2:
      twos++;
      break;
    case 3:
      threes++;
      break;
    case 4:
      fours++;
      break;
    }
  }
  //90% of getTilt() returns has to be identical to rule out any unwanted fluctuations from the sensor
  if ((ones/arrayLength) > 0.9) return 1;
  if ((twos/arrayLength) > 0.9) return 2;
  if ((threes/arrayLength) > 0.9) return 3;
  if ((fours/arrayLength) > 0.9) return 4;
  if ((zeros/arrayLength) > 0.9) return 0;
  return -1;
  
}
}

reflex
Een linkje naar je engelse post met meer info kan waarschuwingen over crossposten voorkomen
http://forum.arduino.cc/index.php?topic=171079.msg1271638#msg1271638
Wat je nodig hebt voor je probleem is een finite state machine (wat al gezegd was) blijkbaar is daar ook ee libary voor. Ikzelf gebruik die niet maar voor jou zou die handig kunnen zijn.
http://playground.arduino.cc/code/FiniteStateMachine
Met vriendelijke groet
Jantje

@Jantje: Bedankt voor het aanvullen en voor je advies, ik ga kijken of ik er met de pagina Finite State Machine uitkom.

Ik kom er zelf niet uit, is er iemand die mij de gewenste code kan leveren tegen een schappelijke vergoeding voor je tijd?

reflex
Er is een speciale hoek in dit forum voor verzoeken om betaalde hulp.
Met vriendelijke groet
Jantje