/*
Projeto 33 - Sensor de estacionamento (fita WS2812B com 30 LEDs)
Física na Lixa
https://fisicanalixa.blogspot.com/
https://sites.google.com/aelixa.pt/fisicaearduino
*/
#include <FastLED.h>
#define trigPin 10
#define echoPin 13
#define ledPin 7
#define buzzerPin 6
#define n 30 //Número de LEDs
float duracao;
float dist;
float max = 100; // Distância a partir da qual liga o primeiro LED (em cm)
float delta = 3; // Distância mínima em cm
int atraso;
CRGB leds[n];
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW);
FastLED.addLeds<WS2812, ledPin, GRB>(leds, n);
FastLED.show();
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duracao = pulseIn(echoPin, HIGH); // em microssegundos
dist = (duracao/2)*0.0343; // em cm
if(dist >= max)
{
dist = max;
}
Serial.println(dist);
if (dist < max) {leds[0] = CRGB(0, 200, 0);} // VERDE
else {leds[0] = CRGB(0, 0, 0);}
if (dist < max - delta) {leds[1] = CRGB(14, 200, 0);}
else {leds[1] = CRGB(0, 0, 0);}
if (dist < max - 2*delta) {leds[2] = CRGB(28, 200, 0);}
else {leds[2] = CRGB(0, 0, 0);}
if (dist < max - 3*delta) {leds[3] = CRGB(40, 200, 0);}
else {leds[3] = CRGB(0, 0, 0);}
if (dist < max - 4*delta) {leds[4] = CRGB(100, 200, 0);}
else {leds[4] = CRGB(0, 0, 0);}
if (dist < max - 5*delta) {leds[5] = CRGB(120, 200, 0);}
else {leds[5] = CRGB(0, 0, 0);}
if (dist < max - 6*delta) {leds[6] = CRGB(140, 200, 0);}
else {leds[6] = CRGB(0, 0, 0);}
if (dist < max - 7*delta) {leds[7] = CRGB(160, 200, 0);}
else {leds[7] = CRGB(0, 0, 0);}
if (dist < max - 8*delta) {leds[8] = CRGB(170, 200, 0);}
else {leds[8] = CRGB(0, 0, 0);}
if (dist < max - 9*delta) {leds[9] = CRGB(170, 200, 0);}
else {leds[9] = CRGB(0, 0, 0);}
if (dist < max - 10*delta) {leds[10] = CRGB(180, 200, 0);}
else {leds[10] = CRGB(0, 0, 0);}
if (dist < max - 11*delta) {leds[11] = CRGB(180, 200, 0);}
else {leds[11] = CRGB(0, 0, 0);}
if (dist < max - 12*delta) {leds[12] = CRGB(190, 200, 0);}
else {leds[12] = CRGB(0, 0, 0);}
if (dist < max - 13*delta) {leds[13] = CRGB(190, 200, 0);}
else {leds[13] = CRGB(0, 0, 0);}
if (dist < max - 14*delta) {leds[14] = CRGB(200, 200, 0);}
else {leds[14] = CRGB(0, 0, 0);}
if (dist < max - 15*delta) {leds[15] = CRGB(200, 160, 0);}
else {leds[15] = CRGB(0, 0, 0);}
if (dist < max - 16*delta) {leds[16] = CRGB(200, 140, 0);}
else {leds[16] = CRGB(0, 0, 0);}
if (dist < max - 17*delta) {leds[17] = CRGB(200, 120, 0);}
else {leds[17] = CRGB(0, 0, 0);}
if (dist < max - 18*delta) {leds[18] = CRGB(200, 100, 0);}
else {leds[18] = CRGB(0, 0, 0);}
if (dist < max - 19*delta) {leds[19] = CRGB(200, 80, 0);}
else {leds[19] = CRGB(0, 0, 0);}
if (dist < max - 20*delta) {leds[20] = CRGB(200, 60, 0);}
else {leds[20] = CRGB(0, 0, 0);}
if (dist < max - 21*delta) {leds[21] = CRGB(200, 40, 0);}
else {leds[21] = CRGB(0, 0, 0);}
if (dist < max - 22*delta) {leds[22] = CRGB(200, 30, 0);}
else {leds[22] = CRGB(0, 0, 0);}
if (dist < max - 23*delta) {leds[23] = CRGB(200, 20, 0);}
else {leds[23] = CRGB(0, 0, 0);}
if (dist < max - 24*delta) {leds[24] = CRGB(200, 20, 0);}
else {leds[24] = CRGB(0, 0, 0);}
if (dist < max - 25*delta) {leds[25] = CRGB(200, 10, 0);}
else {leds[25] = CRGB(0, 0, 0);}
if (dist < max - 26*delta) {leds[26] = CRGB(200, 10, 0);}
else {leds[26] = CRGB(0, 0, 0);}
if (dist < max - 27*delta) {leds[27] = CRGB(200, 0, 0);}
else {leds[27] = CRGB(0, 0, 0);}
if (dist < max - 28*delta) {leds[28] = CRGB(200, 0, 0);}
else {leds[28] = CRGB(0, 0, 0);}
if (dist < max - 29*delta) {leds[29] = CRGB(200, 0, 0);} // VERMELHO
else {leds[29] = CRGB(0, 0, 0);}
FastLED.show();
if(dist >= max)
{
digitalWrite(buzzerPin, LOW);
delay(20);
}
else
{
digitalWrite(buzzerPin, HIGH);
atraso = dist*10;
delay(20);
digitalWrite(buzzerPin, LOW);
delay(atraso);
}
}