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
  Ausschaltverzögerung bei einer PV Heizung Hans_Maulwurf 27 708 29.11.2016 23:38
Letzter Beitrag: georg01
  Fehler beim Kompilieren binderj1 5 292 03.10.2016 21:27
Letzter Beitrag: hotsystems
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 222 16.09.2016 20:36
Letzter Beitrag: Datatom
  ArduinoDroid Probleme Brother Tak 1 199 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  NRF24L01+ "Ping" senden, empfangen, bestätigen MeisterQ 8 377 23.08.2016 13:19
Letzter Beitrag: MeisterQ
  Fehler beim Speichern von Projekten Manni66 16 683 23.08.2016 10:05
Letzter Beitrag: hotsystems
  Arduino hängt beim Upload deranda 11 496 12.08.2016 21:27
Letzter Beitrag: hotsystems
  Serial.write Mathias 6 377 29.07.2016 17:06
Letzter Beitrag: Mathias
  Innenwiderstand einer Batterie (Rundzelle 1,5V) Einsteiger94 2 205 24.07.2016 11:42
Letzter Beitrag: SkobyMobil
  Mega: Hardware i2c bus speed (Wire.) verändern? HaWe 10 2.914 14.07.2016 20:09
Letzter Beitrag: Mathias

Gehe zu:


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