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 и отправить данные.