O teu código deveria ter ficado parecido a isto:
//fora da loop...
const unsigned int pinoBotao = 12;
unsigned char botaoAntes = 0;
unsigned char botao = 0;
//dentro da loop...
botao = digitalRead(pinoBotao);
if ((botao == 1) && (botao != botaoAntes)) {//contacto activou e anteriormente o botao nao estava activo.
//mete aqui o teu codigo de envio de mensagem.
}
botaoAntes = botao;
Nota que eu não uso em lado algum uma variável Botão. Uso sim uma variável botao que está definida e tem de de ser definida fora de qualquer função.
Acho que estás a confundir as duas coisas. A variável pinoBotao contém o pino que tu queres ler. A variável botao contém o estado do pino indicado em pinoBotao. Ou seja, pinoBotao será sempre 12, mas o estado do pino indicado na variavel botao pode ser 1 ou 0.
Coloca aqui o teu código como tens agora e a gente indica o que poderá estar mal... mas sinto que estás já perto do que pretendes.