Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "DHT.h"
- #include "nRF24L01.h" //NRF24L01 library created by TMRh20 https://github.com/TMRh20/RF24
- #include "RF24.h"
- #include "SPI.h"
- #include "string.h"
- ///////////////////////////////////
- //czujnik temperatury i wilgotnosci
- #define DHTPIN 2
- //#define DHTTYPE DHT11 // DHT 11
- #define DHTTYPE DHT22 // DHT 22 (AM2302)
- //#define DHTTYPE DHT21 // DHT 21 (AM2301)
- DHT dht(DHTPIN, DHTTYPE);
- //koniec
- ///////////////////////////////////
- ///////////////////////////////////
- //radio
- RF24 radio(9,10);
- //adresy kanałów komunikacyjnych
- byte addresses[][6] = {"1Node","2Node"};
- //koniec
- ///////////////////////////////////
- /*
- * tablica odczyty zawiera dane (float) z czterech sensorów
- * odczyty[0] - temperatura
- * odczyty[1] - wilgotność
- * odczyty[3] - czujnik RF, napięcie na wejściu ADC
- * odczyty[2] - fotorezystor, napięcie na wejściu ADC
- * odczyty[4] - zmienna room, tutaj identyfikator 1.0
- */
- float odczyty[5];
- unsigned int instrukcja = 0;
- unsigned long last_time=0;
- String data;
- void odczytaj()
- {
- // Reading temperature or humidity takes about 250 milliseconds!
- // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
- /*
- * tablica odczyty zawiera dane (float) z czterech sensorów
- * odczyty[0] - temperatura
- * odczyty[1] - wilgotność
- * odczyty[2] - fotorezystor, napięcie na wejściu ADC
- * odczyty[3] - czujnik RF, napięcie na wejściu ADC
- * odczyty[4] - zmienna room, tutaj identyfikator 1.0
- */
- odczyty[0] = dht.readTemperature();
- odczyty[1] = dht.readHumidity();
- odczyty[3] = analogRead(A0)*5.0/1024.0; //Wartość napięcia detektora RF/EMF;
- odczyty[2] = analogRead(A1)*5.0/1024.0; //Wartość napięcia fotorezystora;
- // check if returns are valid, if they are NaN (not a number) then something went wrong!
- if (isnan(odczyty[0]) || isnan(odczyty[1]))
- {
- //wartość awaryjna
- odczyty[0] = 999.9;
- odczyty[1] = 999.9;
- }
- parser();
- }
- void texas_ranger()
- {
- float odczyty_tmp[4];
- odczyty_tmp[0] = odczyty[0];
- odczyty_tmp[1] = odczyty[1];
- odczyty_tmp[3] = odczyty[3];
- odczyty_tmp[2] = odczyty[2];
- odczytaj();
- /*
- * tablica odczyty zawiera dane (float) z czterech sensorów
- * odczyty[0] - temperatura
- * odczyty[1] - wilgotność
- * odczyty[3] - czujnik RF, napięcie na wejściu ADC
- * odczyty[2] - fotorezystor, napięcie na wejściu ADC
- * odczyty[4] - zmienna room, tutaj identyfikator 1.0
- */
- //warunki wysłania komunikatu do matki (odebranie int = 66)
- if((odczyty_tmp[2]-odczyty[2])>1.0)
- {
- instrukcja = 66;
- }
- }
- void parser()
- {
- data = "";
- data += String(odczyty[0]);
- data += ";";
- data += String(odczyty[1]);
- data += ";";
- data += String(odczyty[2]);
- data += ";";
- data += String(odczyty[3]);
- data += ";";
- data += String(odczyty[4]);
- data += ";";
- }
- void setup()
- {
- Serial.begin(9600);
- dht.begin();
- odczyty[4] = 1.0;
- // Setup and configure rf radio
- radio.begin();// Start up the radio
- radio.setPALevel(RF24_PA_MAX);
- radio.setDataRate(RF24_1MBPS);
- radio.setAutoAck(1); // Ensure autoACK is enabled
- radio.setRetries(15,15); // Max delay between retries & number of retries
- radio.openWritingPipe(addresses[1]);
- radio.openReadingPipe(1,addresses[0]);
- odczytaj();
- radio.startListening(); // Start listening
- last_time = millis();
- }
- void loop()
- {
- texas_ranger();
- //obsługa nRF24
- if (millis()-last_time > 20000UL ) // aktualnie jest ustawione na co 20 sek
- {
- Serial.println(data);
- instrukcja = 66;
- last_time = millis();
- }
- if(instrukcja == 66)//wyslij dane
- {
- instrukcja = 0;
- radio.stopListening();
- odczytaj();
- radio.write( &data, 32*sizeof(char) );
- radio.startListening();
- }
- while(radio.available())
- {
- radio.read( &instrukcja, sizeof(unsigned int) );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement