Guten Abend, habe eine Frage .Wer kann mir das hier genau erklären????
< pos=99;
msg[0]=map(pos,0,1023,0,1023);????????
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Warte bis senden zu ende ist
delay(100); >
ist ein sende Sketch <VirtualWire.h> . Das Beispiel senden Zahlen von 0-100(funktioniert auch) ich möchte größere senden 10234 z.B. und weiß nicht was ich da ändern muss. Ich verstehe einfach nicht was da im Sketch passiert???
MFG
Die Länge des zu sendenden Textes kann durchaus länger sein.
Wenn du deine Map-Funktion rausnimmst und nur ein char-array in entsprechender Länge übergibst, wirst du sehen, es funktioniert..
Danach solltest du die Map-Funktion anpassen.
Dem Sender ist es erstmal egal, wie Lang die "Msg" ist, wenn das char-Array genug Platz hat.
Was möchtest du mit "map" erreichen ?
Hmmm, mit "map" ......also ich möchte nicht als char sonder als Int oder byte senden, mit char habe ich das Problem dass ich das beim Empfänger umwandeln muss um die empfangenen Daten zu verarbeiten. 1-9 wird ja umgewandelt und als char gesendet. Oder sehe ich es Falsch.... z.B. ich habe 2 Empfänger da wollte ich verschiedene Daten senden . Empfänger1-->24(%)also nur zahl 24 und empfänger2--> 58, so jetzt müssen ja die Empfänger wissen das die erste zahl zu Emp.1 gehört und die zweite zu den zweiten. also dachte ich, ich setze einen Code zusammen aus 1100+24 wird zum ersten geschickt und 2200+58 zum zweiten. Also weiß jeder Empfänger ob er das empfangene verarbeiten soll oder nicht. Oder kannst du mir da was anderes raten.
ich habe vor paar Tage schon rumgespielt mit senden ,habe glaube ich gelesen das es nur in char versandet wird..... also ich kann keine int zahl als 2323 versenden b.z.w. empfangen um gleich mit den Daten zu rechnen, stimmt?
wollte eine steuerg für die Fußbodenheizung basteln....
Und das geht leider nicht.
Der Sender kann nur char-Arrays (Strings) senden, das ist doch kein Problem.
Das musst du beim Empfänger trennen.
Ich mache es bei mir auch so und setze zwischen die Werte einen ":" und danach selektiere ich im Empfänger.
Z.B. so:
char* Part0 = strtok(StringReceived, ":"); // Ersten Inhalt (Part0) vor : holen
int Part1 = atoi(strtok(NULL, ":")); // zweiten Inhalt (Part1) vor : holen
int Part2 = atoi(strtok(NULL, ":")); // dritten Inhalt (Part2) vor : holen
HotSystems:
Und das geht leider nicht.
Der Sender kann nur char-Arrays (Strings) senden, das ist doch kein Problem.
Das musst du beim Empfänger trennen.
Ich mache es bei mir auch so und setze zwischen die Werte einen ":" und danach selektiere ich im Empfänger.
Z.B. so:
char* Part0 = strtok(StringReceived, ":"); // Ersten Inhalt (Part0) vor : holen
int Part1 = atoi(strtok(NULL, ":")); // zweiten Inhalt (Part1) vor : holen
int Part2 = atoi(strtok(NULL, ":")); // dritten Inhalt (Part2) vor : holen
Danke werde es mal ausprobieren....... was macht "atoi" ja und wie versendest du ?
so-->
msg[0]=("123:123");
vw_send((uint8_t *)msg, strlen(msg));
warum steht bei msg[0] die 0 und deklariert ist char msg[20]; ich kenne die bedeutungen nicht.
parabello:
ich habe vor paar Tage schon rumgespielt mit senden ,habe glaube ich gelesen das es nur in char versandet wird..... also ich kann keine int zahl als 2323 versenden b.z.w. empfangen um gleich mit den Daten zu rechnen, stimmt?
wollte eine steuerg für die Fußbodenheizung basteln....
habe ich grad erst gelesen.
Richtig, es geht nur mit char Array (mein Post #5), aber du kannst es im Empfänger auch wieder in "int" wandeln.
So mache ich es auch, um bestimmte Funktionen zu nutzen.
ich habe jetzt die Möglichkeit die du vorgeschlagen hast genommen-->
char* Part0 = strtok(Datenempfang, ":"); // Ersten Inhalt (Part0) vor : holen
int Part1 = atoi(strtok(NULL, ":")); // zweiten Inhalt (Part1) vor : holen
int Part2 = atoi(strtok(NULL, ":"));
also funktioniert super.
ich hatte vorher 2 String gesendet und um die beiden zu unterscheiden habe ich den Anfang abgefragt
if (SensorData.substring(0,7) == "zimmer1")
oder
if (Datenempfang.substring(0,7) == "zimmer1")
dann kam der Rest ..... aber deine Lösung HotSystems finde ich komfortabler.
und das senden sah so aus -->
snprintf(msg, 20, "Zimmer1=%d",temp );
vw_send((uint8_t *)msg, strlen(msg));
wie schon mal erwähnt ,ich hatte einige Zeit paar Sachen mit c-control gemacht und fand Workbench++ super, vor allem die Hilfe wo die ganze befehle erklärt wurden(deutsch),da ich kein Englisch in der Schule gehabt habe fällt es mir schwer, da durchzublicken.
Gibt es da so was ähnliches für Adriano, Referenz Überblick???
parabello:
ich habe jetzt die Möglichkeiten die du vorgeschlagen hast genommen-->
char* Part0 = strtok(Datenempfang, ":"); // Ersten Inhalt (Part0) vor : holen
int Part1 = atoi(strtok(NULL, ":")); // zweiten Inhalt (Part1) vor : holen
int Part2 = atoi(strtok(NULL, ":"));
also funktioniert super.
ich hatte vorher 2 String gesendet und um die beiden zu unterscheiden habe ich den Anfang abgefragt
if (SensorData.substring(0,7) == "zimmer1")
dann kam der Rest ..... aber deine Lösung ardubu finde ich komfortabler.
parabello:
dann kam der Rest ..... aber deine Lösung HotSystems finde ich komfortabler.
ok, alles klar.
und das senden sah so aus -->
snprintf(msg, 20, "Zimmer1=%d",temp );
vw_send((uint8_t *)msg, strlen(msg));
Wenn es funktioniert, alles gut.
.... vor allem die Hilfe wo die ganze befehle erklärt wurden(deutsch),da ich kein Englisch in der Schule gehabt habe fällt es mir schwer, da durchzublicken.
Gibt es da so was ähnliches für Adriano, Referenz Überblick???