Arduino_byte array in int, float oder bool konvertieren

OP (Firma: Herr) #4408888
Lesenswert?

Hallo Kollegen,

habe eine neue Herausfordureng...

muss aus einem byte array float int oder bool "machen" und kriege es 
nicht hin :-(

siehe beispielcode hier:
1
#include <SPI.h>
2
#include <Ethernet.h>
3
#include <PubSubClient.h>
4
#include <Wire.h>
5
#include <LCD.h>
6
#include <LiquidCrystal_I2C.h>
7

8

9
// Update these with values suitable for your network.
10
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
11
byte server[] = { 192, 168, 111, 97 };
12
byte ip[]     = { 192, 168, 111, 99 };
13

14

15
// Temperature (DS18B20) connected to pin 7
16
//OneWire ds(7);
17

18

19
// MQTT message buffer
20
char message_buff[30];
21

22
// MQTT callback
23
void callback(char* topic, byte* payload, unsigned int length);
24

25
// MQTT PubSub client
26
EthernetClient ethClient;
27
PubSubClient client(server, 1883, callback, ethClient);
28

29
// MQTT callback function
30
void callback(char* topic, byte* payload, unsigned int length) {
31
 
32
!!!!!!hier ist mein problem!!!!!
33

34
int i;
35
  for(i=0; i<length; i++) {
36
    message_buff[i] = payload[i];
37
  }
38
  message_buff[i] = '\0';
39
  if (message_buff[i]==3.2){Serial.println("float");Serial.println(message_buff);}
40
  if (message_buff[i]==true){Serial.println("bool");Serial.println(message_buff);}
41
  String msg = String(message_buff);
42
  Serial.println(message_buff);
43

44
}
45
// Setup
46
void setup() {
47
  // Start the node at the IP address  
48
  Serial.begin(115200);
49
  Ethernet.begin(mac, ip);
50

51
  // Start MQTT client, 
52
  // let the home know the office is up
53

54
  if (client.connect("office")) {
55
    client.publish("/home/status/","office up");
56

57
  }
58
}
59

60

61
// Loop
62
void loop() {
63
  // Start MQTT client
64
  client.loop();
65
  // Read current temperature and 
66
  // publish it to /home/office/temperature/
67
  
68
}
69

70

71
// Temperature reading from DS18B20 module
72
// Code is from OneWire library example
#4408909
Lesenswert?

Zunächst einmal, ich kenne mich mit dieser Library noch nicht besonders 
gut aus. Zunächst wäre interessant, woher die Daten kommen, die von der 
Funktion "callback" verarbeitet werden. Dann ist es noch nötig zu 
wissen, was für Daten ankommen, ob es Binär oder Text oder irgendein 
bekanntes Protokoll ist.

Mit folgendem Code müsste man schonmal nachsehen können, was Ankommt, 
falls es Textdaten sind:
1
void callback(char* topic, byte* payload, unsigned int length) {
2
  Serial.print("Message arrived [");
3
  Serial.print(topic);
4
  Serial.print("] ");
5
  for (int i = 0; i < length; i++) {
6
    Serial.print((char)payload[i]);
7
  }
8
  Serial.println();
9
}

Und damit, was ankommt, falls es Binärdaten sind:
1
 // ungetestet
2
void callback(char* topic, byte* payload, unsigned int length) {
3
  Serial.print("Message arrived [");
4
  Serial.print(topic);
5
  Serial.print("] ");
6
  static const char hex = "0123456789ABCDEF";
7
  for (int i = 0; i < length; i++) {
8
    Serial.print( hex[ payload[i] >> 4   ]);
9
    Serial.print( hex[ payload[i] &  0xF ]);
10
  }
11
  Serial.println();
12
}
OP (Firma: Herr) #4408915
Lesenswert?

ERST EIN mal DANKE!!!!!! und alles gute in diesem Jahr!!!

hier die Ausgabe vim ersten auslese script:
1
Message arrived [system/adapter/node-red/0/memHeapUsed] 12.06
2
Message arrived [system/adapter/node-red/0/uptime] 6971
3
Message arrived [system/adapter/mqtt/0/memHeapUsed] 24.34
4
Message arrived [system/adapter/mqtt/0/uptime] 6891
5
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 10
6
Message arrived [system/host/raspIObroker/load] 0.5
7
Message arrived [system/host/raspIObroker/memHeapUsed] 18.6
8
Message arrived [system/host/raspIObroker/uptime] 31422
9
Message arrived [system/adapter/admin/0/memHeapUsed] 19.88
10
Message arrived [system/adapter/admin/0/uptime] 31419
11
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 100
12
Message arrived [system/adapter/node-red/0/memHeapUsed] 12.09
13
Message arrived [system/adapter/node-red/0/uptime] 6986
14
Message arrived [system/adapter/mqtt/0/memHeapUsed] 25.19
15
Message arrived [system/adapter/mqtt/0/uptime] 6906
16
Message arrived [system/host/raspIObroker/load] 0.39
17
Message arrived [system/host/raspIObroker/memHeapUsed] 19.74
18
Message arrived [system/host/raspIObroker/uptime] 31437
19
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 10
20
Message arrived [system/adapter/admin/0/memHeapUsed] 21.15
21
Message arrived [system/adapter/admin/0/uptime] 31434
22
Message arrived [system/adapter/node-red/0/memHeapUsed] 12.13
23
Message arrived [system/adapter/node-red/0/uptime] 7001
24
Message arrived [system/adapter/mqtt/0/memHeapUsed] 26.01
25
Message arrived [system/adapter/mqtt/0/uptime] 6921
26
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 100
OP (Firma: Herr) #4408922
Lesenswert?

ok...

damit

static const char hex[] = "0123456789ABCDEF";

kommt folgendes:
1
Message arrived [system/adapter/node-red/0/uptime] 37333331
2
Message arrived [system/adapter/mqtt/0/memHeapUsed] 32352E3337
3
Message arrived [system/adapter/mqtt/0/uptime] 37323531
4
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 3130
5
Message arrived [system/host/raspIObroker/load] 302E3139
6
Message arrived [system/host/raspIObroker/memHeapUsed] 31372E3933
7
Message arrived [system/host/raspIObroker/uptime] 3331373832
8
Message arrived [system/adapter/admin/0/memHeapUsed] 31382E3239
9
Message arrived [system/adapter/admin/0/uptime] 3331373739
10
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 313030
11
Message arrived [system/adapter/node-red/0/memHeapUsed] 392E3233
12
Message arrived [system/adapter/node-red/0/uptime] 37333436
13
Message arrived [system/adapter/mqtt/0/memHeapUsed] 32362E3233
14
Message arrived [system/adapter/mqtt/0/uptime] 37323636
15
Message arrived [system/host/raspIObroker/load] 302E3135
16
Message arrived [system/host/raspIObroker/memHeapUsed] 31392E3036
17
Message arrived [system/host/raspIObroker/uptime] 3331373937
18
Message arrived [mqtt/0/DOino<>MQTT/0/13/1/0/3] 3130
19
Message arrived [system/adapter/admin/0/memHeapUsed] 31392E3537
20
Message arrived [system/adapter/admin/0/uptime] 3331373934
OP (Firma: Herr) #4409005
Lesenswert?

sooo...
erste erfolge :-)
1
void callback(char* topic, byte* payload, unsigned int length) {
2
.
3
.
4
. 
5
int i;
6
  for(i=0; i<length; i++) {
7
    message_buff[i] = payload[i];
8
  }
9
  message_buff[i] = '\0';
10
//in den buffer schreiben
11
  char *test=message_buff;
12
//Pointer setzen Anfangsadresse
13
  double temp = strtod(test,NULL);
14
//"strtod" converts the string "temp" into a double precision number
15
  int tempo = atoi(test);
16
// Array to int
17
  float ftemp = atof(test);
18
// Array to float
19
  Serial.println("BUFF");Serial.println(message_buff);
20
Serial.println("FTEMP");Serial.println(ftemp);
21
Serial.println("sieg3:=");Serial.println(tempo);
22
  
23
 }

ist so ok???

oder geht es auch LEGANTER?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren