Hola
He seguido un proyecto para arduino pro micro que consiste, en que con el sensor ultrasónico HC-SR04 se apaguen una serie de leds (15 exactamente)y/o se enciendan en función de la distancia del automóvil al sensor y ha salido bien; El problema es que cuando no hay ningún auto y/o el carro ya está aparcado, los leds se quedan encendidos, lo que reduce el tiempo de vida de estos.
Me gustaría que cuando no haya ningún objeto en una distancia "x" frente al sensor, los leds se queden apagados hasta que el sensor detecte algo dentro del rango programado y los encienda, pero los apague cuando el sensor se encuentre a una distancia mínima del auto después de un tiempo.
El código es este:
/*
* Garage Parking Sensor - Published By Bob Torrence
*/
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats;
#define LED_PIN 10
#define NUM_LEDS 15
const int trigPin = 13;
const int echoPin = 12;
//Variables utilizadas
CRGB leds[NUM_LEDS];
float duration;
float durationarray[15];
int distance;
int stopdistance=5;
int startdistance=80;
int increment=((startdistance-stopdistance)/15);
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
Serial.begin(9600);
}
void loop() {
for (int i=0;i<=14;i++){
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
durationarray[i] = pulseIn(echoPin, HIGH);
distance= durationarray[i]*0.034/2;
Serial.print(distance);
Serial.print(" ");
}
duration = (stats.median(durationarray,15));
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
if (distance<stopdistance){ //Distancia mínima ó final entre el carro y el sensor
for (int i = 0; i <= 14; i++)
leds[i] = CRGB ( 255, 0, 0); //leds en rojo indicando que ya no se debe avanzar más
FastLED.show();
}
}
else
if (distance<stopdistance+increment){
for (int i = 1; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 0; i++) {
leds[i] = CRGB ( 255, 255, 0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*2){
for (int i = 2; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 1; i++) {
leds[i] = CRGB ( 255, 255, 0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*3){
for (int i = 3; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 2; i++) {
leds[i] = CRGB ( 255, 255, 0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*4){
for (int i = 4; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 3; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*5){
for (int i = 5; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 4; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*6){
for (int i = 6; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 5; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*7){
for (int i = 7; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 6; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*8){
for (int i = 8; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 7; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*9){
for (int i = 9; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 8; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*10){
for (int i = 10; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 9; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*11){
for (int i = 11; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 10; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*12){
for (int i = 12; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 11; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*13){
for (int i = 13; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 12; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance<stopdistance+increment*14){
for (int i = 14; i <= 14; i++) {
leds[i] = CRGB ( 0, 0, 0);
}
for (int i = 0; i <= 13; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
else
if (distance>=stopdistance+increment*14){
for (int i = 0; i <= 14; i++) {
leds[i] = CRGB ( 0, 255,0);
}
FastLED.show();
delay(50);
}
}