#include <OneWire.h>
#define ONE_WIRE_BUS 7
#define DS_Power 8
#define DS_Gnd 6
OneWire oneWire(ONE_WIRE_BUS);
#include <DallasTemperature.h>
DallasTemperature sensors(&oneWire); //DS18B20
#define chclient 1 // номер клиента 1...
#define timesend 300 // интервал отправки данных,для обычных датчиков можно установить время выше.
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
unsigned long time1=0;
unsigned long time2=0;
//
// Set up nRF24L01 radio on SPI bus plus pins 9 & 10
RF24 radio(9,10);
//
// 0 -прием , 1 -передача
const uint64_t pipes[2] = {0xF0F0F0F0E1LL,0xF0F0F0F0D2LL};
//
// структура отправляемых данных.Изменяемые данные.Размер структуры должен быть не больше 32 байт !
typedef struct{
byte identifier;// номер передатчика.МЕНЯТЬ НЕЛЬЗЯ
int temperature_Sensor;// передаём температуру.
int Analog;
boolean test_data;
unsigned int Error_Message; // счетчик ошибок
unsigned long count;// счетчик передач для контроля качества канала
}
nf1;
nf1 clientnf;
void setup() {
radio.begin();
Serial.begin(9600);
pinMode(DS_Power, OUTPUT);
pinMode(DS_Gnd, OUTPUT);
digitalWrite(DS_Power, HIGH);
digitalWrite(DS_Gnd, LOW);
// выбор скорости
//radio.setDataRate(RF24_250KBPS);
radio.setDataRate(RF24_1MBPS);
// radio.setDataRate(RF24_2MBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setChannel(100); //тут установка канала
radio.setCRCLength(RF24_CRC_16);
radio.setAutoAck(false); // выключить аппаратное потверждение
radio.setRetries(15,15);
radio.openWritingPipe(pipes[1]); // Открываем канал передачи
//radio.openReadingPipe(1,pipes[0]); // Открываем канал приема
clientnf.identifier = chclient;
}
byte errorstate;
void loop() {
//
для чтения сенсоров
if ((millis()-time1) >= 10000) { // обновляем сенсоры раз в секунду (1000млс)
// тут будут опросы сенсоров
sensors.requestTemperatures(); // опрос датчика температуры улица
clientnf.temperature_Sensor = sensors.getTempCByIndex(0)*10; // опрос датчика температуры улица
Serial.println(sensors.getTempCByIndex(0));
clientnf.Analog=readVcc();
Serial.println (readVcc());
time1 = millis();
}
time2 = millis();
} // конец loop
long readVcc()
{
// Read 1.1V reference against AVcc
// set the reference to Vcc and the measurement to the internal 1.1V reference
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0);
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
ADMUX = _BV(MUX3) | _BV(MUX2);
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
#endif
delay(75); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Start conversion
while (bit_is_set(ADCSRA,ADSC)); // measuring
uint8_t low = ADCL; // must read ADCL first - it then locks ADCH
uint8_t high = ADCH; // unlocks both
long result = (high<<

| low;
// result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
// result = 1074150L / result; // Calculate Vcc (in mV); 1125300 = 1.05*1023*1000
result = 1094610L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 //Подбирал сам по тестеру
return result; // Vcc in millivolts
}