Go Down

Topic: Revisione dello sketch con modulo SIM800L (Read 58 times) previous topic - next topic

crisbi71

Jul 02, 2019, 12:14 pm Last Edit: Jul 02, 2019, 02:21 pm by crisbi71
Buon giorno a tutti, vi scrivo perché scopiazzando quà e là ed aggiustandolo per le mie esigenze, ho realizzato un programma che mi gestisce una "bilancia domotica" ovvero  una struttura con relativa cella di carico che tramite un mio sms, mi restituisce, sempre tramite sms, il peso rilevato.
Anticipo che non sono esperto in materia, anzi ne sono ben lontano, però a forza di sbatterci la testa sono riuscito nell'intento.
Mi è rimasta in sospeso solo una cosa...ovvero io ho bisogno che ogni qualvolta che un comando via sms  venga eseguito, debba poi anche essere eliminato per evitare di intasare la poca memoria della sim causandone il blocco. Io ho scritto una funzione che dovrebbe eseguire sempre l'ultimo messaggio non letto, però ho constatato che questo non sempre avviene,  cioè se tutto funziona correttamente, il sistema processa il comando e lo cancella subito dopo, se per qualche motivo, tipo scarsa ricezione del segnale gsm, il messaggio non viene  eseguito, questo rimane nella memoria della sim e a lungo andare, sommandosi ad altri messaggi non eseguiti, mi porta alla saturazione e blocco della sim.
A questo punto chiedo se ci fosse qualcuno disposto a revisionare il mio sketch in modo da verificarne il corretto funzionamento ed eventualmente snellirne inutili passaggi, per rendere il tutto più fluido possibile...grazie in anticipo!
Code: [Select]


  char position;
  //if (started)
    
   scale.set_scale(valoredicalibrazione);
  
   // Faccio una media di 10 letture e le associo alla voce "units"
   units = scale.get_units(10);
  
   //Se abilito questo comando elimino le lettura negative
   //if (units < 0) {
   // units = 0.0;
   //}
    
  Serial.print("Peso:");
  Serial.print(units, 0);
  Serial.println(" g ");
  
  {

    // Legge se ci sono messaggi disponibili sulla SIM Card
    // e li visualizza sul Serial Monitor.
    position = sms.IsSMSPresent(SMS_UNREAD); // Con questo comando esegue solo gli Sms non letti
    if (position)
    {
      // Leggo il messaggio SMS e stabilisco chi sia il mittente
      sms.GetSMS(position, Mittente, smsbuffer, 10);
      Serial.println("Messaggio inviato da:");
      Serial.println(Mittente);
      Serial.println("\r\n SMS testo:");
      Serial.print(smsbuffer);
      
      if (strcmp(smsbuffer,"Reset")==0)      //Invio sms "Reset" per resettare il programma
      {
      Serial.println("...Riavvio...");
      sms.DeleteSMS(position);              //Cancello dalla SIM il comando appenna letto
      delay(500);
      //Riavvia();                          //Comando si software reset con Arduino Uno
      digitalWrite(Reset, LOW);             //Eseguo il comando di Reset mettendo a massa il Pin 4
      }
      if (strcmp(smsbuffer,"Misure")==0)    //Invio sms "Misure" per ricevere sms con valori
      {
      //dtostrf(t2,1,1,Temperatura2);
      //dtostrf(h2,1,1,Umidita2);
      //dtostrf(t1,1,1,Temperatura1);
      //dtostrf(h1,1,1,Umidita1);
      units_sms = scale.get_units(5);          
      dtostrf(units_sms,0,0,peso);
      snprintf(Misure,20,"Peso=%sg",peso);      
      sms.SendSMS(Mittente,Misure);
      sms.DeleteSMS(position);              //Cancello dalla SIM il comando appenna letto
      delay(500);
      //lcd.clear();
      //lcd.init();
      Serial.print(Misure);
      }
      else
      {
      Serial.println(" => non riconosciuto!");
      sms.SendSMS(Mittente,"Comando Errato");  //risposta in caso di messaggio errato
      sms.DeleteSMS(position);              //Cancello dalla SIM il comando appenna letto
      delay(500);  
      }
      sms.DeleteSMS(position);             //Cancello dalla SIM i messaggi appena letti ed eseguiti
     }
   }


Go Up