Led arduino

Sto facendo un esperimento con arduino... cercare di far accendere il led mooolto lentamente.
Ho notato un pò di cose che mi sembrano strane:

quando attacco il led direttamente ad arduino nell'uscita 13 fa più luce che se lo faccio passare dalla BradBoard. Ho provato a mettere la resistenza nella parte negativa dal led ma non succede nulla. ( è possibile che abbia sbagliato resistenza?? non capisco).

Poi quando faccio la funzione for per far accendere il led molto lentamente quest'ultimo , ne si accende lentamente ne, si spegne lentamente.
L'unica cosa che fa è accendersi e spegnersi.

Ho provato poi a fare una funzione for e attaccare il led alla breadbord ma la luminosità del led è molto bassa e non c'è nemmeno presenza dell'effetto.

com'è possibile?? sto pensado che sia difettato il mio arduino...

posta il codice che diam oun occhio

Qualcuno mi porti la sfera di cristallo.
Ciao Uwe

Va bene anche un po' di grappa 8)

@albyy:
e poi dovresti per favore dire che led hai messo, che resistenza hai usato, come hai collegato il tutto alla breadboard.

Va bene anche un po' di grappa

perché si diventa piú veggenti del solito?
Ciao Uwe

No, ma ci si "immaginano" meglio le cose :wink:

Per forza che non si accende né spegne lentamente l'hai messo su un pin NON PWM hehe

Qualcuno mi porti la sfera di cristallo.

Sempre più diffuse ste sfere, e proprio il caso di dire... come mi girano le sfere. :smiley:

Vedo prevedo e stravedo.

ho appena effettuato l'esempio in questione. Funziona tranquillamente e c'è un esempio sul sito di arduino solo che bisogna capirlo e il codice è il seguente.

int luminosita = 0;
int sfuma = 5;

void setup(){
pinMode(9, OUTPUT);

}

void loop (){
analogWrite(9, luminosita);
luminosita = luminosita + sfuma;

if((luminosita == 0) || (luminosita ==255)){
sfuma = -sfuma;
}
delay(30);
}

Hai capito come si comporta il programma? Giocando sui parametri sfuma e delay ottieni l'effetto lento da te desiderato. Ad esempio se poni sfuma = 1 e delay(60). Si accenderà e si spegnerà molto più lentamente.

Chiaramente come hanno detto gli altri il pin deve essere PWM, e sono quelli caratterizzati dal simbolo ~ affianco al numero. Sul sito di arduino trovi tutte le spiegazioni del caso

devil88bg:
ho appena effettuato l'esempio in questione. Funziona tranquillamente e c'è un esempio sul sito di arduino solo che bisogna capirlo e il codice è il seguente.

int luminosita = 0;
int sfuma = 5;

void setup(){
pinMode(9, OUTPUT);

}

void loop (){
analogWrite(9, luminosita);
luminosita = luminosita + sfuma;

if((luminosita == 0) || (luminosita ==255)){
sfuma = -sfuma;
}
delay(30);
}

scusate una cosa, questo codice in sostanza fa variare la luminosità passano di 5 in 5?...quindi fà : 0, 5,10,15,20,25, e cosi via fino a 255 con un'intervallo di 30 millisecondi esatto?...

in particolare questa riga " if((luminosita == 0) || (luminosita ==255)) " cosa fa?-.... nello specifico le due stanghette verticali che significano? grazie

Non ha senso di far rispondere albyy911 alle nostre domande senza inventarci il suo problema e rispondere a domande non poste?
Ciao Uwe

babbu95:
scusate una cosa, questo codice in sostanza fa variare la luminosità passano di 5 in 5?...quindi fà : 0, 5,10,15,20,25, e cosi via fino a 255 con un'intervallo di 30 millisecondi esatto?...

in particolare questa riga " if((luminosita == 0) || (luminosita ==255)) " cosa fa?-.... nello specifico le due stanghette verticali che significano? grazie

Allora mentre la funzione digitalWrite fa assumere valori 0 o 1(o è 0 o 5 V la tensione) al nostro pin, la funzione analogWrite fa assumere valori da 0 a 255(ma il PIN deve essere PWM) e con questa tecnica possiamo far accendere il LED lentamente o comunque a scaglioni. Qui c'è scritto come funzionano i pin PWM http://arduino.cc/en/Tutorial/PWM

Le due sbarrette || sono un operatore OR. In pratica fa questa operazione: Se la luminosità è uguale a zero oppure a 255 allora poni la variabile sfuma = -sfuma. Questo perchè come detto il range è tra 0 e 255. Allora quando sfuma è positivo, "sfuma" viene sommato a "luminosità". Se negativo viene sottratto. Il programma funziona così:
Inizialmente sfuma è positivo e luminosità è pari a zero. Quindi somma sfuma fin quando luminosità vale 255, perchè se andasse oltre l'intervallo passerebbe direttamente a zero e il led si spegnerebbe istantaneamente senza "sfumare" appunto. Quando è 255 pone sfuma negativo e quindi lo fa gradualmente scendere a zero e poi di nuovo il contrario.
Chiaramente se poniamo sfuma pari a 1 invece che a 5 il led si accenderà e spegnerà molto più lentamente.

devil88bg:
la funzione analogWrite fa assumere valori da 0 a 255(ma il PIN deve essere PWM)

Non è corretto, con analogwrite imponi il duty cycle su un pin di tipo PWM, la tensione è sempre compresa tra solo due livelli, 0V e 5V, quello che cambia è il rapporto temporale tra i due stati.

astrobeed:
Non è corretto, con analogwrite imponi il duty cycle su un pin di tipo PWM, la tensione è sempre compresa tra solo due livelli, 0V e 5V, quello che cambia è il rapporto temporale tra i due stati.

Quindi praticamente cosa succede, da quello che ho letto e capito inizialmente il duty cycle è tutto a zero e quindi led spento (i valori dell'onda sempre compresi tra 0 e 5). All'aumentare del range (che varia tra 0 e 255), l'onda diventa sempre più grande e che succede: Quindi la tensione è pari a 5 per un tempo inferiore al periodo e questo non consente al LED di accendersi completamente. Però all'aumentare del range cresce appunto il tempo t per cui l'onda assume valori pari a 5 V fino a che l'onda è esattamente pari al periodo: in quel momento il LED si accende completamente.
Giusto come discorso?

scusate una domanda che poco ci centra con questo topic ma riguarda più o meno...ma mi sembra una cavolata aprire un topic per questa domanda...comunque...
se io collego direttamente un led al piedino arduino, un led classico da 5mm, sò che crea un cortocircuito, stessa cosa con dei led di un display a 7 segmenti per esempio, comunque, se io lo collego senza resistenze, faccio cortocircuito, ma l'unica cosa che rischio di rovinare è il led, in quanto l'arduino non si rovina esatto? come teoricamente, data la sua struttura non si rovinerebbe nemmeno se cortocircuitassi direttamente il +5V con il GND ...esatto?

Non vorrei direi una fesseria ma da quel che ho letto sui tutorial e mi è sembrato di capire è che se fai una cosa del genere potresti rovinare definitivamente il pin, che risulterebbe un pin morto.
Se cortocircuiti +5 V e la massa potresti bruciare definitivamente il pin da 5 V e credo sia una pessima cosa. Magari si scollega in automatico l'alimentazione ma meglio non provarci :smiley:

Non lo bruci il pin solo collegando un led.

Bruci comunque il led perché ci transita troppa corrente: i led non sono fatti per lavorare a 5V, e le tensioni variano in base al colore.

Ci vuole sempre una resistenza.

leo72:
Non lo bruci il pin solo collegando un led.

Bruci comunque il led perché ci transita troppa corrente: i led non sono fatti per lavorare a 5V, e le tensioni variano in base al colore.
404 Error

Ci vuole sempre una resistenza.

capisco, e se per sbaglio (ci sto attento a non farlo ovvio, ma magari sbaglio con i collegamenti sulla breadbord per una svista, andassi a collegare direttamente i +5V o un pin analogico/digitale (comunque impostato rispettivamente su HIGH o 255 ) al GND? cosa succederebbe? rischierei di bruciare arduino o il microcontrollore o non rischierebbe nulla il mio arduino o parte di esso? grazie

Premesso che i corto non fanno mai bene, diciamo che un minimo di resistenza i componenti ce l'hanno (io ho messo un Atmega stand-alone col +5 nel piendo di massa da una parte ed i +5 per l'AVcc infilato in un pin a caso perché avevo sbagliato ad allineare il uC su una breadboard...) però non si può mai sapere: potresti bruciare qualcosa come no. Quindi, il corto è da evitare sempre.