Go Down

Topic: [RISOLTO] millis su fade led rgb (Read 1 time) previous topic - next topic

gpb01

#30
Nov 22, 2018, 11:32 am Last Edit: Nov 22, 2018, 11:32 am by gpb01
Per quanto riguarda la semplice luminosità di un LED monocromatico ho trovato ottima l'applicazione di un esponenziale cubico ...
Considera che, mediamente, la risposta dell'occhio alla variazione di luminosità è la seguente:


riepilogabile in : B = L 1/γ (B=brightness, L=luminance, γ=gamma) quindi, se tu hai fatto una crescita esponenziale, sicuramente hai un ottimo risultato.  La cosa, come hai ben detto, si complica quando ci sono di mezzo i colori dato che l'occhio ha, oltretutto, una differente risposta per differenti colori ...  :o


Guglielmo
Search is Your friend ... or I am Your enemy !

torn24

Un pochino offtopic

L'autore del thread ha 16 anni, non so da quanto si cimenti con arduino  e la programmazione!
Ma penso che oltre il risultato ottenuto sia da considerare l'apprendimento, forse fare uso di librerie non è il modo migliore di imparare, esempio facendo le cose alla meno peggio ha scoperto la macchina a stati finiti, mi sembra una cosa positiva :)

gpb01

... non direi ... è giusto che impari ad usare anche le "librerie" ed inoltre, se vuole ottenere dei validi effetti, vedrai che non potrà farne a meno (... salvo non reinventare l'acqua calda).

Guglielmo
Search is Your friend ... or I am Your enemy !

Patrick_M

per quanto riguarda la sensibilità dell'occhio ai diversi colori suggerisco di dare un'occhiata qui
...nella mia professione me ne hanno fatto un mazzo tanto!! :D
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Datman

#34
Nov 22, 2018, 12:54 pm Last Edit: Nov 22, 2018, 01:00 pm by Datman
Un paio d'anni fa feci uno sfumo incrociato per un LED RGB. Per ottenere variazioni di luminosità piacevoli adottai una tabella:

Code: [Select]
int Z[69]={1,3,5,8,10,16,20,23,27,30,40,50,63,80,90,105,120,135,148,158,170,180,200,220,240,255,240,220,200,180,170,158,148,135,120,105,90,80,63,50,40,30,27,23,20,16,10,8,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
byte nR;
byte nG;
byte nB;

// I/O9:LED R; I/O10:LED G; I/O11:LED B;

void setup()
{
Serial.begin(9600);
}

void loop()
{
  for(nR=0;nR<69;nR++)
  {
  analogWrite(9,Z[nR]);

  nG=nR+23; if(nG>68) nG-=69;
  analogWrite(10,Z[nG]);

  nB=nR+46; if(nB>68) nB-=69;
  analogWrite(11,Z[nB]);

  /*
  Serial.print(nR);
  Serial.print("  ");
  Serial.print(nG);
  Serial.print("  ");
  Serial.println(nB);

  X=int((Z[n]%100)/10);
  Calc();
  Serial.print(X);
  Serial.print("  ");
  analogWrite(10,X);

  X=int(Z[n]%10);
  Calc();
  Serial.println(X);
  analogWrite(11,X);
  */

  delay(10);
  }
 
}
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

LeoTer01

Ringrazio a tutti per l'interessamento, il fatto di tener conto della sensibilità dell'occhio, pur essendo interessante come argomento, credo che potrei anche tralasciarlo in quanto è già tanto se sono riuscito a fare quello che ho fatto :D
Appena torno a casa darò un occhiata alla libreria consigliata.
Per quanto riguarda invece il mio problema (quello relativo al fatto che non riesco a variare il tempo) mi sembra che nessuno sia riuscito a capire dove sta l'inghippo (apparte torn24, che però non credo possa risolvere, ma proverò lo stesso) giusto? O mi sono perso qualcosa?

Leo

Etemenanki

Quale tempo non riesci a variare, intendi la velocita' del fading ? ... per sicurezza, posta l'ultimo listato completo e vediamo, che magari e' un'errore banale ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Etemenanki

... dare un'occhiata qui
...
... se volevano dimostrare che non sono percepibili differenze cromatiche, allora perche' dentro le ellissi piccole ci hanno disegnato un sacco di sfumature tutte diverse ? ...

... ah, gia, si riferivano ai vostri occhi umani ... come non detto ...

(scusa, non ho resistito :D)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Sulimarco

Ciao torn24,

Quote
Per quanto riguarda invece il mio problema (quello relativo al fatto che non riesco a variare il tempo) mi sembra che nessuno sia riuscito a capire dove sta l'inghippo
A mio parere il tuo codice e' giusto.

Se non vedi variare la velocita' della dissolvenza anche se cambia la variabile tempo presumo che tu abbia delle altre attivita' nell Loop che durano troppo.

Qualunque altra attivita' nel Loop dovrebbe durare meno di un millisecondo altrimenti il tempo della dissolvenza non e' definito da millis().

Ciao
Marco

Etemenanki

... per quello, chiedevo l'ultimo codice completo che sta usando ;) ... a me una volta non funzionava nulla perche' avevo sbagliato la posizione di un punto ... potrebbe essere qualcosa di banale, ma serve vederlo, per poterlo trovare ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

LeoTer01

#40
Nov 22, 2018, 06:00 pm Last Edit: Nov 22, 2018, 06:03 pm by LeoTer01
Allora, come rischiesto ecco il codice completo (ve lo allego perchè essendo molto lungo supero i caratteri consentiti per un post).
Il void che stiamo trattando è il void _9_Fade_RGB(), che ho suddiviso per comodità in schede. La principale è il Progetto_luci_1.0
Intanto ho provato il consiglio di torn24, ovvero aumentare il map ma non è cambiato niente. Ho anche provato a eliminare il delay finale nel void loop ma niente da fare.

P.S. il programma è ancora in fase di costruzione quindi se ci sono cose che sembrano messe a caso è per questo motivo, perdonatemi.

Grazie
Leo

Claudio_FF

La prima cosa che salta all'occhio sono le serial print ad ogni giro di loop che saturano il buffer di trasmissione e diventano bloccanti. In sostanza il loop cessa di ciclare veloce e avanza a singhiozzo mano a mano che i byte vengono trasmessi.
* * * *    'if' e 'case' non sono cicli   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *
* La corrente si misura in 'mA', la quantità di carica in 'mAh' *

Sulimarco

Concordo con Claudio_FF.

Togli le stampe su seriale.

Togli le AnalogRead() a vuoto, non servono a niente con dei potenziometri minori di 20K, e fanno solo perdere tempo.

Togli il delay() al fondo, fa solo danni.


Marco

LeoTer01

FUNZIONA!!! :)  Il colpevole erano i Serial.print.

Grazie mille a tutti!
Leo

Go Up