Trouble with keyboard project

hey guys,

I am fairly new to arduino and have been stuck on a project for weeks now... My project was to try and create a three button keyboard with arduino. That is to say, there are three buttons, and each one prints something into the serial COM. I was also going to be able to change what each one prints by typing into the serial com, but I haven't gotten there yet.

Here's a slightly modified version of the debounce code that works (note: it's only for the first button right now):

const int buttonPin = 9; // the number of the pushbutton pin
// Variables will change:
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 50; // the debounce time; increase if the output flickers

void setup() {
pinMode(buttonPin, INPUT);


void loop() {
// read the state of the switch into a local variable:
int reading = digitalRead(buttonPin);

// check to see if you just pressed the button
// (i.e. the input went from LOW to HIGH), and you've waited
// long enough since the last press to ignore any noise:

// If the switch changed, due to noise or pressing:
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();

if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:

// if the button state has changed:
if (reading != buttonState) {
buttonState = reading;

if (buttonState == HIGH) {

// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = reading;

When I tried to write it myself, it didn't work...
I can't even find the difference between the two.

here's my one:

const int b1 = 9;

int b1State;

int b1LastState = LOW;

long b1lastDebounceTime = 0;

long debounceDelay = 50;

void setup() {

pinMode(b1, INPUT);


void loop() {
int reading1 = digitalRead(b1);

if (reading1 != b1LastState) {
b1lastDebounceTime = millis();
if (millis()-b1lastDebounceTime > debounceDelay) {
if (reading1=!b1LastState) {
b1LastState = reading1;

I would really appreciate it if someone could explain what's not working.
Thanks so much in advance,


I would really appreciate it if someone could explain what's not working.

The only thing that I can see that is wrong is that you posted code incorrectly.

You have the hardware. You have to tell us what the code is doing, and how that differs from what you want it to do.

Here's a slightly modified version of the debounce code

That is by far the worst example on the Arduino site. A fifth grader could have written better code. Don't use it.

ok, what do you suggest then?

can you write your own code without debouncing ?
start simple, just one button switching on an LED - if pressed, LED on; if not, LED off - or in your case, if pressed send something to Serial.