Создание радиоканала между двумя ардуинками
- Войдите на сайт для отправки комментариев
Здравствуйте! Ардуино пробую первый раз и сейчас пытаюсь сделать один проект. Одна плата нано передает информацию с двух датчиков 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 секунд или отсчет времени происходит с помощью отдельного оператора. Скетч приемника при этом менять же никак не надо получается, ведь он не будет выводить данные до тех пор, пока передатчик не отправит пакет с информацией?