Pages: [1]   Go Down
Author Topic: Tilt game probleem  (Read 936 times)
0 Members and 1 Guest are viewing this topic.
Eindhoven, The Netherlands
Offline Offline
Newbie
*
Karma: 0
Posts: 17
better your best
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi!

Ik heb wat moeilijkheden met coderen en hoop dat iemand mij kan helpen.
Wat ik heb is een simpel spelletje (simon says http://www.freegames.ws/games/kidsgames/simon/mysimon.htm) 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:
Code:
#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;
 
}
}
Logged

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1720
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Eindhoven, The Netherlands
Offline Offline
Newbie
*
Karma: 0
Posts: 17
better your best
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Eindhoven, The Netherlands
Offline Offline
Newbie
*
Karma: 0
Posts: 17
better your best
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Forum Moderator
Belgium
Offline Offline
Edison Member
*****
Karma: 58
Posts: 1720
Arduino rocks; but with my plugin it can fly rocking the world ;-)
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Pages: [1]   Go Up
Jump to: