float átalakítása stringre

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
Avatar
JKotesz
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 27. kedd, 8:49

float átalakítása stringre

Hozzászólás Szerző: JKotesz »

Szeretnék segítséget kérni.

4 hőmérő szonda adatát szeretném elküldeni naponta sms-ben.

Kód: Egész kijelölése

#include <Sim800L.h>
#include <SoftwareSerial.h>       
#include <OneWire.h> 
#include <DallasTemperature.h>        

#define RX  10
#define TX  11
#define ONE_WIRE_BUS 2 
DallasTemperature sensors(&oneWire);
Sim800L GSM(RX, TX);

char text[140];;
char* number;
bool error; 					

void setup(){
	GSM.begin(9600); 
	sensors.begin(); 			
	number="3630349****"; 			
	
}

void loop(){

sensors.requestTemperatures();
float temp0 = sensors.getTempCByIndex(0);
float temp1 = sensors.getTempCByIndex(1);
float temp2 = sensors.getTempCByIndex(2);
float temp3 = sensors.getTempCByIndex(3);

string tempstring0;
string tempstring1;
string tempstring2;
string tempstring3;

tempstring0 = String(temp0,1);
tempstring1 = String(temp1,1);
tempstring2 = String(temp2,1);
tempstring3 = String(temp3,1);


String  uzenet = ("Hofok1: " + tempstring0 + " Hofok2: " +  tempstring1 + " Hofok3: " +  tempstring2 +  " Hofok4: " + tempstring3 );
 uzenet.toCharArray(text,140);
  GSM.sendSms(number,text);
	while(1){}
}
Az sms küldés megáll és a program megakad.
Ha a text változó helyére fix szöveget írok elküldi az sms-t.
Úgy gondolom valamit a float -> String átalakításnál rontok el.
De nem tudom mit.

Valaki legyen szíves segítsen.
Köszönöm
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: float átalakítása stringre

Hozzászólás Szerző: csegebiga »

Először is: küldjed ki a soros portra, hogy mit küldene a gsm modulnak.(a GSM.SendSms() helyett, mellett)
Az hasonlít-e ahhoz, amit a modul vár?
Pl nem tul hosszú-e? Nincs-e benne olyan karakter, amit a modul nem érthet? Ha rövidebb az üzeneted 140 karakternél, mit csinál az üres helyekkel?
Avatar
JKotesz
Újonc
Újonc
Hozzászólások: 5
Csatlakozott: 2018. március 27. kedd, 8:49

Re: float átalakítása stringre

Hozzászólás Szerző: JKotesz »

Köszönöm szépen,hamarosan kipróbálom
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: float átalakítása stringre

Hozzászólás Szerző: kapu48 »

erre való az sprintf() függvény: http://yaab-arduino.blogspot.hu/2015/12 ... duino.html
Így valahogy:

Kód: Egész kijelölése

#include <Sim800L.h>
#include <SoftwareSerial.h>       
#include <OneWire.h> 
#include <DallasTemperature.h>        

#define RX  10
#define TX  11
#define ONE_WIRE_BUS 2 
DallasTemperature sensors(&oneWire);
Sim800L GSM(RX, TX);

char *text[140];
char* number;
bool error;                

void setup(){
   GSM.begin(9600); 
   sensors.begin();          
   number="3630349****";          
   
}

void loop(){
float temp[4];// Beolvasott értékek
int Slength = 0; // Az üzenet hossza

sensors.requestTemperatures();
float temp[0] = sensors.getTempCByIndex(0);
float temp[1] = sensors.getTempCByIndex(1);
float temp[2] = sensors.getTempCByIndex(2);
float temp[3] = sensors.getTempCByIndex(3);

/*
 * A sprintf függvény megegyezik a printf függvénnyel, kivéve, 
 * hogy a kimenetet az s karaktersorozatba írja, majd a '\0' végjellel lezárja. 
 * Az s karaktersorozatnak elegendően hosszúnak kell lennie, 
 * hogy az eredményt tárolni tudja. 
 * A függvény visszatérésekor a kiírt karakterek számát adja (a végjel nélkül számolva).
 * int sprintf(char *s, const char *format, ...)
 */
 // Össze füzés char tömbé, 
Slength = sprintf(text, "Hofok1: %f Hofok2: %f Hofok3: %f Hofok4: %f",  temp[0], temp[1], temp[2], temp[3]);
//String  uzenet = ("Hofok1: " + tempstring0 + " Hofok2: " +  tempstring1 + " Hofok3: " +  tempstring2 +  " Hofok4: " + tempstring3 );
 Serial.println(text);
// uzenet.toCharArray(text, Slength+1);
  GSM.sendSms(number,text);
   while(1){}
}

Válasz küldése