Двусторонняя связь с помощью 433Mhz RF link kit

Двусторонняя связь с помощью 433Mhz RF link kit

Сообщение blackhand999 » 26 фев 2013, 20:20

Здравствуйте! Вроде подобной темы на форуме не было, так что спрошу: возможно ли осуществить двустороннюю связь между двумя Ардуинами с помощью 433Mhz RF link kit?

Дело в том, что я пока освоил звязь в одну сторону, то есть, одна ардуина посылает информацию второй, а та уже отображает значение в терминале на компе. А вот как сделать, чтобы можно было на другую ардуино ещё и собственноручно посылать данные? Два таких набора я уже купил, то есть, у меня два ресивера и два трансмиттера, так что в железном плане всё нормально. А вот как это отобразить в коде?

Вот прошивки на каждую ардуину, которые стоят сейчас и работают в одну сторону:

Ресивер

Код: Выделить всё
#include <VirtualWire.h>

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

    // Initialise the IO and ISR
    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(13, true); // Flash a light to show received good message
   // Message with a good checksum received, dump it.
   Serial.print("Got: ");
   
   for (i = 0; i < buflen; i++)
   {
 
       Serial.print((char) buf[i] - '0');
       Serial.print("");
   }
   Serial.println("");
        digitalWrite(13, false);
    }
    }


Трансмиттер

Код: Выделить всё
#include <VirtualWire.h>
#include <dht11.h>


dht11 mysensor; //
int mysensorPIN = 2; //

int lm335=0;
void setup()
{
    Serial.begin(9600);     // Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);    // Bits per sec

}

void loop()
{
double val = analogRead(lm335);
  double voltage = val*5.0/1024;
double temp = voltage*100 - 273.15;

int chk = mysensor.read(mysensorPIN);
int a = (float)mysensor.humidity, mysensorPIN;
 
  int i = temp;
  int b = a ;
 
  String data = String(i) + "/" + String(b) ;
 char msg[50] ;
data.toCharArray(msg, data.length()+1);


digitalWrite(13, true); //
 
 vw_send((byte*)msg, strlen(msg));
vw_wait_tx(); //
    digitalWrite(13, false);
    delay(200);
   
}


Прошу помочь, подскажите хотя бы принцип, по которому можно это осуществить.
blackhand999
 
Сообщения: 17
Зарегистрирован: 07 дек 2011, 13:59
programming: C++, Java.

Re: Двусторонняя связь с помощью 433Mhz RF link kit

Сообщение Mikhail » 18 июн 2013, 07:22

И как обстоят дела с реализацией идеи?
На таких же модулях планирую осуществить связку двух устройств. Все, что пока приходит в голову: используя SPI на момент передачи подключаться к модулю передатчика (программная реализация: сбрасываем пин, подключенный к управляющему полевику приемника - аналог CS-входа; устанавливаем на высокий уровень пин, подключенный к передатчику); передаем данные по SPI. Когда передачи нет программно переключаем подключенные модули. Соответственно передатчик уходит в режим сна. Дальше программно просто крутим цикл пока не придет прерывание от UART. Вобщем нужно будет дополнительно два полевика на управление питанием модулей. Они будут работать, как ключи выбора устройства в SPI.
Mikhail
 
Сообщения: 19
Зарегистрирован: 06 июн 2013, 08:41
programming: C++


Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron
© 2009-2019 |  О проекте  |  Политика Конфиденциальности  |