För ca ett år sedan beställde jag en FM-sändare och en FM-mottagare på 433 Mhz och idag plockade jag upp den och knackade lite C-kod. Jag har fått det att fungera så det är inga problem. Men det jag är lite besviken över är just kvalitén på signalen.
Min kod fungerar så här. När ena AVR CPU:n skickar en 1:a till sändaren och mottagaren tar upp 1:an så ska mottagaren även säga åt en annan AVR CPU att tända en LED diod. Och om sändaren skickar ut en 0:a så betyder det att LED dioden släcks.
Lyckligvis fanns det även bibliotek för denna till..Arduino *halleluja music*
Men det är inte alla gånger mottagaren kan förstå vad sändaren säger. Ibland går det bra att skicka "00" eller "10" eller "100" som tolkas som antingen "0" eller "1", eller tolkas som inget.
Min antenn på dessa moduler är bara en kabel på ca 150-200 mm. Och dessa moduler är för tillfälligt (test) rätt nära varandra.
Hur kan jag då förbättra så att det blir klarare svar? Är det koden jag måste ändra på då, eller biblioteket eller måste jag minimera störningar?
Dessa moduler med 5 volt och ca 150-200mm lång antenn ska ha en räckvidd på ca 90 meter vid plan och tom yta.
Mottagaren:
Kod: Markera allt
//Reciever Code (Leonardo)
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
vw_setup(2000);
vw_set_rx_pin(7);
vw_rx_start();
}
void loop()
{
uint8_t buflen = VW_MAX_MESSAGE_LEN;
uint8_t buf[buflen];
if(vw_get_message(buf, &buflen))
{
for(int i = 0;i < buflen;i++)
{
if(buf[i] == '1')
{
digitalWrite(13,HIGH);
Serial.println("ON");
}
else if(buf[i] == '0')
{
digitalWrite(13,LOW);
Serial.println("OFF");
}
}
}
}
Kod: Markera allt
//Transmitter Code (Uno)
#include <VirtualWire.h>
void setup()
{
Serial.begin(9600);
vw_setup(2000);
vw_set_tx_pin(7);
}
void loop()
{
if(Serial.available())
{
char c = Serial.read();
if(c == '1')
{
vw_send((uint8_t *)c, 1);
}
else if(c == '0')
{
vw_send((uint8_t *)c, 1);
}
}
}