D0 - przycisk config
D1 - przekaźnik
D2 - dodatkowy ds18b20
D3 - SDA
D4 - SCL
D5 - SCK
D6 - MISO
D7 - MOSI
D8 - CSN
Rx - CE
Kod zamieszczam w załączniku, nie wysyłam bin-a z racji tego, że wszystkie modyfikacje włącza się po przez #define w odpowiednich plikach. Starałem się to pisać w miarę czytelnie, mam nadzieję ,że sobie to ogarniesz. Dodatkowo potrzeba bibliotekę do oled-a z dodatkowymi czcionkami, również dodałem do archiwum.
Mam mały problem z NRF-em. Otóż po około dniu pracy przestaje wysyłać temperaturę, pomaga reset nadajnika. Może ma ktoś pomysł dlaczego?
Kod nadajnika:
Kod: Zaznacz cały
/*
* Konfiguracja linii dołączonych do modułu nRF24L01:
*
* MISO: 12
* MOSI: 11
* SCK: 13
* CE: 8
* CSN: 7
*
* Konfiguracja linii LED:
* Katoda: GND
* Anoda: 10 przez R = 1kOhm
*
*Linia czujnika DS18B20: 2 UWAGA - linia 1-Wire musi być podciągnięta do zasilania rezystorem o wartości 4,7k
*/
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempr = 0; // Zmienna typu float
int counter = 0;
void setup()
{
Serial.begin(9600);
pinMode(10, OUTPUT); // linia 10 jako wyjście dla LED
digitalWrite(10, LOW); // dioda nie świeci
sensors.begin(); // Inicjalizacja czujnika
Mirf.spi = &MirfHardwareSpi; // konfiguracja SPI do użycia z biblioteką MIRF
Mirf.init(); // Inicjalizacja MIRF
Mirf.setRADDR((byte *)"67890"); // Ustawienie adresu do odbioru
Mirf.setTADDR((byte *)"12345"); // ustawienie adresu do nadawania
Mirf.payload = sizeof(float); // Maksymalny przesył przez moduły radiowe ustawiony na wielkośc zmiennej FLOAT (4 bajty)
Mirf.config(); // Konfiguracja biblioteki MIRF
Serial.println("Setup");
}
void loop()
{
if (counter == 50) {
digitalWrite(10, HIGH);
sensors.requestTemperatures(); // Żądanie pomiaru temperatury za pomocą czujnika DS18B20 (czas wykonania < 1s)
tempr = sensors.getTempCByIndex(0); // Przypisanie wyniku pomiaru do zmiennej FLOAT
Mirf.send((byte *)&tempr); // Nadanie zmiennej przez moduł nRF24L01
while(Mirf.isSending()){ // Zapętlenie programu do czasu zakończenia wysyłania danych
}
digitalWrite(10, LOW);
counter = 0; // Wyzerowanie licznika
Serial.println(tempr);
}
delay(100); // Opóźnienie powtórnego wykonania pętli
counter++;
}