Arduino Forum

International => Español => Software => Topic started by: Marcus9812 on Jun 29, 2019, 06:02 am

Title: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jun 29, 2019, 06:02 am
Hola :smiley-mr-green:
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:
Code: [Select]

/*
* 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);
}
}
 
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jun 29, 2019, 07:09 pm
Primero he simplificado tu código y ahora cuando lo pruebes me dices si funciona igual, al final veras el cambio que permitirá apagar tus leds, pero no lo hice asi que agregalo tu.

Code: [Select]
#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);

byte colores[15][3] = { {255,   0,  0},
                        {255, 255,  0},
                        {255, 255,  0},
                        {255, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},
                        {  0, 255,  0},                       
                        {  0, 255,  0}};

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 (distancia <= startdistance) {
   for (byte step=0; step <=15; step++) {
      if (distance<stopdistance+increment*step){
          if (step > 0) {
              for (int i = step; i <= step-1; i++) {
                  leds[i] = CRGB ( 0, 0, 0);
              }
          }
          for (int i = 0; i <= 0; i++) {
              leds[i] = CRGB (colores[step][0], colores[step][1], colores[step][2]);
          }
          FastLED.show();
          delay(50);
      } 
  }
 } else {
     // aca coloca lo que quieras que hagan para apagarlos
 }
}
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jun 29, 2019, 07:13 pm
Olvidé decirte que hay un hilo en el comienzo de la sección que da las razones por las cuales no debes postear en esta sección pero no lo has leído.
Muevo el hilo a Software y presta mas atención a las indicaciones de cada Sección.
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: _jose_ on Jun 29, 2019, 08:31 pm
No seria mas facil coger la alimentacion de la toma regulada por la llave de contacto para que solo funcione con la llave puesta?
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jun 30, 2019, 07:51 pm
Ok, primero una disculpa por no haber colocado el post en la seccion adecuada
No seria mas facil coger la alimentacion de la toma regulada por la llave de contacto para que solo funcione con la llave puesta?
Creo que no me he explicado bien, una disculpa lo que intento hacer es algo como esto:
Asistente de Ap (https://youtu.be/J4zKOJkv8Cg)
Pero apagando los leds cuando no se utilizan al no tener nada en frente o cuando el auto ha llegado al final.
En cuanto al código que ha puesto Surbyte
Voy a probarlo ya mismo :D
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 02, 2019, 01:38 am
He probado el código, pero ahora solo enciende un led y este lo hace de manera aleatoria y sin ningun motivo.
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 02, 2019, 02:05 am
Se deslizó un error, a ver ahora


Code: [Select]
if (distancia <= startdistance) {
    for (byte step=0; step <=15; step++) {
        if (distance < stopdistance + increment*step){
            if (step > 0) {
                for (int i = step; i <= 14; i++) {
                    leds[i] = CRGB ( 0, 0, 0);
                }
            }
            for (int i = 0; i <= step-1; i++) {
                leds[i] = CRGB (colores[step][0], colores[step][1], colores[step][2]);
            }
            FastLED.show();
            delay(50);
        }
    }
 } else {
     // aca coloca lo que quieras que hagan para apagarlos
 }


Solo esta parte, debe ser reemplazada
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 02, 2019, 05:32 pm
Gracias, el código ha funcionado y he logrado apagar el verde después de un tiempo, pero ahora no consigo apagar el color rojo después de un tiempo
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 03, 2019, 01:37 am
Yo te puse donde apagas los Leds

Code: [Select]
// aca coloca lo que quieras que hagan para apagarlos

Que es lo que no puedes lograr?

Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 04, 2019, 05:57 am
Lo que no he conseguido es que cuando los leds esten en el rojo 255, 0, 0, pasen 20 segundos y posteriormente se apaguen
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 04, 2019, 07:10 pm
Y debes usar millis() para lograr algo fluido que funcione.

Deberias usar la otra forma que directamente maneja los colores y no esta CRGB (R, G, B)

es mas cómoda creo.

Si cuando se pone en ROJO tu tomas el tiempo x ejemplo
Code: [Select]
start = millis();
luego solo debes hacer esto al momento de chequear cuando apagarlos

Code: [Select]
if (millis() - start >20000UL) {
  // Apagar los leds
}


start debe ser definida como unsigned long

ve a documentacion y lee en el Indice de temas tutoriales como usar millis()
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 06, 2019, 12:23 am
Ok, parece que funcionó con millis(); Pero me he dado cuenta que los leds prenden de uno en uno y ahora cuando llega a la distancia mínima, no se muestra el color rojo, se muestra el amarillo y luego el verde, esto ocurre con y sin millis() en el código
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 06, 2019, 04:26 am
Bueno verifica los colores. Ya tienes como trabajar, ahora hay que observar como funciona. Si no terminas de entender algo, hazlo mas lento para que quede claro.
Agrega Serial.print("Etiqutas") que te digan que estas haciendo.
Asi se resuelven las cosas.
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 06, 2019, 05:02 pm
Ya he arreglado lo de los colores, pero aún no entiendo por que empiezan a prender de uno en uno hasta llegar a el led 15 y despues se reinician y empiezan nuevamente de uno en uno, a pesar de que la distancia sea fija.
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 07, 2019, 12:50 am
Porque eso hacía tu código!!
O como crees que funciona FlashLed? Envía ordenes a cada led ubicado por su ID.
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 11, 2019, 08:54 pm
He regresado al código original y le he añadido cosas del código nuevo y todo funciona perfectamente, ha excepción del color rojo que siguen sin apagarse
Code: [Select]

#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats;
#define LED_PIN     10
#define NUM_LEDS    15
const int trigPin = 7;
const int echoPin = 6;
//Variables utilizadas
CRGB leds[NUM_LEDS];
float duration;
float durationarray[15];
int distance;
int stopdistance=5;
int startdistance=80;
int increment=((startdistance-stopdistance)/15);

long previousMillis = 0;     
long intervalOn = 25000; // 25 segundos  ON

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);
    unsigned long currentMillis = millis();

if (distance <= startdistance) {
     
  if (distance<stopdistance){
     if(currentMillis - previousMillis < intervalOn) {
      previousMillis = currentMillis;   
      for (int i = 0; i <= 14; i++) {
       leds[i] = CRGB ( 255, 0, 0);     //leds en rojo
        FastLED.show(); 
      }
     }
      else{ 
        for (int i = 0; i <= 14; i++) {
         leds[i] = CRGB ( 0, 0, 0);     //leds en off
          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);
}
}
}

Por algun fallo mío, que aún no detecto no se apagan en esta parte:
Code: [Select]
if (distance<stopdistance){
     if(currentMillis - previousMillis < intervalOn) {
      previousMillis = currentMillis;   
      for (int i = 0; i <= 14; i++) {
       leds[i] = CRGB ( 255, 0, 0);     //leds en rojo
        FastLED.show(); 
      }
     }
      else{ 
        for (int i = 0; i <= 14; i++) {
         leds[i] = CRGB ( 0, 0, 0);     //leds en off
          FastLED.show();
    }
     }
  }
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 17, 2019, 03:14 am
Hola de nuevo (Aunque creo que ya nadie lee esto jaja); Ya he solucionado el error que tenía y ha quedado de la siguiente manera:
Code: [Select]
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats;
#define LED_PIN     10
#define NUM_LEDS    15
const int trigPin = 7;
const int echoPin = 6;
//Variables utilizadas
CRGB leds[NUM_LEDS];
float duration;
float durationarray[15];
int distance;
int stopdistance=5;
int startdistance=80;
int increment=((startdistance-stopdistance)/15);

unsigned long tiempoinicio = millis ();
unsigned long intervalo = 10000; //Leds rojos a 10 segundos

extern volatile unsigned long timer0_millis;
unsigned long new_value = 0;


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 <= startdistance) {
  if (distance<stopdistance){
    if (millis () - tiempoinicio <= intervalo){
       for (int i = 0; i <= 14; i++) {
        leds[i] = CRGB::Red; }    //leds en rojo
         FastLED.show();
  }
  else{
 for(int i = 0;i<=14;i++){ //Los leds estan apagados si no hay nada frente al sensor
  leds[i] = CRGB::Black;
  }
  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);
}
}
else{
 for(int i = 0;i<=14;i++){ //Los leds estan apagados si no hay nada frente al sensor
  leds[i] = CRGB::Black;
  }
  FastLED.show();
}
}
void setMillis(unsigned long new_millis){
  uint8_t oldSREG = SREG;
  cli();
  timer0_millis = new_millis;
  SREG = oldSREG;
}

Ahora, el único problema es que el timer con millis solo se ejecuta una sola vez, al llegar al color rojo  y no lo vuelve a hacer nunca, a menos de que reinicie la placa. He estado investigando que existe una forma de reiniciar millis(), pero es usando una función llamada jump, de la cual no entiendo nada :P
(Aún así dejo el código por si alguien le interesa) :smiley-mr-green:

En esta parte millis() se debería ejecutar desde 0 al cumplirse el condicional:
Code: [Select]
if (distance<stopdistance){
    if (millis () - tiempoinicio <= intervalo){
       for (int i = 0; i <= 14; i++) {
        leds[i] = CRGB::Red; }    //leds en rojo
         FastLED.show();
  }
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 17, 2019, 03:40 am
Si se lee cuando se puede porque existe una vida y obligaciones, asi que debes se paciente. Si no respondo yo alguien lo hara.
Millis no se reinicia. Olvida jump porque te dara mas problemas que soluciones.
Si no entendiste millis ve a documentaciin y releelo.

Veo que has vuelto a tu codigo y que usas un setmillis que no creo haga falta. Yo estoy de viaje y mas no puedo opinar oor ahora
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 17, 2019, 07:08 pm
Disculpa por ser impaciente, en cuanto al set millis fue un error mío, ya que se me olvido borrarlo :smiley-mr-green:, ya que andaba haciendo algunas pruebas con él.
El millis funciona bien solo que nadamas se ejecuta una vez, pero seguiré estudiando
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Jul 22, 2019, 02:59 am
Ya he solucionado lo del reset/conteo agregando
Code: [Select]
tiempoinicio=millis ();
a esta parte
Code: [Select]
else{
 for(int i = 0;i<=14;i++){ //Los leds están apagados si no hay nada frente al sensor
  leds[i] = CRGB::Black;
  }
  FastLED.show();
   tiempoinicio=millis ();//Reset de millis
}

El unico inconveniente es que solo se reinicia el conteo, si no hay nada frente al sensor
Aunque es provisional, ya que me gustaría que se reiniciará el conteo, una vez iniciado el color verde, pero se hace lo que se puede  :D
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: surbyte on Jul 23, 2019, 03:02 am
Y cual es el código completo que estas usando y señala donde quieres que se reincie!!
Title: Re: Asistente de aparcamiento con Leds Ws2812 y HC-SR04
Post by: Marcus9812 on Aug 01, 2019, 09:06 pm
Primero una disculpa por no haber contestado, ya que no he estado en casa, al final me ha gustado como ha quedado el proyecto con el codigo, pronto lo subire por si a alguien le interesa, muchas gracias por la ayuda :D