GSM Shield

bubulindo:
E se ele usar esta instrução

pinMode(leitura_do_botao, INPUT_PULLUP);

em vez de

pinMode(leitura_do_botao, INPUT);?

só tem de ligar um botão do pino 12 ao GND e usar este if

if ((estado_atual_do_botao == 0) && (estado_atual_do_botao != estado_anterior_do_botao))

Não sabemos como está tudo ligado e pode mesmo ser o botão que está no ar... ou pode ser uma polaridade errada.

Sim, vai trabalhar para ele. Quis seguir a linha de pensamento dele, mas sua direção o conduzirá.