Wysyłanie i odbieranie wiadomości poprzez odbiornik radiowy

Wysyłanie i odbieranie wiadomości poprzez odbiornik radiowy

Program: realizujący wykonanie transmisji bezprzewodowej danych pomiędzy nadajnikiem z urządzenia A do odbiornika w urządzeniu B.

Oby dwa urządzenia wymagały zamontowania dodatkowej „uniwersalnej” antenki co znacząco polepszyło możliwość oraz szybkość transmisji. Początkowo dane były przekazywane w postaci hexadecymalnej jednak po konwersji na typ zmiennych char uwidocznił się tekst. Dane wysyłane były w pewnych odstępach czasowych.

Do napisania tego programu użyta została biblioteka VirtualWire, umożliwiająca komunikowanie się nadajnika z odbiornikiem, oraz konwertująca przesyłane przez nie dane na takie, które były możliwe do odczytu.

Autorzy:
Łukasz Budrewicz
Filip Moś

Kompilator: Arduino

Galerie:

Arduino:

LabVIEW:

Kod programu:

Kod programu ze strony nadajnika:

#include <VirtualWire.h>

const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 2;
const int transmit_en_pin = 3;

void setup()
{
  // Initialise the IO and ISR
  vw_set_tx_pin(transmit_pin);
  vw_set_rx_pin(receive_pin);
  vw_set_ptt_pin(transmit_en_pin);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);	 // Bits per sec
}

byte count = 1;

void loop()
{
  char msg[19] = {'W','y','s','y','l','k','a',' ','p','o','d',' ','L','A','B','V','I','E','W'};

  msg[20] = count;
  digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
  vw_send((uint8_t *)msg, 20);
  vw_wait_tx(); // Wait until the whole message is gone
  digitalWrite(led_pin, LOW);
  delay(1000);
  count = count + 1;
}

Kod programu ze strony odbiornika:

#include <VirtualWire.h>

const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 11;
const int transmit_en_pin = 3;

void setup()
{
    delay(1000);
    Serial.begin(9600);	// Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Non-blocking
    {
	int i;

        digitalWrite(led_pin, HIGH); // Flash a light to show received good message
	// Message with a good checksum received, print it.
	Serial.print("Got: ");
	
	for (i = 0; i < buflen; i++)
	{
	    Serial.print((char)buf[i]);
	    Serial.print(' ');
	}
	Serial.println();
        digitalWrite(led_pin, LOW);
    }
}