Destra sinistra (non politica) ed emergenza

#include "Arduino.h"
#include <FastLED.h>

#define LED_PIN               50
#define NUM_LEDS             650
#define Blinker NUM_LEDS/5

CRGB leds[NUM_LEDS];


void setup()
{
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.clear();
}


void loop()
{
//  TwinBlink(); //togliere gli slash dove serve, una subroutine alla volta
//  LeftBlink(); //togliere gli slash dove serve, una subroutine alla volta
  RightBlink();  //togliere gli slash dove serve, una subroutine alla volta
}


void TwinBlink()
{
  for (int i = Blinker; i >= 1; i = i - 5)
  {
    leds[i] = CRGB(255, 25, 0);
    FastLED.show();
    delay (10);
  }

  for (int x = (NUM_LEDS - Blinker); x < NUM_LEDS; x = x + 5) //
  {
    leds[x] = CRGB(255, 25, 0);
    FastLED.show();
    delay (10);
  }

  for (int j = Blinker;  j >= 1; j = j - 5)
  {
    leds[j] = CRGB(0, 0, 0);
    FastLED.show();
    delay (10);
  }

  for (int y = (NUM_LEDS - Blinker); y < NUM_LEDS; y = y + 5)
  {
    leds[y] = CRGB(0, 0, 0);
    FastLED.show();
    delay (10);
  }
}

void LeftBlink()
{
  for (int i = Blinker; i >= 1; i = i - 5)
  {
    leds[i] = CRGB(255, 25, 0);
    FastLED.show();
    delay (10);
  }

  for (int j = Blinker;  j >= 1; j = j - 5)
  {
    leds[j] = CRGB(0, 0, 0);
    FastLED.show();
    delay (10);
  }
}


void RightBlink()
{

  for (int i = (NUM_LEDS - Blinker); i < NUM_LEDS; i = i + 5) //
  {
    leds[i] = CRGB(255, 25, 0);
    FastLED.show();
    delay (10);
  }

  for (int j = (NUM_LEDS - Blinker); j < NUM_LEDS; j = j + 5)
  {
    leds[j] = CRGB(0, 0, 0);
    FastLED.show();
    delay (10);
  }
}

Buonasera a tutti, ho ancora bisogno di qualche consiglio.
Quando chiedo aiuto è perchè, nonostante abbia già provato, sono fermo e non trovo spunti per uscirne.
Come potete vedere, ci sono tre subroutine, praticamente sono indicatori di direzione che come effetto fanno accensione e spegnimento shiftato. E' anche chiamato effetto wipe da qualcuno. Per quanto riguarda destra e sinistra ok, invece l emergenza non risco a farla proprio andare sincrona tra i due.
recentemente standardoil mi ha dato un "pussone" e poi sono riuscito ad andare avanti. Adesso mi sà che è ora di un altro. Grazie in anticipo a chi mi dedica un po' del suo tempo.

Non ho capito esattamente come funzionano i varii for, ma credo che tu debba usare un solo for da cui ricavi x, y, i e j.

Ciao Datman, forse il problema è proprio nel fatto che mi dici che non capisci come funzionano i for?
Intendi dire questo?

Ah, ho capito!
Togli i FastLED.show e i delay dai for e metti un solo FastLED.show e un solo delay alla fine, dopo aver chiuso l'ultimo for.

ok.....dopo pranzo se ho tempo provo. Grazie per le risposte.

No! Il primo e il terzo for prima impostano leds[] da blinker a 1 con dei valori e un istante dopo con altri. Sono dei movimenti velocissimi?
...Ma sono forse gli effetti delle frecce scorrevoli di alcune autovetture?

ecco... questo è interessante ma non ho capito,e trovato, come possibile farlo.

ma non è questo l esempio ...giusto vero?

esatto......sono proprio quelle. il fatto che sono veloci è perche la striscia è da 332 led metro. quindi, solo per gli indicatori ci sono 332/2 led

Forse ho capito.
Devi fare prima Blinker e NUMLEDS-Blinker per accendere, poi di nuovo per spegnere con 0,0,0. Però dal telefonino ci sto diventando matto... :slight_smile:

Tranquillo, non impazzire per nulla. Quando hai tempo e sei più tranquillo, senza impegno, dagli uno sguardo. Io da domani sono in viaggio per rientrare in Italia.
Ti ringrazio molto per la tua disponibiltà. Comunque è come dici, si accende destra progressivamente e si spegne progressivamente. In contemporanea, ma nel senso inverso, considerando che è una striscia unica, anche la sinistra.
cioè....... la destra parte decrementando, accensione e decrementa anche per spegnere.La sinistra aumenta per accendere e anche per spegnere.

1 Like

Ecco, con il computer è molto più semplice! :slight_smile:
Dovrebbe essere semplicemente così:

void TwinBlink()
{
  for (int i=Blinker; i>=1; i=i-5)
  {
    leds[i] = CRGB(255, 25, 0); // Accende i LED sinistri.
    leds[NUM_LEDS-i] = CRGB(255, 25, 0); // Accende i LED destri.
    FastLED.show();
    delay (10);
  }
  for (int i=Blinker; i>=1; i=i-5)
  {
    leds[i] = CRGB(0, 0, 0); // Spegne i LED sinistri.
    leds[NUM_LEDS-i] = CRGB(0, 0, 0); // Spegne i LED destri.
    FastLED.show();
    delay (10);
  }
}
1 Like

quindi per ogni for serve un fastled.show, per accendere e un delay per fare in modo che sia presente un sequenziale. Giusto?

Sì:

  • imposti l'accensione dei LED sinistri
  • imposti l'accensione dei LED destri
  • esegui con FastLED
  • attendi 10ms
  • fai tutto il for (50 volte)

  • fai lo stesso per spegnerli.

beh.... 50 volte non è definito o mi sfugge qualcosa?
ancora una domanda, ma se il codice legge due for, e li visualizza, non è che mi accende prima una e poi l altra?
dico questo perchè, tra le varie prove che ho fatto, non sono mai riuscito a farli accendere e spegnere sincroni destra e sinistra.
Mi pare che cosi' accenda e spenga la prima e poi incominci la seconda. Stesso ciclo di accensione e spegnimento della seconda per poi ripartire con la prima.
Comunque proverò piu' tardi. dopo le 18.

Scusa... 50 volte lo avevo messo io come Blinker con 320 LED per vedere se tornavano più o meno i conti!

ancora una domanda: ma se il codice legge due for, e li visualizza, non è che mi accende prima una e poi l'altra?

Leggi i commenti! :slight_smile:

Che ore sono lì?... Qui sono le 20.33! :slight_smile:

Ok, scusami
si vede anche dal set dei canali rgb nei for..............
14.33 costa est stati uniti.

Perfetto, adesso posso andare avanti a battere la testa su qualche altra riga di codice.
Ti ringrazio davvero moltissimo.

Prego! :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.