передача данных по беспроводному каналу 433MHz
- Войдите на сайт для отправки комментариев
Здравствуйте! Я организовал связь между 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
подскажите пожалуйста, что можно с этим сделать?
Не помню где читал что на 433 можно использовать только 5 % времени. То есть нельзя передавть данные непрерывно.
А вы не пробовали кнопочку "вставка редактирование кода" и в ней флажок "свернуть"?
Извините, не все такие умные)))
Извините, не все такие умные)))
А читать тоже влом? http://arduino.ru/forum/obshchii/sozdanie-temy
Неужели думаете кому то интересно листать вашу простыню, без нумерации и на полкилометра?