#include <Adafruit_NeoPixel.h>
#define pinNeoPixel 7 // Zapojeni:
#define pinSwitch 6
#define P_TRIG 3
#define P_ECHO 2
float distance; // Promenne:
int count, rcount, pos;
bool state, red;
uint32_t color;
Adafruit_NeoPixel strip(8, pinNeoPixel, NEO_GRB + NEO_KHZ800); // Vytvoreni objektu pro LED pasky
void setup()
{
strip.begin(); // Inicializace LED pasku
strip.show();
Serial.begin(9600);
pinMode(pinSwitch, INPUT); // Nastaveni I/O pinu
pinMode(P_TRIG, OUTPUT);
pinMode(P_ECHO, INPUT);
}
void loop()
{
strip.clear();
if (digitalRead(pinSwitch) == false) { // Pokud switch neni zmacknuty (spojeny)
readDistance(); // Precti vzdalenost z hc-sr04
if (distance < 400 && distance > 300) { // Pokud je vzdalenost mensi nez 400cm a vetsi nez 300cm
count = map(distance, 300, 400, 8, 0); // count = pocet rozsvicenych LED diod, vypocitej z vzdalenosti
color = strip.Color(0, 255, 0); // zelena barva
int rcount = 0; // aktualni pocet rozsvicenych pixelu (led diod)
int pos = 8; // zacinajici pozice (1 pixel z leva)
while(rcount < count) { // Zobraz jednotlive pixely v poctu count zleva do prava
rcount++;
pos--;
strip.setPixelColor(pos, color);
}
} else if (distance > 30 && distance <= 300) { // Pokud je vzdalenost mensi nez 300cm a vetsi nez 30cm
count = map(distance, 30, 300, 8, 0); // count = pocet rozsvicenych LED diod, vypocitej z vzdalenosti
color = strip.Color(230, 40, 9); // oranzova barva
int rcount = 0; // aktualni pocet rozsvicenych pixelu (led diod)
int pos = 8; // zacinajici pozice (1 pixel z leva)
while(rcount < count) { // Zobraz jednotlive pixely v poctu count zleva do prava
rcount++;
pos--;
strip.setPixelColor(pos, color);
}
} else if (distance <= 30) { // Pokud je vzdalenost mensi nez 30cm
red = !red;
if(red) color = strip.Color(255, 0, 0); // Stridani cervene a cerne (zadne) barvy co 250ms, pokazde kdyz probehne tento kod
else color = strip.Color(0, 0, 0);
for (int i = 0; i <= 8; i++) { // Nastav stejnou barvu na vsech 8 diod
strip.setPixelColor(i, color);
}
delay(250);
}
}
strip.show(); // Zobraz na LED pasku
delay(25); // Mensi delay
}
void readDistance() { // Funkce na precteni vzdalenosti z ultrazvukoveho merice vzdalenosti
digitalWrite(P_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(P_TRIG, HIGH);
delayMicroseconds(5);
digitalWrite(P_TRIG, LOW);
int latency = pulseIn(P_ECHO, HIGH);
distance = latency / 58.31;
//Serial.print("Distance: ");
//Serial.print(distance);
//Serial.println(" cm.");
}