Nrf24l01+ weather station

Townfine
Offline
Зарегистрирован: 28.08.2014
Здравствуйте, подскажите пожалуйста добрые люди.Есть код для передачи температуры,влажности,напряжения,давления через nrf24l01, так вот он работает отлично, но он мне присылает числа того вида "26" ,а мне надо "26,06" где мне надо подправить код чтобы оно заработало как мне нужно.Заранее спасибо.А вот и код передатчика: #include 
#include 
#include "RF24.h"
#include 
#include 
#include 
#include 
#include 
BMP085 dps = BMP085();
long Pressure = 0, Altitude = 0;
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//int battVolts;
int count;    //переменная для счётчика циклов
int h = 0; //влажность
int t = 0; //температура
int dp = 0; //точка росы
float v;
volatile boolean wdt_tripped = 1;
RF24 radio(9, 10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
#include "DHT.h"
DHT dht;
//создаём структуру для передачи 4х значений
typedef struct {
  int  W;
  int X;
  int Y;
  int Z;
}
B_t;
B_t duino2;
//режим сна для МК
void system_sleep() {
  delay(2);                            // Wait for serial traffic
  _SFR_BYTE(ADCSRA) &= ~_BV(ADEN);     // Switch ADC off
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_enable();
  sleep_mode();                        // System sleeps here
  sleep_disable();
  _SFR_BYTE(ADCSRA) |= _BV(ADEN);      // Switch ADC on
}
void wdt_interrupt_mode() {
  wdt_reset();
  WDTCSR |= _BV(WDIE); // Restore WDT interrupt mode
}
ISR(WDT_vect) {
  wdt_tripped = 1; // set global volatile variable
}
void setup()
{
  sensors.begin();                                                                              
  analogReference(INTERNAL);
  pinMode(5, OUTPUT); //Пин на который подключено питание DHT22
  digitalWrite(5, HIGH);
  dht.setup(2); //Инициализируем датчик DHT
  Wire.begin();
  Serial.begin(9600);
  dps.init();
  dps.getAltitude(&Altitude);
  dps.init(MODE_STANDARD, Altitude, true);
  wdt_disable();
  wdt_reset();
  wdt_enable(WDTO_8S);   //пробуждение каждые 8 сек
  count = 0;
  radio.begin();
  radio.setRetries(15, 15); // Кол-во попыток и время между попытками
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1, pipes[1]);
   
}
 
void loop(void)
{
  //тут можно увеличить интервал времени между отправками данных по RF24 за счёт счётчика циклов
  Serial.println("Wakeup duino");
  wdt_interrupt_mode();
  if (wdt_tripped) {
    count++;
    wdt_tripped = 0;
    Serial.print("Run mine module #");
    Serial.println(count);
    if (count == 2) { // каждые 8 сек * 9 циклов = 72 секунды делаем измерения и отправляем на базу:
      Serial.println("Reding sensor DHT");
      float vbat= (analogRead(A1) * 1.1) / 1024;
      float v = vbat /( 178.0 / (736.0 + 177.0));
      dps.getPressure(&Pressure);
      sensors.requestTemperatures();
      delay(dht.getMinimumSamplingPeriod());
      h = int(floor(dht.getHumidity())); //Влажность
      t = int(floor(sensors.getTempCByIndex(0))); //Температура
      dp = int(floor(Pressure/133.3)); //Точка росы
      //записываем в структуру данные для передачи
      if (isnan(t) || isnan(h)) {
        duino2.W = 0;  // этот номер передатчика для идентификации в принятом пакете данных
        duino2.X = 0;
        duino2.Y = 0;
        duino2.Z = 0;
      }
      else {
        duino2.W = v;  // передаем напряжение
        duino2.X = t;  // передаём температуру
        duino2.Y = h;   // передаем влажность
        duino2.Z = dp;   // передаем давление
      }
      Serial.print("Battery voltage= ");
      Serial.println(v);
      Serial.print("Temperature = ");
      Serial.println(duino2.X);
      Serial.print("Humidity =");
      Serial.println(duino2.Y);
      Serial.print("pressure = ");
      Serial.println(duino2.Z);
      radio.powerUp();  //подаём питание на NRF24
      radio.stopListening(); // отключаем режим приёма
      Serial.println("Start send");
      bool ok = radio.write( &duino2, sizeof(duino2) ); //отправляем данные по RF24
      Serial.println("End send");
      delay(20);
      count = 0;
      radio.powerDown(); //отключаем питание RF24 штатно
    }
  }
  system_sleep();   //МК засыпает
}
JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012
int h = 0; //влажность
int t = 0; //температура
int dp = 0; //точка росы
 
здесь.
 
И посмотрите как код вставлять.
Araris
Offline
Зарегистрирован: 09.11.2012

h = int(floor(dht.getHumidity())); //Влажность
t = int(floor(sensors.getTempCByIndex(0))); //Температура
dp = int(floor(Pressure/133.3)); //Точка росы

И здесь.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

До туда мне уже было лень читать :)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мне понравилось.

system_sleep(); //МК засыпает

И храпит.

Townfine
Offline
Зарегистрирован: 28.08.2014
Townfine
Offline
Зарегистрирован: 28.08.2014
Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Townfine пишет:

Код взят  отсюда:http://arduino.ru/forum/programmirovanie/arduino-due-nrf24l01 


И чё?