#include <Adafruit_NeoPixel.h>
#include <HCSR04.h>
#define PIN_LED 6
#define PIN_BUZZER 3
#define NUMPIXELS 29
#define MAX_DIST_CM 40
#define MIN_DIST_CM 3
Adafruit_NeoPixel pixels(NUMPIXELS, PIN_LED, NEO_GRB + NEO_KHZ800);
UltraSonicDistanceSensor distanceSensor(9, 10);
void setup() {
pixels.begin();
pinMode(PIN_BUZZER, OUTPUT);
pixels.show();
}
void loop() {
float distance = distanceSensor.measureDistanceCm();
// Ha nincs mérés vagy túl messze van
if (distance <= 0 || distance > MAX_DIST_CM) {
pixels.clear();
pixels.show();
noTone(PIN_BUZZER); // Kikapcsoljuk a hangot
delay(50);
return;
}
// 1. Hány LED világítson?
int numLedsToLight = map(distance, MIN_DIST_CM, MAX_DIST_CM, NUMPIXELS, 0);
numLedsToLight = constrain(numLedsToLight, 0, NUMPIXELS);
// 2. Szín (Közel = Piros, Távol = Zöld)
int red = map(distance, MIN_DIST_CM, MAX_DIST_CM, 255, 0);
int green = map(distance, MIN_DIST_CM, MAX_DIST_CM, 0, 255);
// 3. Hangmagasság (Frekvencia) - Élesebb hang közelítéskor
// 1500 Hz (nagyon éles) -> 150 Hz (mély mormogás)
int pitch = map(distance, MIN_DIST_CM, MAX_DIST_CM, 1500, 150);
pitch = constrain(pitch, 150, 1500);
// LED-ek frissítése
pixels.clear();
for (int i = 0; i < numLedsToLight; i++) {
pixels.setPixelColor(i, pixels.Color(red, green, 0));
}
pixels.show();
// Hang megszólaltatása
tone(PIN_BUZZER, pitch);
delay(50); // Kell egy kis idő a szenzornak és a szemnek is
}