Forum: Compiler & IDEs Arduino Nano Problem (Int to Char)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Pete (Gast)


Lesenswert?

Moin
ich würde gerne ein Char Array bestehend aus einer Seriennummer und 
einem Steuerwert übergeben:

Seriennummer: SN#s48fa3asd4d
Steuerwert: 14

Zusammengesetzt soll folgendes über I2C ausgegeben werden: 
SN#s48fa3asd4d;14

Folgende Variablen werden verwendet:

#define I2C_ADDRESS_OTHER 0x2

int encoderPos = 14;
string serialNumber = "SN#s48fa3asd4d";

void setup() {
    Wire.begin();
}
void loop()
{
      Wire.beginTransmission(I2C_ADDRESS);
      char trasmit_c[1];
      String transmit_s = serialNumber + ";" + encoderPos;
      transmit_s.toCharArray(trasmit_c, 17);
      Wire.write(trasmit_c);
}


das komische ist, dass es bei einem Skript funktioniert und bei einem 
anderen nicht. Einmal wird ein linearer Regler ausgelesen (Steuerwert 
zwischen 0 und 100) und einmal ein Inkrementgeber (Steuerwert zwischen 
-1000 und +1000)

: Verschoben durch Moderator
von dummfrager (Gast)


Lesenswert?

Pete schrieb:
> ich würde gerne ........ übergeben:

An wen oder was bitte?

Pete schrieb:
> das komische ist, dass es bei einem Skript funktioniert und bei einem
> anderen nicht

Was funktioniert den genau nicht?

von Ganz Klar (Gast)


Lesenswert?

encoder Pos ist weder string noch char...

serialNumber + ";" + encoderPos
Das funktioniert in C(++) nicht...

von Pete (Gast)


Lesenswert?

An ein andere Gerät, die Datenübertragung funktioniert auch. Im 
Fehlerfall wird immer wieder die Setup-Routine aufgerufen. Ich weiß 
jedoch nicht warum. Wenn ich

      String transmit_s = serialNumber + ";" + encoderPos;

durch

      String transmit_s = serialNumber + ";" + "14";

ersetze, funktioniert alles.



Im Beispiel sind Seriennummer und Steuerwert fest, in echt ist der 
Steuerwert natürlich nicht statisch. Die Seriennummer wird nur einmalig 
vergeben und dann in den EEPROM geschrieben.

von Ganz Klar (Gast)


Lesenswert?

Und in trasmit_c[1] ist zu kurz...

von Pete (Gast)


Lesenswert?

Tatsache, ich hatte es im anderen Sketch probiert, da hatte es 
funktioniert. habe jetzt encoderPos durch String(encoderPos) ersetzt und 
es funktioniert. Ist natürlich plausibel dennoch wundere ich mich, warum 
es im anderen Sketch funktioniert hat.

Danke euch!

von Pete (Gast)


Lesenswert?

Was meinst du genau mit zu kurz ?

von BlaBla (Gast)


Lesenswert?

Pete schrieb:
> String transmit_s = serialNumber + ";" + "14";

Ja, weil jetzt "14" ein String ist.

von BlaBla (Gast)


Lesenswert?

Suche mal nach Function "itoa"

von Ganz Klar (Gast)


Lesenswert?

Pete schrieb:
> Was meinst du genau mit zu kurz ?

https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tochararray/

Die Verwendung des Interfaces ist falsch. Entweder mit '1' aufrufen oder 
den buffer mit 17 Elementen erzeugen.

von Pete (Gast)


Lesenswert?

Achso das, das ist mir auch grad aufgefallen. Die Bufferlänge ist nun 
als transmit_s.length()+1 definiert. Das sollte  sowohl für 1 als auch 
1000 dann funktionieren.

Danke euch für die Hilfe !

von Mike R. (thesealion)


Lesenswert?

Wenn man schon die Arduino Strings benutzen will, kann man sich die 
transmit_c Variable auch komplett sparen und direkt den String an 
Wire.write() übergeben.

Oder man kann direkt das in String verwendete Char-Array nutzen (mittels 
.c_str())

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.