Funziona con parametri stringa


11

Nel mio ciclo principale c'è questa stringa:

String string1;

Ho una funzione che prenderà string1 come parametro e la userò per inviare questa stringa come SMS.

sendSMS(string1);

Questa è la funzione sendSMS () (senza parametri):

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

Le mie domande sono:

  1. Come inserisco il parametro di input stringa in sendSMS?
  2. Devo anche usare un prototipo di funzione per sendSMS ()? (in modo che appaia tre volte, 1 nel prototipo, 1 nella dichiarazione e uno nella chiamata). O non ho bisogno di usare il prototipo di funzione prima del ciclo principale ()?

Risposte:


10
  1. Basta cambiare

    void sendSMS()

    per

    void sendSMS(const String& thisIsAString)

    È quindi possibile accedere al parametro all'interno della funzione con thisIsAString.

  2. No, non è necessario un prototipo.


8
Preferirei consigliare di passare la stringa per riferimento, per evitare che il codice aggiuntivo venga eseguito per nulla (costruttore di copia, distruttore): void sendSMS(String& thisIsAString)o meglio, un riferimento const, se l'argomento stringa non deve essere modificato dalla funzione:void sendSMS(const String& thisIsAString)
jfpoilpret,

2

Direi di non usare mai più String. Quando il codice diventa più grande e l'utilizzo della memoria sarà fondamentale, ti imbatterai in un vicolo cieco. So che è più conveniente, ma dai un'occhiata agli array di caratteri. Qualcosa di simile a:

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;
}

Ho cambiato la funzione in bool. Significa che puoi usarlo all'interno di un'istruzione if, dove vorresti che fosse completato prima di continuare con il tuo codice.

Sarà necessario allocare memoria da soli per l'array; dichiaralo così:

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

Qui, allocare 32 byte per i dati e un byte aggiuntivo per il carattere che significa "fine della stringa" (è quello \ 0).


0

Si può cambiare

void sendSMS()

per

void sendSMS(String myinputstring)

puoi usare myinputstring nel tuo codice.


Questa è solo una ripetizione dell'altra risposta.
sempaiscuba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.