GSM Shield

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.