NRF24L01 Help
- Войдите на сайт для отправки комментариев
Пт, 09/05/2014 - 13:25
Есть Сервер[Mega2560]
#include <SPI.h>
#include "RF24.h"
#include <OneWire.h>
#include <DallasTemperature.h>
RF24 radio(9, 10);
const uint64_t pipes[2] = {
0xF0F0F0F000LL, 0xF0F0F0F0FFLL};// адреса каналов приема и передачи
long previousMillis = 0;
long interval = 10000;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
typedef struct{
byte id;
float temp;
byte voll;
byte vol2;
byte vol3;
byte vol4;
}
nf1;
nf1 client;
void setup(){
radio.begin();
sensors.begin();
radio.setDataRate(RF24_250KBPS);
radio.setChannel(100);
radio.setRetries(15,15);
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
//radio.startListening();
client.id = 2;
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
sensors.requestTemperatures();
client.temp = sensors.getTempCByIndex(0);
radio.stopListening();
bool ok = radio.write(&client, sizeof(client));
radio.startListening();
delay(20);
}
}
Клиенты[ProMini,Mega8,Mega8515]
#include <SPI.h>
#include "RF24.h"
#include <OneWire.h>
#include <DallasTemperature.h>
RF24 radio(9, 10);
const uint64_t pipes[2] = {
0xF0F0F0F000LL, 0xF0F0F0F0FFLL};
long previousMillis = 0;
long interval = 10000;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
typedef struct{
byte id;
float temp;
byte voll;
byte vol2;
byte vol3;
byte vol4;
}
nf1;
nf1 client;
void setup(){
radio.begin();
sensors.begin();
radio.setDataRate(RF24_250KBPS);
radio.setChannel(100);
radio.setRetries(15,15);
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
sensors.requestTemperatures();
client.temp = sensors.getTempCByIndex(0);
radio.stopListening();
bool ok = radio.write(&client, sizeof(client));
radio.startListening();
delay(20);
}
}
(Сервер принемает только, клиенты отсылают через 10 сек температуру). Все работает без запинок(только пришлось припоять кондеры по 10ф).
Хотелось прикрутить реле, но для этого нужно в два напровления
Попробывал для начала по запросу
[Сервер]
if (Serial.available() > 0) {
client.vol4 = Serial.read();
radio.stopListening();
radio.write(&client, sizeof(client));
delay(20);
radio.startListening();
}
[Клиенты]
if(radio.available()){
radio.read(&client, sizeof(client));
Serial.println(client.vol4);
if(client.vol4 == '5'){
temp(); //вывод температуры
}
}
void temp()
{
radio.stopListening();
sensors.requestTemperatures();
client.temp = sensors.getTempCByIndex(0);
radio.write(&client, sizeof(client));
radio.startListening();
delay(20);
}
Но при отправке 5, иногда работает иногда нет. отсылает раз через 5-8 раз.
Что может быть не так.? Как правельно работает
radio.read(&client, sizeof(client)); radio.stopListening(); radio.write(&client, sizeof(client)); radio.startListening();
Если кто скинет
[Сервер]
запрос id=1
[Клиенты]
считать id и отправить данные.