Arduino Daten wandeln

Im Unterforum Hardware, Betriebssysteme, Programmiersprachen - Beschreibung: Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht.

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 05 12 2024  06:11:10      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Hardware, Betriebssysteme, Programmiersprachen        Hardware, Betriebssysteme, Programmiersprachen : Alles zu Software, Hardware, Windows, Linux, Programmiersprachen
Anfragen zu Modding, Games, Cracks, etc. unerwünscht.

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
Arduino Daten wandeln
Suche nach: arduino (705)

    







BID = 1092355

Murray

Inventar



Beiträge: 4863
 

  


Hallo
Ich schreibe mir gerade was für den ESP32 mit der Arduino-Software um einen Wärmemengenzähler auszulesen.

Gerade hänge ich fest beim Wandeln von HEX in DEC.
Und zwar will ich die HEX-Zahlen-Abbildung als DEC-Zahlen weiterverwenden.
Also aus HEX 58 soll DEC 58 werden.
Gibt dafür bestimmt irgend ein Befehl ...

Genau genommen hab ich ein CHAR-Array wo ich die Daten drin habe.

Meinetwegen
58, 09, 88, 16 (als HEX in buf[27] bis buf[30])
Das brauche ich als Dezimalzahl 16880958 (sind Liter)

BID = 1092357

Murray

Inventar



Beiträge: 4863

 

  

Jetzt habe ich es so hinbekommen.
Ist aber noch ein Fehler drin.
Als String werden führende Nullen der Hex-Zahlen abgeschnitten.
Wie kann man das formatieren auf 2 Stellen?



Code :

String temp1 =  String(b[27], HEX);   

String temp2 = String(b[28], HEX);
String temp3 = String(b[29], HEX);
String temp4 = String(b[30], HEX);
String myString=temp4+temp3+temp2+temp1;
float Volumen = myString.toFloat();


BID = 1092362

roger34

Neu hier



Beiträge: 40

beim float hast du nur 23 Bit mantisse. deswegen wird dir die Zahl mal abgeschnitten.

ich würde folgendes machen



Code :


value=0;
for(i=30;i>=27;i--){
value*=100;
value= ((buf[i]>>4) & 0x0f)*10 + (buf[i] & 0x0f);
}



[ Diese Nachricht wurde geändert von: roger34 am  6 Jan 2022 15:04 ]

[ Diese Nachricht wurde geändert von: roger34 am  6 Jan 2022 15:07 ]

BID = 1092363

Murray

Inventar



Beiträge: 4863

Was passiert bei dem
value*=100;
?

Denn irgendwas stimmt noch nicht.
Bis jetzt gibt es so nicht die Gesamtzahl aus.

BID = 1092364

roger34

Neu hier



Beiträge: 40


Zitat :
Murray hat am  6 Jan 2022 15:37 geschrieben :

Was passiert bei dem
value*=100;
?

Denn irgendwas stimmt noch nicht.
Bis jetzt gibt es so nicht die Gesamtzahl aus.


ist das gleiche wie value = value*100;

BID = 1092366

roger34

Neu hier



Beiträge: 40

Natürlich muss man hier value = vlaue + ...... schreiben


Zitat :




Code :


value=0;
for(i=30;i>=27;i--){
value*=100;
value= value + ((buf[i]>>4) & 0x0f)*10 + (buf[i] & 0x0f);
}




BID = 1092367

Murray

Inventar



Beiträge: 4863

Guter Ansatz
Habe es hinbekommen



Code :


float value=0;
int i;
unsigned long z=1000000;
unsigned long Volumen;

Volumen = 0;

for(i=30;i>=27;i--)
{
value= ((b[i]>>4) & 0x0f)*10 + (b[i] & 0x0f);
Volumen =value *z + Volumen;
z = z /100;
}
Serial.println (Volumen);



[ Diese Nachricht wurde geändert von: Murray am  6 Jan 2022 15:58 ]

BID = 1092368

Murray

Inventar



Beiträge: 4863


Zitat :
roger34 hat am  6 Jan 2022 15:54 geschrieben :

Natürlich muss man hier value = vlaue + ...... schreiben


Funktioniert jetzt auch und ist natürlich besser

BID = 1092369

BlackLight

Inventar

Beiträge: 5327

Bin leider jetzt erst zum Antworten gekommen.
Zitat : Murray hat am  6 Jan 2022 12:42 geschrieben :
Also aus HEX 58 soll DEC 58 werden.
0x58 -> 88(10), richtig?



Zitat :
Genau genommen hab ich ein CHAR-Array wo ich die Daten drin habe.

Meinetwegen
58, 09, 88, 16 (als HEX in buf[27] bis buf[30])
Sind das 16-bit chars? Oder sind das einfach nur 16-bit Variablen? Wie das interpretiert wird ist ja das Problem von Nutzer/Compiler und nicht vom µC.
Kannte bisher nur char mit 8 bit.

BID = 1092384

Murray

Inventar



Beiträge: 4863


Zitat :
BlackLight hat am  6 Jan 2022 16:08 geschrieben :

Bin leider jetzt erst zum Antworten gekommen.
Zitat : Murray hat am  6 Jan 2022 12:42 geschrieben :
Also aus HEX 58 soll DEC 58 werden.
0x58 -> 88(10), richtig?



Nein.
Der Dezimalausdruck soll gleich dem Hex-Wert sein.
Also aus HEX 58 ein HEX 3A (58) machen.

Funktioniert aber mit dem von roger34 sehr gut.
Habe das jetzt auch für den Rest der Werte angewand.

Ein paar waren auch Dezimal.
Hatte auch keine Beschreibung zu dem Datenaufbau, alles so nach und nach rausbekommen.
Als nächstes jetzt die Werte in die Datenbank.

Lange nicht mehr programmiert, macht Spass wenn es dann funktioniert. Da vergeht die Zeit wie im Flug.

BID = 1092387

BlackLight

Inventar

Beiträge: 5327


Zitat : Murray hat am  6 Jan 2022 21:26 geschrieben :
Der Dezimalausdruck soll gleich dem Hex-Wert sein.
Also aus HEX 58 ein HEX 3A (58) machen.
Ok, also doch sowas wie BCD-Code. Interessant, dass das heute immer noch zum Einsatz kommt. Danke für die Antwort!

BID = 1092391

Murray

Inventar



Beiträge: 4863

Das Gerät (WMZ Sensus PolluCom E über M-Bus) ist nicht neu, mindestens 10 Jahre alt. Heute funktioniert doch sowas über Funk etc.

Hätte noch ein Problem mit dem Initialisieren der Hardware-Schnittstelle. Also normal Serial2.
Im Ruhezustand ist die Sendeleitung normal auf High.
Mit dem Einschalten natürlich auf Low, mit dem 1. gesendeten Datenpaket geht die kurz auf High, danach schon das Startbit Low.
Dieser Low-High-Low-Wechsel wird wohl schon als 1. Bit erkannt und somit wird das verfälscht und vom Gerät nie erkannt. Ab dem 2. Paket funktioniert es dann.
Ist natürlich nur ein Schönheitsfehler, schicke ich halt das 1. Paket 2 Mal bzw. als 1. irgendwas.
Nur bekommt man die Leitung vorher schon auf High um dann mit Pause erst das 1. Paket zu senden.
Delay etc. hat darauf keinen Einfluss.


BID = 1092392

Jornbyte

Moderator



Beiträge: 7181


Zitat :
Mit dem Einschalten natürlich auf Low, mit dem 1. gesendeten Datenpaket geht die kurz auf High, danach schon das Startbit Low.
Dieser Low-High-Low-Wechsel wird wohl schon als 1. Bit erkannt und somit wird das verfälscht und vom Gerät nie erkannt. Ab dem 2. Paket funktioniert es dann.

Das ist normal und kenne ich seit Jahren. Das erste Paket einfach wegwerfen.

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 1092395

Jornbyte

Moderator



Beiträge: 7181


Zitat :
Also aus HEX 58 ein HEX 3A (58) machen.

Ist das nun HEX 58 oder HEX 3A?
Oder soll das DEC 58 und HEX 3A sein?
Wer soll das Verstehen....

_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.

BID = 1092399

Murray

Inventar



Beiträge: 4863

Also es ist eine HEX 58 am Gerät, er zeigt im Display auch 58 an.
Warum es da so gemacht ist weis ich nicht.
Ah jetzt weis ich was BlackLight meint ....
Vielleicht war da wirklich mal ein Display mit BCD zu 7-Segment-Anzeige dran.

Aber es ist halt nicht nur 58 was ich weitergeben will als Zahl sondern 16880958 (HEX 101953E).
Also das Abbild der 4 HEX-Zahlen bildlich zusammen gesetzt.



[ Diese Nachricht wurde geändert von: Murray am  7 Jan 2022  8:43 ]


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 1 Beiträge verfasst
© x sparkkelsputz        Besucher : 182455930   Heute : 613    Gestern : 5836    Online : 252        5.12.2024    6:11
2 Besucher in den letzten 60 Sekunden        alle 30.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.111474990845