Barometern snurrar fortfarande på bra här nu efter några dagar, och jag börjar få en tjusig graf i Live!.
- Skärmavbild 2020-02-02 kl. 16.33.24.JPG (79.03 KiB) Viewed 12257 times
Som det är nu uppdateras värdet typ var femte minut (ibland dock längre) vilket kanske är lite onödigt. Jag vet att det är "delay" som styr detta, men i koden för mitt lilla projekt finns det fem poster för "delay". Jag kan inte identifiera vad de olika "delay"-posterna gör, och jag funderar på ifall de inte krockar med varandra. Kanske skulle någon eller några av dem kunna tas bort? Så här ser koden ut, och jag har blåmarkerat "delay"-posterna.
#include "PCR800_TX.h" // Use local library
int PCR800_1_ID = 0x3F; // SensorID for sensor #1. 3F is ID. See table above.
PCR800_TX PCR800_TX(2); // Pin 7 on Arduino to radio transmitter data input pin. Change to suit your needs.
#include <Wire.h> // Här startar första tillägget av BMP280
#include <SPI.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // use I2C interface
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor(); // Här slutar första tillägget av BMP280
void setup(void)
{
// Serial.println(F("BMP280 Sensor event test")); // Här börjar andra tillägget av BMP280
if (!bmp.begin(0x76)) {
//Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
while (1)
delay(10);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
// bmp_temp->printSensorDetails(); // Här slutar andra tillägget av BMP280
Serial.begin(9600);
delay(300);
PCR800_TX.setChannel(9); // 1 to 15 is valid. Seems not to be implemented by Telldus
}
void loop(void)
{
sensors_event_t temp_event, pressure_event; // Här börjar tredje tillägget av BMP280
bmp_pressure->getEvent(&pressure_event);
delay(1000); // Här slutar tredje tillägget av BMP280
// Code for sensor # 1
PCR800_TX.setSensorID(PCR800_1_ID); // Sensor ID according to the table shown above. Use hex value. (0x3F). 3F is ID.
PCR800_TX.setConvRainrate (2.54); // This set the conversion factor for the Rain rate value. Divide input value by 2.54 will convert an input value of 1 in this code
// to 0.1 mm in Telldus Live!. A conversion factor that is a multiple of 254 will convert to a metric value.
// A conversion factor that is a multiple of 10 will convert to an imperial value. A conversion factor of 1
// will not convert the input value. Do NOT use a factor = 0.
PCR800_TX.setRainRate((pressure_event.pressure) * 10); //* 10 tillaggt för att få decimalen rätt
// Input value for rain rate. 1 = 0.1mm. Max value is 25397 (2539.7 mm) if the conversion factor is 2.54.
// A larger value will result in an imperial value of more than 9999 being transmitted.
// The value in Telldus Live! will roll over and start again at zero. It makes sense to check for setRainRate =< 25397.
// Because of rounding errors the conversion from mm to inches and back is not perfect.
// You can experience some minor errors of +/- 0.1 to +/- 0.2 for this value in Telldus Live!
PCR800_TX.setConvTotalrain (pressure_event.pressure); // This set the conversion factor for the Total rain value. Divide input value by 0.254 will convert an input value of 1 in this code
// to 0.1 mm in Telldus Live!. A conversion factor that is a multiple of 254 will convert to a metric value.
// A conversion factor that is a multiple of 10 will convert to an imperial value. A conversion factor of 1
// will not convert the input value. Do NOT use a factor = 0.
PCR800_TX.setTotalRain(253999); // Input value for total rain. 1 = 0.1mm. Max value is 253999 (25399.9 mm) if the conversion factor is 0.254.
// A larger value will result in an imperial value of more than 999999 being transmitted.
// The value in Telldus Live! will roll over and start agian at zero. It makes sense to check for setTotalRain =< 253999.
PCR800_TX.setBatteryStatus(true); // true = battery level OK, false = battery level low.
PCR800_TX.buildAndSendPacket(); // The compilation of the data packet sent over radio begins.
delay(1000); // Give receiving end some time before next transmission. 5000 = 5000ms = 5 sec.
// End code for sensor # 1
delay(10000); // Time to next transmission cycle. No need to flood the receiver, so increase value after testing.
// 10000 = 10000ms = 10 sec.
} // end loop
Jag har rensat bort en del kommentarer och serialPrint-poster för att koden ska vara lite enklare att överblicka. Jag har också lagt in kommentarer för där BMP280-sensorns kod är insatt i sändarens kod. Detta för att få lite hjälp när det är dags att ge mig på ljussensor-projektet.
Gällande det "felaktiga" tryckvärdet så tror jag inte att jag kommer göra något åt det. Jag befinner mig (enligt Google Earth) på 40-45 meters höjd över havet, och enligt SMHI sjunker trycket 1 hPa var åttonde meter. Om jag räknar rätt så borde min sensor då visa runt 5 hPa lägre än vad en kalibrerad sensor gör vid havsnivån. Med icke modifierad kod visar min barometer ca 2 hPa lägre, dvs 3 hPa för mycket, vilket jag tycker är försumbart. För mig är ju heller inte exakta värdet viktigt, utan variationen över tid och om då hela kurvan ligger några hPa lägre eller högre spelar ingen roll.
När jag fått min utbytes NANO ska jag försöka mig på att få igång ljussensorn också. Tänker att jag startar en ny tråd om det, och då kommer jag lägga in en länk här för de som är intresserade.
Efter det är det research av batteriförsörjning av dessa sensorer som gäller.