mirror of
https://github.com/grillbaer/esp32-geiger-counter.git
synced 2025-12-21 13:23:15 +01:00
Initial import
This commit is contained in:
53
GeigerData.cpp
Normal file
53
GeigerData.cpp
Normal file
@@ -0,0 +1,53 @@
|
||||
#include "GeigerData.h"
|
||||
|
||||
GeigerData::GeigerData(uint16_t sampleCount, uint16_t sampleSeconds,
|
||||
float cpm_per_uSph) :
|
||||
sampleCount(sampleCount), sampleSeconds(sampleSeconds), cpm_per_uSph(
|
||||
cpm_per_uSph), pulsesPerSample(new uint16_t[sampleCount]) {
|
||||
currentSample = 0;
|
||||
for (int i = 0; i < sampleCount; i++) {
|
||||
pulsesPerSample[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
GeigerData::~GeigerData() {
|
||||
delete[] pulsesPerSample;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::next(uint16_t index) {
|
||||
return index + 1 < sampleCount ? index + 1 : 0;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::prev(uint16_t index) {
|
||||
return index > 0 ? index - 1 : sampleCount - 1;
|
||||
}
|
||||
|
||||
void GeigerData::addPulses(uint16_t pulses) {
|
||||
if (pulsesPerSample[currentSample] <= UINT16_MAX - pulses)
|
||||
pulsesPerSample[currentSample] += pulses;
|
||||
}
|
||||
|
||||
void GeigerData::nextSample() {
|
||||
currentSample = next(currentSample);
|
||||
pulsesPerSample[currentSample] = 0;
|
||||
}
|
||||
|
||||
uint16_t GeigerData::getCurrentSample() {
|
||||
return currentSample;
|
||||
}
|
||||
|
||||
uint32_t GeigerData::getPreviousPulses(uint16_t offset, uint16_t samples) {
|
||||
uint32_t pulses = 0;
|
||||
uint16_t index = (currentSample + sampleCount - offset) % sampleCount;
|
||||
for (uint16_t i = 0; i < samples; i++) {
|
||||
pulses += pulsesPerSample[index];
|
||||
index = prev(index);
|
||||
}
|
||||
|
||||
return pulses;
|
||||
}
|
||||
|
||||
float GeigerData::toMicroSievertPerHour(uint32_t pulses, uint16_t samples) {
|
||||
float cpm = pulses / (sampleSeconds / 60. * samples);
|
||||
return cpm / cpm_per_uSph;
|
||||
}
|
||||
Reference in New Issue
Block a user