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
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?
encoder Pos ist weder string noch char... serialNumber + ";" + encoderPos Das funktioniert in C(++) nicht...
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.
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!
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.
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 !
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())
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.