teensyduino code

I have had an arduino for a year now and just got a teensyduino 2.0.
I am still having a hard time with the code.
I wanted to make a usb controller for my computer it wold have about ten buttons on it.

This is the code I found.
I wonted to add more buttons to the code but I cant.

Can some one help.

const int pinBtnUp = 0;

const int pinLEDOutput = 11;

//Variables for the states of the SNES buttons
boolean boolBtnUp;

void setup()
{
//Setup the pin modes.
pinMode( pinLEDOutput, OUTPUT );
//Special for the Teensy is the INPUT_PULLUP
//It enables a pullup resitor on the pin.
pinMode( pinBtnUp, INPUT_PULLUP );

//Zero the SNES controller button keys:
boolBtnUp = false;

}

void loop()
{
// //debugging the start button...
digitalWrite ( pinLEDOutput, digitalRead(pinBtnUp));

//Progess the SNES controller buttons to send keystrokes.
fcnProcessButtons();

}

//Function to process the buttons from the SNES controller
void fcnProcessButtons()
{
//Assign temporary values for the buttons.
//Remember, the SNES buttons are read as active LOW.
//Capture their status here:
boolean boolBtnUp = !digitalRead(pinBtnUp);

if ( boolBtnUp )
{
//Set key1 to the U key
Keyboard.set_key1( KEY_U );
} else {
Keyboard.set_key1( 0 );
}

//Send all of the set keys.
Keyboard.send_now();

}

DOn't have a teensy but assuming that if your code works, this should give you insight how it is done.

(code not tested or compiled)

const int pinBtnUp   = 0;
const int pinBtnDown = 1;  // assumption pin 1 is the down

const int pinLEDOutput = 11;

//Variables for the states of the SNES buttons
boolean boolBtnUp = false;
boolean boolBtnDown = false;


void setup()
{
  pinMode( pinLEDOutput, OUTPUT );
  pinMode( pinBtnUp, INPUT_PULLUP );
  pinMode( pinBtnDown, INPUT_PULLUP );
}


void loop()
{
  digitalWrite ( pinLEDOutput, digitalRead(pinBtnUp));

  fcnProcessButtons();
}

void fcnProcessButtons()
{
  boolBtnUp   = !digitalRead(pinBtnUp);
  boolBtnDown = !digitalRead(pinBtnDown);
 
  if ( boolBtnUp )
  {
    Keyboard.set_key1( KEY_U );
	Keyboard.send_now();
  } 
  if ( boolBtnDown )
  {
    Keyboard.set_key1( KEY_D );
	Keyboard.send_now();
  } 
}

Thanks but when I type U or D once they don't stop.

I press the button once and instead of there being one d it does this dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.

111swords

If you want to be able to handle more than 6 buttons, the code will get a bit more complicated as the USB Keyboard protocol only allows registering up to 6 keypresses at the same time (this is why the Teensyduino keyboard class has six separate methods for issuing a keypress).

Up to 6 buttons can be done fairly easily by duplicating this block of code:

boolean boolBtnUp = !digitalRead(pinBtnUp);
 
  if ( boolBtnUp )
  {
    //Set key1 to the U key
    Keyboard.set_key1( KEY_U );
  } else {
    Keyboard.set_key1( 0 );
  }

up to six times, changing the set_key# function that is called for each one, from set_key1() to set_key6(). As I said at the beginning though, writing code to handle 10 buttons becomes a non-trivial task (and you still would not be able to register more than 6 button presses at any one time)

I press the button once and instead of there being one d it does this dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.

You need to reset the boolean to false when the key is send!

  if ( boolBtnUp )
  {
    Keyboard.set_key1( KEY_U );
    Keyboard.send_now();
    BoolBtnUp = false;
  } 
  if ( boolBtnDown )
  {
    Keyboard.set_key1( KEY_D );
    Keyboard.send_now();
    boolBtnDown = false;
  }

give it a try

Are you debouncing your inputs (either with hardware or another method?). Pressing the button "once" it still bounces open and closed for a few milliseconds (perhaps up to a couple hundred)....in a loop that runs in micro seconds this looks like a whole ton of button presses.

This little web video explains this a bit and provides some details on various hardware debouncng strategies.

I tried BoolBtnUp = false; but they just keep on coming.
This is way harder than I thought. :cold_sweat:

Thanks for all of your help I got it to work.

This is my finished code

const int pinBtnUp = 0;
const int pinBtnDown= 1;
const int pinLEDOutput = 11;

boolean boolBtnUp;
boolean boolBtnDown;

void setup()
{
//Setup the pin modes.
pinMode( pinLEDOutput, OUTPUT );

pinMode( pinBtnUp, INPUT_PULLUP );
pinMode( pinBtnDown, INPUT_PULLUP );
//Zero the SNES controller button keys:
boolBtnUp = false;
boolBtnDown = false;
}

void loop()
{
// //debugging the start button...
digitalWrite ( pinLEDOutput, digitalRead(pinBtnUp));

fcnProcessButtons();

}

void fcnProcessButtons()
{

boolean boolBtnUp = !digitalRead(pinBtnUp);
boolean boolBtnDown = !digitalRead(pinBtnDown);
if ( boolBtnUp )
{
//Set key1 to the U key
Keyboard.set_key1( KEY_U );
} else {
Keyboard.set_key1( 0 );
}
if ( boolBtnDown )
{
//Set key1 to the U key
Keyboard.set_key2( KEY_D );
} else {
Keyboard.set_key2( 0 );
}

//Send all of the set keys.
Keyboard.send_now();

}
:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

    //Set key1 to the U key
    Keyboard.set_key2( KEY_D );

When you are going to have useless comments, at least they should be correct useless comments...