Pages: [1]   Go Down
Author Topic: Problema visualizzazione su sms valore ingresso analogico A0  (Read 680 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
  (sms.SendSMS("numerocell",string));

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

Grazie per l'aiuto


Code:
#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);
  }
};
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22917
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se stampo il valore delle temperatura con serialprint vedo il valore correttamente.
Stampando "string" dopo la conversione con sprintf?
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se provo  a lanciare un normale sketch di acquisizione e stampa dell' ingresso A0 vedo il valore corretto con
Code:
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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22917
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

adesso ho provato e inspiegabilmente funziona! non capisco proprio cosa poteva essere!
Code:
  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:
  sprintf(string,"Temperatura1: %d.%d", t1,2 "Temperatura2:%d.%d", t2,2);

Grazie
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22917
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

adesso ho provato e inspiegabilmente funziona! non capisco proprio cosa poteva essere!
Code:
 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:
 sprintf(string,"Temperatura1: %d.%d", t1,2 "Temperatura2:%d.%d", t2,2);

Grazie

Dovresti metterlo così:
Code:
sprintf(string,"Temperatura1: %d.%d", "Temperatura2:%d.%d", t1,2 ,t2, 2);
« Last Edit: January 19, 2014, 06:19:03 am by leo72 » Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

GRAZIE LEO!
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22917
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ringraziami se funziona, prima provalo.  smiley-razz
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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);
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 22917
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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);
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 114
Posts: 7176
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: