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 ()?

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.


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).


0

Vous pouvez changer

void sendSMS()

à

void sendSMS(String myinputstring)

vous pouvez utiliser myinputstring dans votre code.


C'est juste une répétition de l'autre réponse.
sempaiscuba
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.