Go Down

Topic: Esplora Accelerometer instead of joystick (Read 476 times) previous topic - next topic

MakTibbles

Hello Everyone,

I'm trying to make a game controller so instead of using the joystick you tilt the controller.
It's just a simple X-axis = left right set up but I'm still fairly new and it's giving me grief.

Currently I haven't got the Axis to work at all and the code is churning out 'W' constantly I have no idea why.

Quote
#include <Esplora.h>

void setup()
{
 Serial.begin(9600);
 Keyboard.begin();
}

void loop()
{
 int right = Esplora.readButton(SWITCH_RIGHT);
 int left = Esplora.readButton(SWITCH_LEFT);
 int down = Esplora.readButton(SWITCH_DOWN);
 int up = Esplora.readButton(SWITCH_UP);
 int leftright = Esplora.readAccelerometer(X_AXIS);
 int updown = Esplora.readAccelerometer(Y_AXIS);
 
 //these are the values for the accelerometer.
 int xAxis = Esplora.readAccelerometer(X_AXIS);    // read the X axis
 int yAxis = Esplora.readAccelerometer(Y_AXIS);    // read the Y axis
 
 Serial.print("x: ");      // print the label for X
  Serial.print(xAxis);      // print the value for the X axis
  Serial.print("\ty: ");    // print a tab character, then the label for Y
  Serial.print(yAxis);      // print the value for the Y axis

  delay(500);   
 
 //buttons
   if(up == LOW)
 {
   Keyboard.press('X');
   Keyboard.release('X');
 }

   if(down == LOW)
 {
   Keyboard.press('C');
   Keyboard.release('C');
 }
 
   if(left == LOW)
 {
   Keyboard.press('V');
   Keyboard.release('V');
 }
 
   if(right == LOW)
 {
    Keyboard.press('B');
    Keyboard.release('B');
 }

 if (updown > -100)
 {
   Keyboard.press('KEY_UP_ARROW');
   Keyboard.release('KEY_UP_ARROW');
 }

 if (updown < 100)
 {
   Keyboard.press('KEY_DOWN_ARROW');
   Keyboard.release('KEY_DOWN_ARROW');
 }

 if (leftright < 100)
 {
   Keyboard.press('KEY_LFET_ARROW');
   Keyboard.release('KEY_LEFT_ARROW');
 }

 if (leftright > -100)
 {
   Keyboard.press('KEY_RIGHT_ARROW');
   Keyboard.release('KEY_RIGHT_ARROW');
 }


 delay(1); //amount of time delay per loop, measured in milliseconds.
}

Runaway Pancake

#1
Jun 21, 2015, 06:22 am Last Edit: Jul 03, 2015, 09:26 pm by Runaway Pancake Reason: adding sketch
what if you change your leftright and updown conditions:
if (leftright > 100), if (updown > 100) [instead of if... < 100]
if (leftright < -100), if (updown > 100) [instead of if... > -100]

> > > I guess you lost interest, found other things to do, or whatever.
I wrote the following sketch to confirm my postulate and to check out the SIP strip I/O.
0 is neutral; as the nose rises from neutral Y-axis outputs positive and as the nose dips Y-axis outputs negative.

It lights one of three external LEDs based on the pitch (Y-axis) of the Esplora --
Code: [Select]

#include <Esplora.h>
const byte pospitch = 1;
const byte negpitch = 0;
const byte neut = 8;
void setup()
{
  Serial.begin(9600);        // initialize serial communications with your computer
 
  pinMode (pospitch, OUTPUT);
  pinMode (negpitch, OUTPUT);
  pinMode (neut, OUTPUT);
 
}
void loop()
{
  int xAxis = Esplora.readAccelerometer(X_AXIS);    // read the X axis
  int yAxis = Esplora.readAccelerometer(Y_AXIS);    // read the Y axis
  int zAxis = Esplora.readAccelerometer(Z_AXIS);    // read the Z axis
  
  if (yAxis > 80)
  {
    digitalWrite (pospitch, HIGH);
    digitalWrite (negpitch, LOW);
    digitalWrite (neut, LOW);
  }
  if (yAxis < -20)
  {
    digitalWrite (pospitch, LOW);
    digitalWrite (negpitch, HIGH);
    digitalWrite (neut, LOW);
  }
  if ((yAxis < 80) && (yAxis > -20))
  {
    digitalWrite (pospitch, LOW);
    digitalWrite (negpitch, LOW);
    digitalWrite (neut, HIGH);
  }
  delay(100);              // wait half a second (500 milliseconds)
}


It seems that the output isn't symmetrical (degrees +/- : output +/-)
"You gotta fight - for your right - to party!"
Don't react - Read.
"Who is like unto the beast? who is able to make war with him?"
It's "bipolar transistor" or "junction transistor" - "BJT" is just stupid.
When all else fails, check your wiring!

Go Up