Fonctions avec paramètres de chaîne

11

À l'intérieur de ma boucle principale, il y a cette chaîne:

String string1;

J'ai une fonction qui prendra string1 comme paramètre et l'utilisera pour envoyer cette chaîne comme SMS.

sendSMS(string1);

Il s'agit de la fonction sendSMS () (sans paramètres):

void sendSMS()
{ sms.beginSMS(remoteNumber);
  sms.print(finalstr);
  sms.endSMS();
  lcd.setCursor(0, 0);
  lcd.print("Message sent!");
  delay(10000); 
}

Mes questions sont:

  1. Comment placer le paramètre d'entrée de chaîne dans sendSMS?
  2. Dois-je également utiliser un prototype de fonction pour sendSMS ()? (pour qu'il apparaisse trois fois, 1 dans le prototype, 1 dans la déclaration et un dans l'appel). Ou je n'ai pas besoin d'utiliser le prototype de fonction avant la boucle principale ()?
user1584421
la source

Réponses:

10
  1. Changez juste

    void sendSMS()

    à

    void sendSMS(const String& thisIsAString)

    Vous pouvez ensuite accéder au paramètre à l'intérieur de la fonction avec thisIsAString.

  2. Non, vous n'avez pas besoin de prototype.

Le gars avec le chapeau
la source
8
Je conseillerais plutôt de passer la chaîne par référence, pour éviter que du code supplémentaire ne soit exécuté pour rien (constructeur de copie, destructeur): void sendSMS(String& thisIsAString)ou mieux encore, une référence const, si l'argument chaîne ne doit pas être modifié par la fonction:void sendSMS(const String& thisIsAString)
jfpoilpret
2

Je dirais de ne plus jamais utiliser String. Lorsque le code s'agrandit et que l'utilisation de la mémoire est critique, vous tombez dans une impasse. Je sais que c'est plus pratique, mais essayez les tableaux de caractères. Quelque chose comme:

bool sendSMS(int remoteNumber, char *finalstr){
  bool isFinished = 0;
  sms.beginSMS(remoteNumber);
  for (int i=0;i<sizeof(finalstr);i++){
      sms.print(finalstr);
  }
  sms.endSMS();
  lcd.setCursor(0, 0);
  lcd.print("Message sent!");
  delay(10000);
  isFinished = 1;
  return isFinished;
}

J'ai changé la fonction en bool. Cela signifie que vous pouvez l'utiliser dans une instruction if, où vous souhaitez qu'il soit terminé avant de continuer avec votre code.

Vous devrez allouer vous-même de la mémoire à la baie; le déclarer comme ceci:

char stringArray[33] = {'\0'};

Ici, j'alloue 32 octets pour les données et un octet supplémentaire pour le caractère qui signifie "fin de chaîne" (c'est ça \ 0).

dBm
la source
0

Vous pouvez changer

void sendSMS()

à

void sendSMS(String myinputstring)

vous pouvez utiliser myinputstring dans votre code.

pythosanck
la source
C'est juste une répétition de l'autre réponse.
sempaiscuba