Go Down

Topic: StringToHex Funktion (Read 1 time) previous topic - next topic

Klaus_ww

@nomis321: Du solltest vielleicht einfach mit der genauen Info zu diesem ominösen Pedal rausrücken. Modell, Datenblatt, Beschreibung ... irgendwo hast Du Deine Infos doch her.

Und vermutlich hat Serenifly (wie eigentlich immer) Recht: Du wirst ASCII schicken müssen.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

Serenifly

Du wirst ASCII schicken müssen.
Wenn das Gerät ASCII möchte dann ist aber die ganze Sache mit der Konvertierung sinnlos, da man ja selbst ASCII eintippt



Und für den Anwendungsfall, wo das der Arduino automatisch macht:

ASCII senden und als String Literal angeben:
Code: [Select]

Serial.print("49F0");

ASCII senden und als Hex-formatierten Integer angeben (Achtung: sendet keine führenden Nullen!):
Code: [Select]

Serial.print(0x4940);

Binär senden und als Hex-formatierten Integer angeben:
Code: [Select]

Serial.write(0x4940);

Auch auf das Endzeichen achten. Manchmal wird ein CR als Abschluss verlangt. println() sendet ein CR + LF. Das ist nicht unbedingt richtig.

nomis321

ok wenn es ein ascii ist kann ich ja zb einfach Serial.print("49f0") schreiben oder?
wie wäre das als integer?
sorry bin da ganz am anfang hoffe du verstehst was ich meine.

postmaster-ino

Hi

WAS WILLST DU? (ja, geschrien)
Wann, bitte, möchtest Du uns mit den Daten zu Deinem 'Pedal' glücklich machen?

Bei Deinem jetzigen Beispiel werden die Zeichen
4
9
f
0
/cr
/lf
über die serielle Schnittstelle übertragen.
Wie Das 'unter dem Rock' wirklich aussieht, kann Dir, sei beruhigt, vollkommen egal sein, wenn beide Seiten das Gleiche schwätzen.

Du kannst, statt einer '4' auch 0x34 (in manchen Sprachen auch 34h oder 34H gekennzeichnet), 0b00110100 als binär oder in sonst einem Zahlensystem (implementiert wäre noch Octal, sollte 064 sein, führende Null) versenden, Das ist GENAU das Gleiche!
Ähnlich bei den anderen Zeichen.

Sollte Dein Pedal aber 49f0 als 0x49F0 sehen wollen, wäre
Serial.write(0x49,0xF0); ... oder Serial.write(0xF0,0x49);
auszuprobieren.

Das Alles bekommt aber mit, wenn man einen Blick in das Datenblatt des ominösen Pedal wirft.

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Klaus_ww

Schreien hilft nicht, Deine Beispiele hoffentlich mehr.
Ich bin sicher, er will uns nicht ärgern mit seinen Fragen.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

nomis321

Ja ich will hier echt keine Ärgern habe leider auch nicht mehr infos und kenn mich mit dem ganzen auch noch nicht so aus.
Ich werde das ganze nochmal testen aber schon einmal danke für die Infos

Serenifly

Wo hast du dann die Infos her du du hast? Aus Sekundärquellen?

michael_x

Quote
Sollte Dein Pedal aber 49f0 als 0x49F0 sehen wollen, wäre
Serial.write(0x49,0xF0); ... oder Serial.write(0xF0,0x49);
auszuprobieren.
Wenn du das nicht verstehst,  kein Problem: Das ist völliger Unsinn.

nomis321

ich hätte mal noch ein andere Frage ist es möglich einen Character auf den arduino in HEX zu wandlen und wenn ja wie?

noiasca

Was hast du in welcher Variable und was willst haben.
Eine Ausgabe, eine andere Variable, ...
DE: Wie man Fragen postet:
1. was hat man (Sketch und Hardware)
2. was SOLL es machen
3. was macht es: IST (Fehlverhalten, Fehlermeldungen, Serial.Output ...)
4. Eine Frage stellen bzw. erklären was man erwartet

combie

ich hätte mal noch ein andere Frage ist es möglich einen Character auf den arduino in HEX zu wandlen und wenn ja wie?
Code: [Select]
  Serial.println('z',HEX);
> Das größte Problem, ist die Wahl der richtigen Gedanken <
Frei nach Dale Carnegie

nomis321

das gibt mir zwar aus was ich will aber funktioniert irgendwie auch nciht naja.
mal was anderses.

ich habe folgende funktion um die länge meines befehls zu erkennen.
void funtion1(String test)

{
   for (i = 0; i < sizeof(test) -2; i++)
    {
    Serial.print(test);

gibt es eine möglichkeit wenn ich zb 4xor9xorfxor0 rechnen will dies in einer einfachen Funktion zu machen die auch die Befehlslänge erkennt?

die belibig viele werderte xordert?

Serenifly

#27
Jan 13, 2018, 03:31 pm Last Edit: Jan 13, 2018, 03:32 pm by Serenifly
sizeof(String) macht nicht was du denkst. Das gibt dir die Größe des gesamten Objekts zurück.

nomis321

wie kann ich das sonst machen?
ich will das für meine checksummen berechnung nutzen.
Mein Ziel ist eine Funktion:
void chksum(befehl)

Diese soll automatisch die Checksumme eines Befehls mit belibiger länge ausrechnen in dem sie jede Ziffer xodert.

Zum Beispiel bei 49f0
4 xor 9 xor f xor 0 = [

nomis321

ich hab mir das irgendwie so gedacht aber das nimmt die ide nicht an.

int chksum(String befehl)
{

  v24_chksum=0;
  for (i = 1; to befehl.length)
  string_int = befehl;
  v24_chksum= v24_chksum xor string_int;
}

Go Up