#include <LiquidCrystal.h> // Biblioteka wyświetlacza LCD
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // Definiowanie pinów wyświetlacza LCD
const int sensorPin = 6; // Definiowanie pinu czujnika szczelinowego
// Zmienne
unsigned int obstacleCount = 0; // Licznik przecięć czujnika
unsigned long startTime = 0; // Czas początkowy
float frequency = 0.0; // Zmienna częstotliwości
float period = 0.0; // Zmienna okresu
void setup() {
pinMode(sensorPin, INPUT);
lcd.begin(16, 2);
Serial.begin(9600);
startTime = millis(); // Zapisanie czasu początkowego
}
void loop() {
int sensorState = digitalRead(sensorPin); // Sprawdzanie stanu czujnika szczelinowego
if (sensorState == HIGH) {
obstacleCount++; // Zarejestrowanie przecięcia czujnika i dodanie go
delay(30); // Opóźnienie odczytu czujnika, aby uniknąć wielokrotnego zliczania jednego przecięcia (w milisekundach - 0,03 sekundy)
}
if (millis() - startTime >= 5000) { // Sprawdzenie czy minęło 5 sekund
frequency = obstacleCount / 10.0; // Obliczenie częstotliwości poprzez podzielenie ilości przecięć czujnika przez 10 (pomiar trwa 5 sekund, ale czujnik przecinany jest podwójnie)
period = 1 / frequency; // Obliczenie okresu (T=1/f)
lcd.clear(); // Wyczyszczenie wyświetlacza
lcd.setCursor(0, 0); // Ustawienie kursora na początku pierwszego wiersza
lcd.print("f: "); // Wyświetlenie tekstu
lcd.print(frequency); // Wyświetlenie wartości
lcd.print(" Hz"); // Wyświetlenie tekstu
lcd.setCursor(0, 1); // Ustawienie kursora na początku drugiego wiersza
lcd.print("Okres: "); // Wyświetlenie tekstu
lcd.print(period); // Wyświetlenie wartości
lcd.print(" s"); // Wyświetlenie tekstu
// Resetowanie licznika i czasu początkowego dla kolejnego pomiaru
obstacleCount = 0;
startTime = millis();
}
}