Zitat von: NoLi am 28. Februar 2026, 21:16Hier kostet das GRAETZ GPD 150 G nur 0,01 € : https://www.herbach.de/gefahrgut/messgeraete/strahlenschutz/personendosimeter-gpd-150-g-nachfolgegeraet-zum-ed-150/20585Webshop-Programmierung: Level 1000 😀😀😀![]()
![]()
![]()
Norbert
,Zitat von: DG0MG am 20. März 2019, 20:02Und welches soll ich jetzt nehmen?
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
unsigned long counts; //variable for GM Tube events
unsigned long totalCounts; //Total counts since start
unsigned long previousMillis; //variable for measuring time
float averageCPM;
float sdCPM;
int currentCPM;
float calcCPM;
LiquidCrystal_I2C lcd(0x27, 20, 4);
float CPMArray[100];
#define LOG_PERIOD 60000 // count rate (in milliseconds)
void setup() { //setup
counts = 0;
totalCounts = 0;
currentCPM = 0;
averageCPM = 0;
sdCPM = 0;
calcCPM = 0;
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), impulse, FALLING); //define external interrupts
}
void loop() { //main cycle
lcd.setCursor(0,2);
lcd.print("CPM Count: ");
lcd.print(counts);
lcd.setCursor(0,3);
lcd.print("Total CPM Count: ");
lcd.print(totalCounts);
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > LOG_PERIOD) {
previousMillis = currentMillis;
CPMArray[currentCPM] = counts * 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("uSv/hr: ");
lcd.print(outputSieverts(CPMArray[currentCPM]));
counts = 0;
averageCPM = 0;
sdCPM = 0;
//calc avg and sd
for (int x=0;x<currentCPM+1;x++) {
averageCPM = averageCPM + CPMArray
[x];
}
averageCPM = averageCPM / (currentCPM + 1);
for (int x=0;x<currentCPM+1;x++) {
sdCPM = sdCPM + sq(CPMArray
[x]- averageCPM);
}
sdCPM = sqrt(sdCPM / currentCPM) / sqrt(currentCPM+1);
Serial.println("Avg: " + String(averageCPM) + " +/- " + String(sdCPM) + " ArrayVal: " + String(CPMArray[currentCPM]));
currentCPM = currentCPM + 1;
displayAverageCPM();
}
}
void impulse() {
counts++;
totalCounts++;
}
void displayAverageCPM() {
lcd.setCursor(0,1);
lcd.print("Avg: ");
lcd.print(outputSieverts(averageCPM));
lcd.print("+/-");
lcd.print(outputSieverts(sdCPM));
}
float outputSieverts(float x) {
float y = (x-60) * 0.001284; //fuer Vacutec 70031
return y;
}
Seite erstellt in 0.187 Sekunden mit 18 Abfragen.