Danke euch für die Ausführungen. Ich habe hier nochmal den Ausgangscode wie er war bevor ich daran rumgespielt habe, mit Zeiger im vw_send, das habe ich nun verstanden.
#include <VirtualWire.h>
#include <VirtualWire_Config.h>
// 433 MHz Sender mit der VirtualWire Library V 1.27
// Matthias Busse 17.5.2014 Version 1.0
// Daten > D4
char *msg = "Hallo Welt";// Nachricht
const byte DatenPin = 4;
void setup() {
pinMode(DatenPin, OUTPUT);
vw_setup(2000); // Bits pro Sekunde
vw_set_tx_pin(DatenPin); // Datenleitung
}
void loop(){
vw_send((uint8_t*)msg, strlen(msg));
vw_wait_tx(); // warten bis alles übertragen ist
delay(1000);
}
Seh ich es richtig, dass die chars ohnehin hier zu bytes gemacht werden
(uint8_t*)msg
?
Kann ich demnach in meinem Code das hier machen bzw. würdet ihr den absegnen?
Sender (liest Joystick aus und sendet Wert als byte):
#include <VirtualWire.h>
#include <VirtualWire_Config.h>
const byte DatenPin = 4;
//char *msg = "Hallo Welt"; // Nachricht
byte Power[] = {1, 0, 0}; // byte0 ist Kennung, byte1 enthält Wert, byte2 markiert Ende und ist immer "0"
void setup() {
pinMode(DatenPin, OUTPUT);
vw_setup(5000); // Bits pro Sekunde
vw_set_tx_pin(DatenPin); // Datenleitung
}
void loop() {
uint16_t Joystick_x = analogRead(A7); //hohe Werte unten
uint16_t Joystick_y = analogRead(A6); //hohe Werte links
Joystick_x = constrain(Joystick_x, 0, 1016);
Joystick_x = map(Joystick_x, 0, 1016, 255, 0);
Joystick_y = constrain(Joystick_y, 0, 1016);
Joystick_y = map(Joystick_y, 0, 1016, 255, 0);
Power[1] = Joystick_x;
send_433(Power);
}
void send_433(byte Data[]) {
vw_send(Data, sizeof(Data));
vw_wait_tx(); // warten bis alles übertragen ist
}
Empfänger dazu:
#include <VirtualWire.h>
#include <VirtualWire_Config.h>
const byte DatenPin = 2;
int i;
byte Data[] = {0, 0, 0};
byte Power = 0;
void setup() {
Serial.begin(9600);
vw_setup(5000); // Bits pro Sekunde
vw_set_rx_pin(DatenPin); // Datenleitung
vw_rx_start(); // Empfänger starten
}
void loop() {
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) { // überprüfen ob eine Nachricht eingegangen ist
for (i = 0; i < buflen; i++) {
Data[i] = buf[i]; // Nachricht aus buf
}
Power = Data[1];
Serial.println(Power);
}
}
Funktionieren tut das wiederum derzeit so wie es ist. Da ich eurem Rat vertraue und versucht habe alle Vorschläge umzusetzen wollte ich der Funktion vw_send eigentlich einen Zeiger geben, dann blieb der Wert aber konstant auch wenn ich den Joystick bewegt habe. Sollte ich das noch ändern und wenn ja wie kann ich den Wert dennoch variieren?
Wenn ihr sonst noch was zu meckern habt gerne sagen und im besten Fall Gegenvorschläge machen!