Ascii Code aus einer Funktion zurückgeben

moin,
ich würde gerne die Inhalte eines (unsigned char) Arrays in ASCII zurückgeben.
also genauso, wie die Darstellung durch Serial.write().
Wie kann ich vorgehen?

hier mein Programm

unsigned char* Get_Extended_Version() {
  RFID_Serialport.begin(115200);                                    // Baudrate zur Kommunikation mit dem RFID-Sensor
  byte*p;
  Senden(EV_Nutzbytesanzahl, EV_Nutzbyte1, EV_Nutzbyte2);
  if  (Fehlerbehandlung(EV_Empfangsbyteslaenge) == (-1))
    return 0;
  else {
    unsigned char EV_Array [43];
    p = Empfangen(EV_Empfangsbyteslaenge);
    for (int n = 0; n < EV_Empfangsbyteslaenge; n++) {
      EV_Array[n] = *(p + n);
      Serial.write(EV_Array[n]);
    }
    return EV_Array;
  }                                                   
  if (Empfangen(HW_SW_Empfangsbyteslaenge) == 2)return 0;
  
}

die Ausgabe durch Serial.write();

GWR0VSNO00119481⸮A

Was hindert dich?

Tipp:

unsigned char EV_Array [43];
Dieses Array ist nur in der Funktion zuverlässig verfügbar.

Du solltest also ein externes Array übergeben und in der Funktion füllen.

ich würde gerne die Inhaltes des Arrays in ASCII umwandeln so, dass ich die umgewandelten Arrayselementen in form eines Strings ausgebe, wenn ich die Funktion aufrufe.

Z.B.: Serial.print(Get_Extended_Version())
bekomme ich das Hier

GWR0VSNO00119481⸮A

ich würde gerne die Inhaltes des Arrays in ASCII umwandeln

Was ist denn da jetzt drin?

die umgewandelten Arrayselementen

Von Was in Was?

Du darfst keine Zeiger auf lokale Variablen zurückgeben! Der Normale C weg ist es das Array als Parameter zu übergeben und dann wieder zurückzugeben. Und letzeres ist auch nur nötig damit man die Funktion direkt in andere Funktionen einsetzen kann

combie:
Was ist denn da jetzt drin?

Von Was in Was?

es sind unsigned char werte drin.
und ich möchte von unsigned char zu Ascii

es sind unsigned char werte drin.
und ich möchte von unsigned char zu Ascii

Worin unterscheiden sich deine unsigned char von den Ascii Zeichen?

aslo mit folgendem Code

int* Get_Extended_Version() {
  RFID_Serialport.begin(115200);                                    // Baudrate zur Kommunikation mit dem RFID-Sensor
  byte*p;
  String myString;
  Senden(EV_Nutzbytesanzahl, EV_Nutzbyte1, EV_Nutzbyte2);
  if  (Fehlerbehandlung(EV_Empfangsbyteslaenge) == (-1))
    return 0;
  else {
    int EV_Array [43];
    p = Empfangen(EV_Empfangsbyteslaenge);
    for (int n = 0; n < EV_Empfangsbyteslaenge; n++) {
      EV_Array[n] = *(p + n);
      Serial.write(EV_Array[n]);
      Serial.print(" = ");
      Serial.println(EV_Array[n]);
    }
    return EV_Array;
  }                                                   
  if (Empfangen(HW_SW_Empfangsbyteslaenge) == 2)return 0;
  
}

bekome ich die Ausgabe

⸮ = 170
+ = 43
+ = 43
⸮ = 225
⸮ = 134
R = 82
 = 3
⸮ = 172
% = 37
1 = 49
0 = 48
0 = 48
0 = 48
0 = 48
1 = 49
3 = 51
7 = 55
7 = 55
  = 32
  = 32
  = 32
  = 32
  = 32
  = 32
  = 32
R = 82
W = 87
R = 82
0 = 48
 = 3
b = 98
N = 78
O = 79
0 = 48
0 = 48
1 = 49
1 = 49
9 = 57
4 = 52
8 = 56
1 = 49
⸮ = 175
A = 65

ich wünsche mir mit Serial.print die werte Links bekommen und nicht mit Serial.write

return EV_Array;

Ist falsch, auch wenn deine lokale Test-Ausgabe noch richtig ist. EV_Array müsste zumindest als static deklariert werden, damit es außerhalb des else-Zweigs (und der Funktion) noch gültig ist.

Und warum nimmst du ein int - Array?

Gefällt dir an

⸮ = 170

  • = 43
    ...

Irgend etwas nicht? Wenn, was?

ich wünsche mir mit Serial.print die werte Links bekommen und nicht mit Serial.write

Fein!
Immerhin glaubst du zu wissen, was du willst....

Aber:
Was gefällt dir nicht an Serial.write()?
(Wenn es doch genau das zu tun scheint, was du doch willst....)