else if (esito.value == 0x1C7E161){ //squadra 1, tasto 1
analogWrite (led1, 150);
Serial.println ("Squadra uno prenota");
hannoPrenotato ++ ;
risposta = 11;
squadra = 1;
}
il problema è che non si accende il led1, nonostante la condizione è vera (infatti viene scritto su seriale "squadra uno prenota" ) . il led è collegato alla porta 10, e impostato come output. Ma poi, l'altra cosa strana è che se io tolgo l'analogWrite e metto "digitalWrite (led1, HIGH);" tutto funziona benissimo. Utilizzo Arduino mega 2560.
Com'è possibile che accada questo? Grazie a tutti quelli che risponderanno
Il led è collegato così : il catodo al GND, mentre l'anodo è collegato alla porta 11 di Arduino.
Ma io escluderei che sia un problema di collegamento, perchè se utilizzo il comando "digitalWrite" funziona, mentre se uso il comando "analogWrite "non funziona
aleachi99:
Il led è collegato così : il catodo al GND, mentre l'anodo è collegato alla porta 11 di Arduino.
Ma io escluderei che sia un problema di collegamento, perchè se utilizzo il comando "digitalWrite" funziona, mentre se uso il comando "analogWrite "non funziona
Vedo 2 problemi:
Manca la resistenza che limita la corrente del LED; mettici un 470 Ohm.
Piloti pin 10 ma colleghi il LED al pin 11 (sempre riferito alle informazioni che hai scritto).
Ho sbagliato nell'ultimo messaggio: l'anodo è collegato alla porta 10, non alla 11
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.
aleachi99:
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.
... e ... secondo te cosa cambia ???
Ti ricordo che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.
aleachi99:
La mia idea era quella di usare l'analogWrite proprio per omettere la resistenza.
... e ... secondo te cosa cambia ???
Ti ricordo che ogni pin di Arduino può dare al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore) ed inoltre la somma di tutti i pin e dell'assorbimento del chip, non deve superare al massimo i 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Assorbimenti oltre detti limiti possono danneggiare irrimediabilmente il chip.
Quindi ... vedi tu ...
Guglielmo
Alle informazioni date da Guglielmo manca un dato: se attacchi un LED senza resistenza a Arduino si istaura una corrente tra 80 e 100mA che é solo limitata dalla resitenza dei transistori e collegamenti interni del controller che dissipano la potenza residua ( differenza tra tensione del diodo e tensione di alimentazione per la corrente) in calore.
Poi l' altro errore che fai é pensare che analogWrite sia una cosa ANALOGICA. No, é un onda rettangolare a frequenza fissa ( 490 o 980 Hz a secondo del Pin e del microcontroller usato) della quale viene variata il tempo di on rispetto al tempo di off. percui ci sono sempre 0 o 5V e non tensioni intermedie.
Terzo concetto errato. Un LED non si pilota in tensione ma in corrente.
Inoltre la resistenza deve essere calcolata in base al colore del led, per ogni colore di led c'e' una caduta di tensione (ti "mangia" un pò di V). La resistenza devi calcolarla per far arrivare al led circa 10-20mA
In allegato elenco colori led e resistenze a seconda dei V applicati.
Come detto da @uwe i pin PWM generano con analogWrite() un segnale in onda quadra tra 0-5V, vedi nel forum o su internet "duty cycle"