spedizine ricorrente SMS con SIM 800L

Ciao a tutti,
Sto provando il modulino con SIM800L e sinceramente è molto ok sia per il prezzo che per le prestazioni.
Però mi sono bloccato su un problema che per molti di voi sarà semplice ma non trovo come risolverlo:
Ho tre sensori che leggo e vorrei avvisare quando entrano in funzione ma creando un void per la trasmissione indipendente dalla stringa da trsmettere e dal resto del programma tipo così
quello che uso è questo

#include <SoftwareSerial.h>
void setup(){
   Serial.begin(9600);
   while(!Serial); 
   Serial.println(" sorveglianza sensori"); 
   Serial.println();  
//Inizializzo seriale tra ARDU e SIM800
    Serial.println(" Inizializzo la seriale processore-GSM");
    serialSIM800.begin(2400);
//Attendo registrazione GSM su rete
   Serial.println(" Attendo 25sec per registrazione su rete ");
for (int i=0; i <= 25; i++){delay(1000);}
void loop() {
//qui quello che si vuole
SMStemp();
 }

void SMStemp(){
//Setto per SMS in formato ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(2000);
//Comando SMS e numero destinatario
  serialSIM800.write("AT+CMGS=\"12345678\"\r\n");
  delay(3000);   
//  Spedisco contenuto SMS 
  serialSIM800.write("Sensore 001 in funzione");  
  delay(5000);   
//Invio da ARDU a SIM800 Ctrl+Z / ESC per dire messaggio SMS completo
  serialSIM800.write((char)26);
  delay(2000);}

Quello che vorrei cambiare è solo questo ("Sensore 001 in funzione")
che diventerà ("Sensore 002 in funzione") ecc.
Avete qualche suggerimento? grazie

Non si chiamano void, si chiamano funzioni! void è il tipo di ritorno! Questa cosa proprio non la sopporto >:(.

Comunque... Intendi questo?

void SMStemp(byte sensorId){
//Setto per SMS in formato ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(2000);
//Comando SMS e numero destinatario
  serialSIM800.write("AT+CMGS=\"12345678\"\r\n");
  delay(3000);   
//  Spedisco contenuto SMS
  serialSIM800.write("Sensore ")
  serialSIM800.write(sensorId);
  serialSIM800.write(" in funzione");
  delay(5000);   
//Invio da ARDU a SIM800 Ctrl+Z / ESC per dire messaggio SMS completo
  serialSIM800.write((char)26);
  delay(2000);
}

ciao SukkoPera,
ti prometto che cercherò di chiamare le cose come si deve ma spesso se non mi viene il termine prendo la "scorciatoia"
Comunque penso di aver capito, ho assegnato sensoreId "piatto1" ma non riesco (non so) farlo funzionare
Come risultato dovrebbe generare un SMS sul telefono con "sensore piatto 1 in funzione" per il secondo " sensore piatto 2 in funzione" ecc
Ti posto come pensavo ma non so come fare per integrarlo.
Ringraziandoti per l'aiuto, Arrigo

#include <SoftwareSerial.h>
#include "DHT.h"
DHT dht;
//SIM800 TX è connesso Arduino D8
  #define SIM800_TX_PIN 8
//SIM800 RX è connesso Arduino D7
  #define SIM800_RX_PIN 7
//Creo un software serial object per comunicare con SIM800
 SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
  void setup(){
   Serial.begin(9600);
   while(!Serial);
   dht.setup(2); // data pin 2
   char piano[9];
   char piano1[]=  "piatto_1";
   char piano2[]=  "piatto_2";
   Serial.println(" sorveglianza sensori"); 
//Inizializzo seriale tra ARDU e SIM800
    Serial.println(" Inizializzo la seriale processore-GSM");
    serialSIM800.begin(2400);
//Attendo registrazione GSM su rete
   Serial.println(" Attendo 25sec per registrazione su rete ");
   for (int i=0; i <= 25; i++){delay(1000);}}
void loop() {
 delay(dht.getMinimumSamplingPeriod());
  int t1=(dht.getTemperature()); 
  if (t1>60){piano=piano1;SMStemp();}
 }
 void SMStemp()
//void SMStemp(byte sensorId)
{
//Setto per SMS in formato ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(2000);
//Comando SMS e numero destinatario
  serialSIM800.write("AT+CMGS=\"12345678\"\r\n");
  delay(3000);   
//  Spedisco contenuto SMS
  serialSIM800.write("Sensore ");
  serialSIM800.write(piano);
 // serialSIM800.write(sensorId);
  serialSIM800.write(" in funzione");
  delay(5000);   
//Invio da ARDU a SIM800 Ctrl+Z / ESC per dire messaggio SMS completo
  serialSIM800.write((char)26);
  delay(2000);
}

Per come l'ho scritto prima, l'id del sensore era un intero. Se invece, come pare, vuoi che sia una stringa, basta cambiare la definizione:

void SMStemp(char sensorId[]){

SukkoPera:
Per come l'ho scritto prima, l'id del sensore era un intero. Se invece, come pare, vuoi che sia una stringa, basta cambiare la definizione:

void SMStemp(char sensorId[]){

quindi devo scrivere nelle dichiarazioni

String sensorId="Piatto_1"

scusa volevo dire

char sensorId="piatto_1"

char sensorId[]="piatto_1";

Se ci metti davanti un const è ancora meglio.

Ma puoi anche chiamare direttamente la funzione:

SMStemp ("piatto_1");

ho fatto così

#include <SoftwareSerial.h>
#include "DHT.h"
DHT dht;
//SIM800 TX è connesso Arduino D8
  #define SIM800_TX_PIN 8
//SIM800 RX è connesso Arduino D7
  #define SIM800_RX_PIN 7
//Creo un software serial object per comunicare con SIM800
 SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);
  void setup(){
   Serial.begin(9600);
   while(!Serial);
   dht.setup(2); // data pin 2
  char sensorId[]="piatto_1"; 
   Serial.println(" sorveglianza sensori");
//Inizializzo seriale tra ARDU e SIM800
    Serial.println(" Inizializzo la seriale processore-GSM");
    serialSIM800.begin(2400);
//Attendo registrazione GSM su rete
   Serial.println(" Attendo 25sec per registrazione su rete ");
   for (int i=0; i <= 25; i++){delay(1000);}}
void loop() {
 delay(dht.getMinimumSamplingPeriod());
  int t1=(dht.getTemperature());
  if (t1>60){SMStemp(sensorId[]);}
 }
void SMStemp (char sensorId[]);{
//Setto per SMS in formato ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(2000);
//Comando SMS e numero destinatario
  serialSIM800.write("AT+CMGS=\"12345678\"\r\n");
  delay(3000);   
//  Spedisco contenuto SMS
  serialSIM800.write("Sensore ")
  serialSIM800.write(sensorId[]);
  serialSIM800.write(" in funzione");
  delay(5000);   
//Invio da ARDU a SIM800 Ctrl+Z / ESC per dire messaggio SMS completo
  serialSIM800.write((char)26);
  delay(2000);
}

ma mi dà errore; evidentemente sto sbagliando

if (t1>60){SMStemp(sensorId[]);}

Qua le quadre non ci vogliono. Rivediti un po' la sintassi degli array.

Togliendo le quadre mi da questi errori:

sketch_jun06b.ino: In function 'void loop()':
sketch_jun06b:28: error: 'sensorId' was not declared in this scope
sketch_jun06b:28: error: 'SMStemp' was not declared in this scope
sketch_jun06b.ino: At global scope:
sketch_jun06b:30: error: expected unqualified-id before '{' token
'sensorId' was not declared in this scope

char sensorId[]="piatto_1";

è definito in setup (), per cui "esiste" solo al suo interno. Ti conviene farla diventare globale.

Ma prima ancora, ti prego di premere CTRL+T!!!

quello me lo ero perso, nella fretta ho scritto nel setup invece di prima
Grazie per il CTRL-T , comincio ad aver sonno e allora divento disordinato.
Ultimo round per oggi il tutto diventa così

#include <SoftwareSerial.h>
#include "DHT.h"
DHT dht;
//SIM800 TX è connesso Arduino D8
#define SIM800_TX_PIN 8
//SIM800 RX è connesso Arduino D7
#define SIM800_RX_PIN 7
//Creo un software serial object per comunicare con SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN, SIM800_RX_PIN);
char sensorId[] = "piatto_1";
void setup() {
  Serial.begin(9600);
  while (!Serial);
  dht.setup(2); // data pin 2

  Serial.println(" sorveglianza sensori");
  //Inizializzo seriale tra ARDU e SIM800
  Serial.println(" Inizializzo la seriale processore-GSM");
  serialSIM800.begin(2400);
  //Attendo registrazione GSM su rete
  Serial.println(" Attendo 25sec per registrazione su rete ");
  for (int i = 0; i <= 25; i++) {
    delay(1000);
  }
}
void loop() {
  delay(dht.getMinimumSamplingPeriod());
  int t1 = (dht.getTemperature());
  if (t1 > 60) SMStemp(sensorId);
}
void SMStemp (char sensorId[]); {
  //Setto per SMS in formato ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(2000);
  //Comando SMS e numero destinatario
  serialSIM800.write("AT+CMGS=\"12345678\"\r\n");
  delay(3000);
  //  Spedisco contenuto SMS
  serialSIM800.write("Sensore ")
  serialSIM800.write(sensorId[]);
  serialSIM800.write(" in funzione");
  delay(5000);
  //Invio da ARDU a SIM800 Ctrl+Z / ESC per dire messaggio SMS completo
  serialSIM800.write((char)26);
  delay(2000);
}

quando cerco di compilare mi dice

sketch_jun06b.ino: In function 'void loop()':
sketch_jun06b:32: error: 'SMStemp' was not declared in this scope
sketch_jun06b.ino: At global scope:
sketch_jun06b:34: error: expected unqualified-id before '{' token
'SMStemp' was not declared in this scope

Grazie per la tua estrema pazienza, :slight_smile: :slight_smile: :slight_smile: :slight_smile: se avrò un pò di tempo riprenderò domani
Ciao,Arrigo

void SMStemp (char sensorId[]); {

Togli il ;

ormai vado avanti per inerzia, forse è meglio che smetta perchè ho visto che sto facendo errori sciocchi
ho compilato togliendo quel brutto ; e mi dice

SMS_POST.ino: In function 'void SMStemp(char*)':
SMS_POST:40: error: expected primary-expression before ']' token
expected primary-expression before ']' token

ciao, buonanotte e grazie

serialSIM800.write(sensorId[]);

Stesso errore di prima...