Hallo Peter,
ich bastel gerade an etwas ähnlichen, welches aber so schnell keinen produktiven Einsatzzweck einnehmen wird, da ich noch nicht weiß, was ich genau damit mache. Erst einmal möchte ich verschiedene Temperaturen der Zimmer damit abfragen.
Mein derzeitiger Aufbau besteht aus nur einem Sender und einem Empfänger
Sender (Sendet jede Sekunde ein Datenpaket, welches mit A-E codiert ist.
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
unsigned long lastMillis;
byte msgIndex;
// Feste Testnachrichten
const char *msg[5] = {
"ATestnachricht", "BTestnachricht", "CTestnachricht", "DTestnachricht", "ETestnachricht"
};
void setup() {
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(8);
Serial.begin(9600);
}
void loop() {
static unsigned long lastMillis;
static byte msgIndex;
if(millis() - lastMillis >= 1000) {
lastMillis = millis();
msgIndex++;
if(msgIndex >= 5) msgIndex = 0;
if(msgIndex < 5)
{
vw_send((uint8_t *)msg[msgIndex], strlen(msg[msgIndex]));
Serial.println(msg[msgIndex]);
vw_wait_tx();
}
}
}
Empfänger (Da ich erst einen Empfänger habe, nimmt dieser alle Codierungen an, gibt aber gleichzeitig aus, vom wem es kam. )
#include <VirtualWire.h>
#include <LiquidCrystal.h>
//Konstanten fuer Zeilen und Spalten des LCDs
const byte numRows = 2;
const byte numCols = 16;
// Bibliothek mit Interface-Pins initialisieren
// LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(9, 8, 4, 5, 6, 7);
void setup()
{
// Initialisiere LCD
lcd.begin(numCols, numRows);
Serial.begin(9600);
lcd.print("Hello");
Serial.begin(9600); // Configure the serial connection to the computer
vw_set_ptt_inverted(true); // Required by the RF module
vw_setup(2000); // bps connection speed
vw_set_rx_pin(3); // Arduino pin to connect the receiver data pin
vw_rx_start(); // Start the receiver
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // We check if we have received data
{
lcd.clear();
lcd.print("Client : ");
lcd.write(buf[0]);
lcd.setCursor(0,1);
for (int i = 1; i < buflen; i++)
{
lcd.write(buf[i]); // The received data is stored in the buffer
// and sent through the serial port to the computer
}
}
}
Für die Abfrage nach plausibles Datenpaket kann man nun abfragen ob buf[0] == ('A' || 'B' .... || 'E') ist und entsprechend alles andere verwerfen.
Was ich noch nicht beachtet habe ist, was geschiet, wenn 2 Sender etwas an den Empfänger schicken, ob es da zu Datenwirrwar kommt.