[RESOLVIDO] ARDUINO UNO + IComsat v1.0 shield SIM900 GSM

A mim sempre me disseram para nunca usar goto... O professor que o disse, apesar de saber de programação foi estúpido por não exemplificar porque não se devem usar gotos. Este é um exemplo perfeito.

Tens uma função chamada loop que corre indefinidamente, e em vez disso, preferes tornar o código mais complexo de ler com gotos?

Isto não é a mesma coisa?

char myStr[] = {"OK"};
char myCpy[2];
int i;

void setup(){

}
void loop(){
  char temp;
  Serial.begin(9600);
  if (Serial.available() > 0) {
    for (int i=0; i <= 2; i++)
    { 
      temp = Serial.read();    
      myCpy[i]=temp;}
      delay(100);
      if (strcmp (myStr, myCpy) == 0){
        Serial.println("Senha Correta");
      }
      else {
        Serial.println("Senha Errada");
      }
    }
  Serial.end();
  delay(100);
}

????

Aqui vejo um erro... tu defines strings sem espaço para um caracter terminador \0... mas depois usas a strcmp que procura um caracter terminador para terminar a função. O que acontece com este código é que provavelmente crasha. Correcto?

Ou defines as strings com espaço para o terminador.... ou passas a usar a strncmp desta forma:

 if (strncmp (myStr, myCpy,2) == 0){

O problema disto é que sempre que mudares a password, tens de te lembrar de mudar este número. Se definires os vectores com um espaço a mais, isso não será necessário.