передача данных по беспроводному каналу 433MHz

Gniko
Offline
Зарегистрирован: 17.01.2015

Здравствуйте! Я организовал связь между Arduino mega2560, на котором стоит приемник, и UNO,на котором стоит передатчик. В свою очередь UNO просто передает на Mega через каждые 5 секунд цифру+1. Mega принимает эти данные и при условии, если принятая цифра меняется, записывает ее на флешку в текстовый файл. у меня частично получилось это сделать при следующей конфигурации : 

------------------------------------------------------------

Передатчик





#include <VirtualWire.h>

#include <EasyTransferVirtualWire.h>

#include <EEPROM.h> // эта библиотека нужна для работы с энерго-независимой памятью



const int led_pin = 13;

const int transmit_pin = 2;

unsigned int unique_device_id = 0;

unsigned int count = 1;



//create object

EasyTransferVirtualWire ET; 



struct SEND_DATA_STRUCTURE{

//наша структура данны. она должна быть определена одинаково на приёмнике и передатчике

//кроме того, размер структуры не должен превышать 26 байт (ограничение VirtualWire)

unsigned int device_id;

unsigned int destination_id; 

unsigned int packet_id;

byte command;

int data;

};



//переменная с данными нашей структуры

SEND_DATA_STRUCTURE mydata;



//ниже пару функций для записи данных типа unsigned int в EEPROM





void setup()

{

// блок инициализации

pinMode(led_pin, OUTPUT);



ET.begin(details(mydata));

vw_set_tx_pin(transmit_pin); //установка пина, к которому подключен data-вход передатчика

vw_setup(2000); //скорость передачи

Serial.begin(9600);

randomSeed(analogRead(0));

}



void loop()

{

mydata.device_id = 12348;

mydata.destination_id = 11111;



mydata.command = 0;

mydata.data = count;



digitalWrite(led_pin, HIGH); // включаем светодиод для отображения процесса передачи

Serial.print(" device id "); 

Serial.print(mydata.device_id); 

Serial.print(" data: "); 

Serial.print(mydata.data);

Serial.print(" ... "); 

ET.sendData(); // отправка данных

digitalWrite(led_pin, LOW);

Serial.println("DONE");

delay(5000);

count = count + 1;

}

-----------------------------------------------

Приемник



#include <VirtualWire.h>

#include <EasyTransferVirtualWire.h>



#include <SD.h>

const int led_pin = 13;

const int receive_pin = 3;

unsigned int unique_device_id = 0;

const int i = 1;

File myFile;



EasyTransferVirtualWire ET; 

char buf[120];



struct SEND_DATA_STRUCTURE{



unsigned int device_id;

unsigned int destination_id; 

unsigned int packet_id;

byte command;

int data;

};





SEND_DATA_STRUCTURE mydata;



void setup()

{

pinMode(led_pin, OUTPUT);

Serial.begin(9600); 



ET.begin(details(mydata));



vw_set_rx_pin(receive_pin);

vw_setup(2000); 

vw_rx_start(); 



}



void loop()

{

if(ET.receiveData()) 

{

if (mydata.destination_id == 11111) {

digitalWrite(led_pin, HIGH);

Serial.print("Got: ");

Serial.print("Device ID: ");

Serial.print(mydata.device_id);

Serial.print(" Destination ID: ");

Serial.print(mydata.destination_id); 

Serial.print(" Command: ");

Serial.print(mydata.command);

Serial.print(" Data: ");

Serial.print(mydata.data);

Serial.println();

digitalWrite(led_pin, LOW);

digitalWrite(4,HIGH); // выключили SD

digitalWrite(10,LOW); // включили W5100





}



else {

Serial.print(" Data: ");

}

}

if(SD.begin(4)) 

myFile = SD.open("test.txt", FILE_WRITE);

myFile.println("12345");

myFile.println(mydata.destination_id);

myFile.println(mydata.data);

myFile.close();

digitalWrite(10,HIGH); 



digitalWrite(4,LOW); 



}



----------------------------------------







Но тогда у меня получается такая конитель:







12345

11111

1

12345

11111

1

12345

11111

1

12345

11111

1

12345

11111

1

12345

11111

1

12345

11111

2

12345

11111

2

12345

11111

2

12345

11111

2

12345

11111

2

12345

11111

2

12345

11111

2



подскажите пожалуйста, что можно с этим сделать?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Не помню где читал что на 433 можно использовать только 5 % времени. То есть нельзя передавть данные непрерывно.

bwn
Offline
Зарегистрирован: 25.08.2014

А вы не пробовали кнопочку "вставка редактирование кода" и в ней флажок "свернуть"?

Gniko
Offline
Зарегистрирован: 17.01.2015

Извините, не все такие умные)))

 

bwn
Offline
Зарегистрирован: 25.08.2014

Gniko пишет:

Извините, не все такие умные)))

 

А читать тоже влом?  http://arduino.ru/forum/obshchii/sozdanie-temy

Неужели думаете кому то интересно листать вашу простыню, без нумерации и на полкилометра?