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;
}
}