Não fizeste referência se o programa funciona quando não usas o número de telefone como uma variável. Eu assumo que sim, mas não faço ideia.
Outra coisa, este código que deixaste tem coisas estranhas.
Para que serve esta linha:
mySerial.print("\r"); ??
Porquê os delays entre envios de dados para o módulo GSM? Já apareceram aqui vários exemplos sem delays que aparentemente estavam a funcionar.
Finalmente, não me parece correcto que coloques o código a enviar SMSs sem condições no loop... de 4 em 4 segundos o módulo GSM vai tentar mandar SMSs... já viste se tens saldo no cartão? Coloca algo como:
if (Serial.available() > 0) {
if (Serial.read() == 'S') {
//Código para envio de mensagens...
}
}
Assim sempre que enviares um S pela Serial, o módulo manda a SMS. Muito mais controlado e simples.
Ahh e experimenta o programa depois de teres desligado tudo e voltado a ligar.