INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Probleme beim Senden einer Stringvariablen per Wire.write
02.05.2015, 10:02
Beitrag #1
Probleme beim Senden einer Stringvariablen per Wire.write
Hallo miteinander. Ich möchte gerne per I2C von einem µC eine Stringfolge zu dem anderen µC übertragen. Dafür benutze ich Wire.write. Wenn ich etwas übergebe über folgende Art und Weise, gibt es keine Probleme:
Wire.write("test 123");

Wenn ich jedoch eine Stringvariable übertragen möchten, nach folgendem Beispiel, wirft mir der Compiler allerhand Fehler aus:
Wire.write(zeile_1);

Folgende Meldungen bekomme ich dann ausgegeben:
Code:
senden.ino: In function 'void _transmit()':
senden:37: error: no matching function for call to 'TwoWire::write(String&)'
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:60: note: candidates are: virtual size_t TwoWire::write(uint8_t)
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:61: note:                 virtual size_t TwoWire::write(const uint8_t*, size_t)
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:69: note:                 size_t TwoWire::write(long unsigned int)
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:70: note:                 size_t TwoWire::write(long int)
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:71: note:                 size_t TwoWire::write(unsigned int)
C:\Program Files (x86)\Arduino\libraries\Wire/Wire.h:72: note:                 size_t TwoWire::write(int)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:54: note:                 size_t Print::write(const char*, size_t)
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Print.h:49: note:                 size_t Print::write(const char*)

Könnt ihr mir auf die Sprünge helfen und mir sagen, woran das liegen kann? Eigentlich übergebe ich bei beiden Varianten doch lediglich einen String... Hier ist der Code:

Code:
#include <Wire.h>

String zeile_1 = "                ";
String zeile_2 = "                ";
String fuer_zeile_1, fuer_zeile_2;
String stringtotransmit = "11233   ";

char array_1[16];
char array_z1[16];
char array_z2[16];
char array_sum[32];

void setup() {
  Wire.begin(); //join I2C as master
  Serial.begin(9600);  
}

void loop() {
  strcpy(array_z1, "ich bin cool"); //Kopiert die Buchstaben in ein char-Array
  strcpy(array_z2, "und du nicht");
  _transmit();
}

void _transmit(){
  zeile_1 = "                ";//Hiermit wird die Variable wieder zurückgesetzt und das herausgelöscht, was sich vorher darin befunden hat
  zeile_2 = "                ";//Hiermit wird die Variable wieder zurückgesetzt und das herausgelöscht, was sich vorher darin befunden hat
  for(int i=0; i<16; i++){
    zeile_1.setCharAt(i, array_z1[i]); //Ersetzt die zeichen in dem String nacheinander durch die Zeichen im Array
  }
  
  for(int i=0; i<16; i++){
    zeile_2.setCharAt(i, array_z2[i]); //Ersetzt die zeichen in dem String nacheinander durch die Zeichen im Array
  }
  zeile_1.concat(zeile_2); //Hängt den String der Zeile 2 and den String von Zeile 1 hinten ran
  
  Wire.beginTransmission(2);
  Wire.write(zeile_1);
  Wire.endTransmission();  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.05.2015, 10:21
Beitrag #2
RE: Probleme beim Senden einer Stringvariablen per Wire.write
Hi,
Du versuchst da jeweils eine Instanz der String-Klasse zu übergeben. Das kann Wire.write aber nicht, es kann nur char*. Versuch's mal so:
Code:
Wire.write(zeile_1.c_str());
Details dazu sind hier: http://www.arduino.cc/en/Reference/StringObject.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.05.2015, 12:50
Beitrag #3
RE: Probleme beim Senden einer Stringvariablen per Wire.write
(02.05.2015 10:21)Thorsten Pferdekämper schrieb:  Hi,
Du versuchst da jeweils eine Instanz der String-Klasse zu übergeben. Das kann Wire.write aber nicht, es kann nur char*. Versuch's mal so:
Code:
Wire.write(zeile_1.c_str());
Details dazu sind hier: http://www.arduino.cc/en/Reference/StringObject.
Gruß,
Thorsten

Danke Thorsten. Wie immer sehr hilfreich Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.05.2015, 17:27
Beitrag #4
RE: Probleme beim Senden einer Stringvariablen per Wire.write
Jetzt habe ich allerdings wieder ein Problem mit wire.write. Ich wollte das für folgenden Einsatzzweck nutzen: Ich habe mir ein Lauflicht gebaut. Thorsten kennt das schon Smile Auf der Rückseite habe ich nun ein kleines TFT gebaut. Lauflicht und TFT haben je einen µC, da nicht genügend Pins an einem µC für TFT und Lauflicht frei waren. Die beiden sind per I2C miteinander verbunden. Ich wollte nun immer z. B. den modus auf dem TFT ausgeben, in dem sich das Lauflicht befindet. Mein Beispielsketch funktioniert auch. Als ich den Sketch eben in meinen Hauptquellcode einfügen wollte, funktionierte danach das Lauflicht nicht mehr. Sobald ich das #include <Wire.h> eingebe und uploade, fängt der Hauptcode mittendrin an zu stocken. Läuft einfach nicht mehr weiter... Kommentiere ich das #include <Wire.h> wieder aus, läuft der Code ganz normal. Wie kann das denn sein?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.05.2015, 20:58
Beitrag #5
RE: Probleme beim Senden einer Stringvariablen per Wire.write
Mal wieder der Speicher knapp?

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.05.2015, 22:12
Beitrag #6
RE: Probleme beim Senden einer Stringvariablen per Wire.write
Erm, wie soll das gehen? Habe doch kaum mehr was im Speicher seid der letzten Maßnahme. Könnte denn das reine includen von Bibliotheken das Fass zum überlaufen bringen? Wie kann ich überprüfen ob der Speicher voll ist?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.05.2015, 18:17
Beitrag #7
RE: Probleme beim Senden einer Stringvariablen per Wire.write
(02.05.2015 22:12)scritch schrieb:  Habe doch kaum mehr was im Speicher seid der letzten Maßnahme.
Hä? Da hängen doch immer noch 7 * 50 LEDs dran, oder? Mit der normalen Lib für diese LED-Ketten verbrät das mindestens mal 7 * 50 * 3 Byte = 1050 Byte. Das ist schon einiges.

Zitat:Könnte denn das reine includen von Bibliotheken das Fass zum überlaufen bringen?

Ja, da das Teil auch bestimmt irgendwelche Variablen definiert.

Zitat: Wie kann ich überprüfen ob der Speicher voll ist?
Die folgende Funktion einbauen und das Ergebnis mal jede Sekunde per Serial ausgeben.
Code:
int freeRam ()
{
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
};

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.05.2015, 19:16
Beitrag #8
RE: Probleme beim Senden einer Stringvariablen per Wire.write
Wenn ich das in meinen Code implementiere und die Funktion aufrufe, passiert gar nichts. Wenn ich in der Funktion einen Serial.print(1); ausgeben lassen möchte, passiert nichts. Ich rufe die Funktion in meiner Hauptschleife ohne Parameter auf.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Problem mit Wire.available() abfrage avoid 1 254 11.01.2018 13:40
Letzter Beitrag: Tommy56
  [Frage] Unterschied zwischen &=~ und ^= beim Bit ändern auf dem Port? avoid 13 741 11.01.2018 00:53
Letzter Beitrag: avoid
  Arduino zu MySQL via Wifi Fehler beim compilieren Franzel007 21 856 05.01.2018 20:24
Letzter Beitrag: Tommy56
  Probleme mit der Software Thor Wallhall 8 453 31.12.2017 11:34
Letzter Beitrag: Tommy56
  While Schleife in einer If abfrage Thorsten_S 4 317 30.12.2017 16:37
Letzter Beitrag: Thorsten_S
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 17 3.979 30.12.2017 00:40
Letzter Beitrag: koma1965
  Fehlermeldung beim Compilieren DonCamillo 1 324 16.12.2017 21:04
Letzter Beitrag: Chopp
  Probleme Serieller Kommunikation Arduino Nextero 13 659 12.12.2017 16:47
Letzter Beitrag: hotsystems
Information DHT 22 Daten per 433 Mhz senden Niklas 5 607 10.12.2017 17:15
Letzter Beitrag: hotsystems
  Neuling Fehler beim Kompilieren guenni71 6 557 26.11.2017 16:48
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste