Right now, the code will try to send "1" as fast as it possibly can, as long as you're holding the button down. That's bad

What you will want to do is to only send the "1" when the button state changes from up to down, then stop sending.
One easy way to do this is to keep track of the previous state.
Declare a new variable and add prevState = buttonState; right before you do digitalRead.
Then change the next line to: if (buttonState == HIGH && prevState == LOW) {
To do button debouncing, it's better to put a delay right after you send the "1" and just delete the "else" part.
Note that it's common to let the input be HIGH through a pullup resistor then connect the input to ground when you push the button.
Either way works, but since the AVR has built-in pullups you can avoid using additional resistors.