float átalakítása stringre

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
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ásSzerző: JKotesz » 2018. április 20. péntek, 8:49

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: 283
Csatlakozott: 2015. március 27. péntek, 21:27

Re: float átalakítása stringre

HozzászólásSzerző: csegebiga » 2018. április 20. péntek, 13:43

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ásSzerző: JKotesz » 2018. április 20. péntek, 14:23

Köszönöm szépen,hamarosan kipróbálom

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: float átalakítása stringre

HozzászólásSzerző: kapu48 » 2018. április 20. péntek, 18:27

erre való az sprintf() függvény: http://yaab-arduino.blogspot.hu/2015/12/how-to-sprintf-float-with-arduino.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){}
}



Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég