Go Down

Topic: Problema visualizzazione su sms valore ingresso analogico A0 (Read 854 times) previous topic - next topic

ankamacha

Ciao, chiedo aiuto per la risoluzione di questo inconveniente:
tramite il codice sotto invio via sms il valore letto dall' ingresso analogico A0.

RIvevo l'sms però vedo un valore strano letto dall' ingresso A0 es:
Temperature: -12321.12133
Ho sbagliato qualcosa sull'impostazione della variabile t alla riga??

Code: [Select]
  (sms.SendSMS("numerocell",string));

Se stampo il valore delle temperatura con serialprint vedo il valore correttamente.

Grazie per l'aiuto


Code: [Select]
#include "SIM900.h"
#include <SoftwareSerial.h>
//If not used, is better to exclude the HTTP library,
//for RAM saving.
//If your sketch reboots itself proprably you have finished,
//your memory available.
//#include "inetGSM.h"

//If you want to use the Arduino functions to manage SMS, uncomment the lines below.
#include "sms.h"
SMSGSM sms;

//To change pins for Software Serial, use the two lines in GSM.cpp.

//GSM Shield for Arduino
//www.open-electronics.org
//this code is based on the example of Arduino Labs.

//Simple sketch to send and receive SMS.

int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
char string[160];
int LM35=0;
float t;


void setup()
{
  //Serial connection.
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  //Start configuration of shield with baudrate.
  //For http uses is raccomanded to use 4800 or slower.
  if (gsm.begin(2400)){
    Serial.println("\nstatus=READY");
    started=true; 
  }
  else Serial.println("\nstatus=IDLE");
 
};

void loop()
{
  if(started){
   
     t= analogRead(LM35)*0.488; 
  sprintf(string,"Temperature: %d.%d", t);

   
    if
         (sms.SendSMS("numerocell",string));
          Serial.println("\nSMS sent OK");
   
    //Read if there are messages on SIM card and print them.
    if(gsm.readSMS(smsbuffer, 160, n, 20))
    {
      Serial.println(n);
      Serial.println(smsbuffer);
    }
    delay(60000);
  }
};

leo72


Se stampo il valore delle temperatura con serialprint vedo il valore correttamente.

Stampando "string" dopo la conversione con sprintf?

ankamacha

se provo  a lanciare un normale sketch di acquisizione e stampa dell' ingresso A0 vedo il valore corretto con
Code: [Select]
Serial.println(t);  quindi escludo il problema sull' ingresso A0
se provo da questo sketch il valore di t dell' sms è stranissimo...una serie di numeri che non capisco
dove sbaglio?
grazie

leo72

Andiamo per gradi.
Spedendo un sms creato da te con una temperatura qualunque dentro (esempio "24.2") ti arriva correttamente oppure no?

ankamacha

adesso ho provato e inspiegabilmente funziona! non capisco proprio cosa poteva essere!
Code: [Select]
  sprintf(string,"Temperature: %d.%d", t,2);

se volessi inviare 2 valori di temperatura dovrei creare 2 variabili string o posso mettere tutto in una?

es. voglio che l' sms riporti :   Temperatua 1 :  20    Temperatura 2 :24

cosi potrebbe andare  o devo per forza creare 2 string?
Code: [Select]
  sprintf(string,"Temperatura1: %d.%d", t1,2 "Temperatura2:%d.%d", t2,2);

Grazie

leo72

#5
Jan 19, 2014, 11:11 am Last Edit: Jan 19, 2014, 12:19 pm by leo72 Reason: 1

adesso ho provato e inspiegabilmente funziona! non capisco proprio cosa poteva essere!
Code: [Select]
 sprintf(string,"Temperature: %d.%d", t,2);

Molto probabilmente ti eri scordato un parametro.
Difatti rivedendo la prima versione del comando, tu avevi scritto:
Quote
sprintf(string,"Temperature: %d.%d", t);


Quote

devo per forza creare 2 string?
Code: [Select]
 sprintf(string,"Temperatura1: %d.%d", t1,2 "Temperatura2:%d.%d", t2,2);

Grazie


Dovresti metterlo così:
Code: [Select]
sprintf(string,"Temperatura1: %d.%d", "Temperatura2:%d.%d", t1,2 ,t2, 2);


leo72


ankamacha

Ho provato ma non funziona, se provo a stampare le due temperature su sms vedo solo:
Temperatura1: 266.0 un valore completamaente fuori...   forse è un problema di sintassi?


ankamacha

Ho risolto con: strcat andando a concatenare le stringhe e successivamante convertendo il valore delle variabili temperatura in char infine ho richiamato message per l'invio sms.
es. ottengo Temperatura1 val=22 Temperatura2 val=25

Code: [Select]
string[0]='\0';

   strcat(string,"Temperatura1, VAL=");
   itoa(temperatura1,temp1convertita,10);     //converto il numero della temperatura in char
   itoa(temperatura2 ,temp2convertita,10);   //converto il numero della temperatura in char
   strcat(string,temp1convertita);
   strcat(string,"Temperatura2, VAL=");
   strcat(string,temp2convertita);

   sms.SendSMS(numero cell,message);

leo72

Ieri poi sono stato assente ma mi hai anticipato, avevo anch'io pensato alla stessa soluzione. Bene, mi fa piacere tu abbia risolto

ankamacha

Grazie Leo! Sei sempre molto disponibile ad aiutare. E' anche grazie a te se sto imparando qualcosa di Arduino,  sistema fantastico!

ankamacha

Una cosa che però non riesco a fare è avere il valore con 2 cifre decimali es:
VAL= 10.23
Sull sms mi arriva solo il valore 10.  Come posso fare per risolvere? La variabile l'ho dichiarata float

Come posso fare?
Grazie


Code: [Select]
string[0]='\0';

   strcat(string,"Temperatura1, VAL=");
   itoa(temperatura1,temp1convertita,10);     //converto il numero della temperatura in char
   itoa(temperatura2 ,temp2convertita,10);   //converto il numero della temperatura in char
   strcat(string,temp1convertita);
   strcat(string,"Temperatura2, VAL=");
   strcat(string,temp2convertita);

   sms.SendSMS(numero cell,message);

PaoloP

Hai provato a separare la parte intera dal decimale e poi ricreare la stringa concatenando il valore intero, un punto e il valore decimale?

ankamacha

ho risolto utilizzando la funzione dtostrf poichè itoa vale solo per gli interi

Go Up