#include #include LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display. ACHTUNG: Adresse kann auch 0x3F sein !!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG pin 5 const int buzzerPin = 9; const int buttonPin = 10; const byte interruptPin = 2; volatile long pulse = 0; volatile long pulse_min = 0; long time_sec = 0; long time_min = 0; long time_min_old = 0; long time_hour = 0; long Anzeige_second = 0; long Anzeige_minute = 0; long Anzeige_hour = 0; long millis_reset = 0; int buttonState = 0; // =========================== // ======= SETUP ========= // =========================== void setup() { Serial.begin(9600); //pinMode(interruptPin, INPUT_PULLUP); pinMode(interruptPin, INPUT); attachInterrupt(digitalPinToInterrupt(interruptPin), Puls, FALLING); pinMode(buzzerPin, OUTPUT); pinMode(buttonPin, INPUT); lcd.begin(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Geigerzaehler"); lcd.setCursor(0,1); lcd.print("Version 1.0"); delay(3000); lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); } // =========================== // ======= LOOP ========= // =========================== void loop() { time_sec = (millis() - millis_reset) / 1000; time_min = ((millis() - millis_reset) / 60000); time_hour = ((millis() - millis_reset) / 3600000); Anzeige_second = time_sec - time_min * 60; Anzeige_minute = time_min - time_hour * 60; Anzeige_hour = time_hour; delay(100); Serial.print(Anzeige_hour); Serial.print(" "); Serial.print(Anzeige_minute); Serial.print(" "); Serial.print(Anzeige_second); Serial.print(" "); Serial.println(pulse); if (time_min > time_min_old) // "Minutensprung" { Serial.println(); Serial.print(pulse_min); Serial.println(); lcd.setCursor(8,1); lcd.print(pulse_min); lcd.print(" CPM "); pulse_min = 0; } lcd.setCursor(0,0); lcd.print(Anzeige_hour); lcd.print(" h "); lcd.print(Anzeige_minute); lcd.print(" min "); lcd.print(Anzeige_second); lcd.print(" sec "); lcd.setCursor(0,1); lcd.print(pulse); buttonState = digitalRead(buttonPin); if (buttonState == HIGH) // Reset-Knopf gedrückt { millis_reset = millis(); pulse = 0; pulse_min = 0; lcd.setCursor(0,1); lcd.print(pulse); lcd.print(" "); lcd.setCursor(8,1); lcd.print("-"); lcd.print(" CPM "); } time_min_old = time_min; // Werteübergabe } // ============================== // ======= INTERRUPT ========= // ============================== void Puls() { pulse = pulse + 1; pulse_min = pulse_min + 1; tone(buzzerPin,1000,2); // Ton an Butter }