Problem z przesyłem danych z czujnika HCHO NRF24l01 - raviso - 27-09-2021
Cześć wszystkim.
Stworzyłem projekt, który składa się z 4 czujników.
sht31- (temperatura i wilgotność)
sps30 - (pomiar PM)
HCHOSensor v 1.0 DFRobot (czujnik formaldehydu)
MiCS 5524 (czujnik lotnych związków organicznych)
Udało mi się je wszystkie połączyć i otrzymywałem prawidłowe wyniki. Problem zaczął się , gdy otrzymane dane chciałem wysyałać zdalnie za pomocą modułu NRF24l01. Udało mi si to połowicznie, ponieważ czujnik sps30 jak i sht31 wysyłały prawidłowe dane. Największy kłopot mam z czujnikiem od formaldehydu (DFRobot). Wszystko działa poprawnie do czasu kiedy nie wprowadzę kodu do obsługi owego czujnika. Zauważyłem, że jakby problem tkwi w komendzie "if(hchoSensor.available()>0) {". Gdy jej nie ma, wysyłam i odbieram prawidłowo dane z pozostałych czujników, lecz gdy dodam tą komendę to w monitorze portu szeregowego nie widać danych lub pojawi się tylko jedna linijka. Czy ktoś mógłby mnie naprowadzić na jakiś trop co źle robię? Będę bardzo wdzięczny
Pozdrawiam
Kod: #include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(5, 6); // CE, CSN
const byte address[6] = "00001";
#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"
#include <sps30.h>
#include <DFRobotHCHOSensor.h>
#include <SoftwareSerial.h>
#define SensorSerialPin 10
SoftwareSerial sensorSerial(SensorSerialPin,SensorSerialPin);
DFRobotHCHOSensor hchoSensor(&sensorSerial);
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
//HCHO
sensorSerial.begin(9600); //the baudrate of HCHO is 9600
sensorSerial.listen();
Serial.begin(9600);
//czujnik temperatury i wilgotności
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("SHT31 test");
if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("Couldn't find SHT31");
while (1) delay(1);
}
Serial.print("Heater Enabled State: ");
if (sht31.isHeaterEnabled())
Serial.println("ENABLED");
else
Serial.println("DISABLED");
//sps30
int sps30;
#ifndef PLOTTER_FORMAT
Serial.print("SPS sensor probing successful\n");
#endif /* PLOTTER_FORMAT */
s16 ret;
ret = sps30_start_measurement();
if (ret < 0) {
Serial.print("error starting measurement\n");
}
#ifndef PLOTTER_FORMAT
Serial.print("measurements started\n");
#endif /* PLOTTER_FORMAT */
delay(1000);
//radio
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
if(hchoSensor.available()>0)
{
//sps30
struct sps30_measurement m;
char serial[SPS_MAX_SERIAL_LEN];
u16 data_ready;
s16 ret;
do {
ret = sps30_read_data_ready(&data_ready);
if (ret < 0) {
Serial.print("error reading data-ready flag: ");
Serial.println(ret);
} else if (!data_ready)
Serial.print("data not ready, no new measurement available\n");
else
break;
delay(100000); /* retry in 100ms */
} while (1);
ret = sps30_read_measurement(&m);
if (ret < 0)
Serial.print("error reading measurement\n");
else {
float t = sht31.readTemperature();
int pm1 = sps30_read_measurement(&m);
float h = sht31.readHumidity();
float hcho = hchoSensor.uartReadPPM();
Serial.print(t);
Serial.print(",");
Serial.print(h);
Serial.print(",");
Serial.print(m.mc_1p0);//PM 1.0
Serial.print(",");
Serial.print(m.mc_2p5);//PM 2.5
Serial.print(",");
Serial.print(m.mc_4p0);//PM4.0
Serial.print(",");
Serial.print(m.mc_10p0);//PM 10.0
Serial.print(",");
Serial.print(m.nc_0p5);//NC 0.5
Serial.print(",");
Serial.print(m.nc_1p0);//NC 1.0
Serial.print(",");
Serial.print(m.nc_2p5);//NC 4.0
Serial.print(",");
Serial.print(m.nc_4p0);//NC 4.0
Serial.print(",");
Serial.print(m.nc_10p0);//NC 10.0
Serial.print(",");
Serial.print(m.typical_particle_size);// typowe wielkości cząsteczek
Serial.print(",");
Serial.print(hcho);
Serial.println();
delay(1000);
radio.write(&t, sizeof(t));
radio.write(&h, sizeof(h));
radio.write(&m, sizeof(m));
radio.write(&hcho, sizeof(hcho));
}
}
}
RE: Problem z przesyłem danych z czujnika HCHO NRF24l01 - kaczakat - 27-09-2021
Pin 10 jest typowo używany w SPI, czyli raczej zostaw go dla RF24, a użyj innego pinu do softserial dla czujnika. Poza tym jak masz tak rozbudowany projekt to użyj płytki, która ma więcej sprzętowych seriali i nie używaj softowych, to zawsze będzie rodzić jakieś komplikacje.
Pisanie programów z delay jako jedyna metoda zarządzania czasem to kiepski pomysł, rozbuduj swoje umiejętności.
RE: Problem z przesyłem danych z czujnika HCHO NRF24l01 - Old Fony - 30-09-2021
zobacz tutaj
https://www.arduino.cc/en/Tutorial/BuiltInExamples/BlinkWithoutDelay
|