praegune kellaaeg 24.04.2024 14:26:16
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
Terror
HV veteran
liitunud: 08.11.2001
|
10.05.2018 20:27:39
Väike abi koodiga |
|
|
ARduino laadse kontrolleriga on tehtud temp display ning see loeb väärtuse netist ning kuvab ekraanile.
See koht kus ta netist väärtust loeb muutis oma formaati kergelt ning hetkel ei loa mu kood seda temp väärtust enam korrektselt välja.
Vajalik osa koodist:
request.hostname = "api.thingspeak.com";
request.port = 80;
request.path = "/channels/24877/fields/1/last.json?key=GOKBGDF6332V45P3";
http.get(request, response, headers);
if(response.status == 200){
String web = response.body;
// Serial.println(response.body);
int Zpos = web.indexOf('Z'); // otsib Z pos stringis (kohe peale kellaja lõppu).
String aeg2 = web.substring(Zpos-6,Zpos); // lõikab välja :min:sek osa
String aeg1 = web.substring(Zpos-8,Zpos-6); // lõikab välja hh osa
int gmt = atof(aeg1.c_str());
int tund;
if (Time.isDST()==1){
tund = gmt +3;
}
else{
tund = gmt +2;
}
timeStr = "";
if(tund<10){timeStr += " ";}
timeStr += tund;
timeStr += aeg2;
timeStr += "";
int tempPos = web.indexOf('field1'); // = 3 rida stringis?
int tempPos2 = web.indexOf('"', tempPos); // = esimesed " peale field1 saadus pos väärtust
int enne = web.indexOf('"', tempPos2+1 ); // Otsib " peale tempos omasid
int parast = web.indexOf('"',enne+1); // otsib " peale parast väärtust.
String result = web.substring(enne+1, parast); // võtab temp väärtuse kahe " vahel.
hetkeTemp = atof(result.c_str());
//{"field1":"-5.0","created_at":"2018-03-03T16:10:37Z","entry_id":1555170} <- loetava näidis eelnev formaat - see töötas
//{"created_at":"2018-05-10T17:17:30Z","entry_id":1652165,"field1":"20.4"} <- kuidas nüüd on ning ei tööta
update = 1;
}
|
hetkeTemp väärtusesse ei saa seda 20.4
Kirjutan koodi väga harva ning suure vaevaga, kes asjaga pidevalt tegeleb näeb vea kindlasti kohe ära.
_________________ Väiksemagabariidilised trei, frees ning keevitustööd. PS. |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
|
mikk36
HV Guru
liitunud: 21.02.2004
|
10.05.2018 21:21:57
|
|
|
Muudel muutujatel on tüüp ees, kus on hetkeTemp defineeritud?
Asjatult palju otsid jutumärke muidu, leiad field1 üles, siis pane vastav arv tähemärke otsa ja saad kohe numbri alguse, pärast seda vaid lõpu jutumärgid vaja leida. Seda kas selle indexOf-i või lihtsalt while loopiga charactere otsa liites.
Kontrolli stringi väärtus ka üle enne floatiks parsemist atof() funktsiooniga.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
|
Ohohh
Kreisi kasutaja
liitunud: 13.09.2003
|
11.05.2018 00:06:57
|
|
|
Funktsiooni "substring" teine parameeter on tõenäoliselt pikkus, mitte positsioon.
Proovi nii:
String result = web.substring(enne+1, parast - (enne + 1));
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
Terror
HV veteran
liitunud: 08.11.2001
|
11.05.2018 17:54:10
|
|
|
Tegin väikest debugi ning ei saa aru kuidas ta sellised positsioonid saab:
//tempPos = 17
//tempPos2 = 35
//enne = 37
//parast = 46
request.hostname = "api.thingspeak.com";
request.port = 80;
request.path = "/channels/24877/fields/1/last.json?key=GOKBGDF6332V45P3";
http.get(request, response, headers);
if(response.status == 200){
String web = response.body;
// Serial.println(response.body);
int Zpos = web.indexOf('Z'); // otsib Z pos stringis (kohe peale kellaja lõppu).
String aeg2 = web.substring(Zpos-6,Zpos); // lõikab välja :min:sek osa
String aeg1 = web.substring(Zpos-8,Zpos-6); // lõikab välja hh osa
int gmt = atof(aeg1.c_str());
int tund;
if (Time.isDST()==1){
tund = gmt +3;
}
else{
tund = gmt +2;
}
timeStr = "";
if(tund<10){timeStr += " ";}
timeStr += tund;
timeStr += aeg2;
timeStr += "";
int tempPos = web.indexOf('field1'); // = 3 rida stringis?
int tempPos2 = web.indexOf('"', tempPos); // = esimesed " peale field1 saadus pos väärtust
int enne = web.indexOf('"', tempPos2+1 ); // Otsib " peale tempos omasid
int parast = web.indexOf('"',enne+1); // otsib " peale parast väärtust.
String result = web.substring(enne+1, parast - (enne + 1));
//String result = web.substring(enne+1, parast); // võtab temp väärtuse kahe " vahel.
hetkeTemp = tempPos2;
//tempPos = 17
//tempPos2 = 35
//enne = 37
//parast = 46
//hetkeTemp = atof(result.c_str());
//{"field1":"-5.0","created_at":"2018-03-03T16:10:37Z","entry_id":1555170} <- loetava näidis, eelnev formaat - see töötas
//{"created_at":"2018-05-10T17:17:30Z","entry_id":1652165,"field1":"20.4"} <- kuidas nüüd on ning ei tööta
// link kust loeb: api.thingspeak.com/channels/24877/fields/1/last.json?key=GOKBGDF6332V45P3
update = 1;
}
|
_________________ Väiksemagabariidilised trei, frees ning keevitustööd. PS. |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
|
aseesimees
HV vaatleja
liitunud: 16.08.2004
|
11.05.2018 19:22:15
|
|
|
int tempPos = web.indexOf('field1'); |
peaks olema
int tempPos = web.indexOf("field1"); |
Praegu leiad chari '1' esimese asukoha stringi "field1" asemel.
substring() funktsioon tahab siiski saada positsiooni teise parameetrina, mitte pikkust, ehk enne oli õige.
|
|
Kommentaarid: 12 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
11 |
|
tagasi üles |
|
|
Terror
HV veteran
liitunud: 08.11.2001
|
11.05.2018 19:53:22
|
|
|
Ja asi funkab jälle
_________________ Väiksemagabariidilised trei, frees ning keevitustööd. PS. |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
|
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|