Создание радиоканала между двумя ардуинками
- Войдите на сайт для отправки комментариев
Здравствуйте! Ардуино пробую первый раз и сейчас пытаюсь сделать один проект. Одна плата нано передает информацию с двух датчиков BME280 и GY-30 по радиоканалу NRF24L01 на другую плату нано. Два скетча работают практически как надо и происходит передача данных в реальном времени от датчика BME280, но от датчика GY-30 передается лишь значение, полученное при подаче питания на схему. Я проверил, чтобы датчик начинал работать в режиме реального времени, надо дать датчику "передохнуть" чтоли с помощью delay(100), но тогда нарушается работа радиоканала и происходит передача 1-2 пакетов с информацией, не более. Может ли кто-нибудь помочь с данной проблемой? (Я пытался дать задержку и на приемнике, но тогда окончательно все перестает работать)
Скетч передатчика:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <BH1750.h>
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
BH1750 lightMeter;
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
unsigned long delayTime;
RF24 radio(9, 10);
void setup(){
radio.begin();
radio.setChannel(100);
radio.setDataRate (RF24_1MBPS);
radio.setPALevel (RF24_PA_HIGH);
radio.openWritingPipe (0x1234567890LL);
Serial.begin(9600);
Wire.begin();
lightMeter.begin();
Serial.println(F("BH1750 Test begin"));
Serial.println(F("BME280 test"));
bool status;
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.println("-- Default Test --");
delayTime = 1000;
Serial.println();
delay(delayTime);
}
void loop(){
float lux = lightMeter.readLightLevel();
float data[4]= {0, 0, 0, 0};
data[0] = lux;
data[1] = bme.readTemperature();
data[2] = (bme.readPressure() / 100.0F);
data[3] = bme.readHumidity();
radio.write(&data, sizeof(data));
}
// Скетч приемника:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10);
void setup(){
radio.begin();
radio.setChannel(100);
radio.setDataRate (RF24_1MBPS);
radio.setPALevel (RF24_PA_HIGH);
radio.openReadingPipe (1, 0x1234567890LL);
radio.startListening ();
Serial.begin(9600);
}
void loop(){
float data[4]={0, 0, 0, 0};
if (radio.available())
{
radio.read(&data, sizeof(data));
Serial.print("Light = ");
Serial.print(data[0]);
Serial.println(" lx");
Serial.print("Temperature = ");
Serial.print(data[1]);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(data[2]);
Serial.println(" hPa");
Serial.print("Humidity = ");
Serial.print(data[3]);
Serial.println(" %");
Serial.println(" ");
}
}
thefaded, на будущее, код пожалуйста вставляйте, как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
thefaded - странно, что у вас только один датчик зависает, должно бы виснуть все!
Вы же передаете данные в непрерывном режиме, наверно десятки и даже сотни раз в секунду. Вы думаете температура или давление так часто меняются? :)
Сделайте отсчет времени и передавайте данные, скажем. раз в минуту. А еще лучше - запоминайте последний переданный пакет и передавайте новый. только когда что-нибудь изменилось.
Открой для себя JDY-40. NRF для тебя еще рано.
thefaded - странно, что у вас только один датчик зависает, должно бы виснуть все!
Вы же передаете данные в непрерывном режиме, наверно десятки и даже сотни раз в секунду. Вы думаете температура или давление так часто меняются? :)
Сделайте отсчет времени и передавайте данные, скажем. раз в минуту. А еще лучше - запоминайте последний переданный пакет и передавайте новый. только когда что-нибудь изменилось.
Я в программировании полный ноль, просто необходимо такую вещь сделать. Нужно просто перед считыванием данных поставить задержку в 30-60 секунд или отсчет времени происходит с помощью отдельного оператора. Скетч приемника при этом менять же никак не надо получается, ведь он не будет выводить данные до тех пор, пока передатчик не отправит пакет с информацией?