14 led gestiti in modo diverso.

Salve ragazzi,
sono ancora alle prime armi con arduino, infatti so poco e niente.
Però vorrei farvi una domanda:
come si può fare un codice che mi faccia gestire 14 led in modo diverso, ad esempio: il primo rimane acceso per tot secondi e poi si rispegne per altri, poi si riaccende e rimane acceso, il secondo si spegne e si riaccende per tot volte ecc.
Vi prego non conosco quasi nessun modo per fare questo.
Vi ringrazio da ora per tutte le risposte

Buonasera e benvenuto sul forum,
essendo il tuo primo post, nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

P.P.S. senza l'autorizzazione di Guglielmo

ciao
pippo72

Ti rispondo anche se sono alle prime armi, spero comunque di darti un piccolo aiutino

Innanzitutto, l'operazione che devi fare, è quella di output sui pin a cui hai connesso i vari led, ti prendi una breadbord e li sistemi come vuoi; su google c'è una quantità spropositata di esempi sui led

dai una letta a questo pinMode() - Arduino Reference

poi sui vari pin devi andare a "scrivere" i segnali di accensione e spegnimento
funzione digitalWrite() -> digitalWrite() - Arduino Reference

il fatto di spegnere e accendere ad intermittenza, dipende da come programmi i ritardi all'interno del tuo codice tra i segnali di accensione e spegnimento....ma dipende da quello che vuoi fare... li ci va un minimo di ragionamento sul codice, qualche ciclo, funzione delay() e digitalWrite(), sono tutte cose che su google trovi al volo, quindi vai tranquillo

ps: se hai difficoltà sul codice, prima di tutto carta e penna! :wink:

ciao

Dopo che ti sarai presentato cerca informazione su come si usa Millis.

Qui è spiegata molto bene.

@r_o_b_93: tutto giusto a parte il suggerimento di usare i delay(). In un contesto simile penso serva solo a far venire un gran mal di testa :wink:

ciao
pippo72

Scusate tanto se non mi sono presentato, ma di solito non entro mai in dei forum, infatti, in quei pochi forum in cui entravo non leggevo mai il regolamento

Allora,
14 LED sono tanti ... NON hai probabilmente piedini sufficienti e anche l'assorbimento sarebbe eccessivo per collegarli ad Arduino.

Hai due strade ...
... una più complessa, di usaredei LED normali con driver esterni e multiplexer per comandarli, l'altra, molto più semplice, è usare dei LED "indirizzabili", come i "neopixel" di Adafruit che si comandano attraverso UN solo pin direttamente da Arduino.

Dopo di che, per gestire le varie temporizzazioni, assolutamente NON usare la delay(), ma impara ad usare, come ti è già stato detto la funzione millis() ... studia prima QUI, poi QUI ed infine leggi anche QUI e QUI ... vedrai che ti sarà tutto più chiaro.

Guglielmo

abbiamo imparato una cosa in due vedi :smiley:

grazie

gpb01 scusa se mi intrometto e non è certo per contraddirti vista la tua preparazione in merito e l'enorme aiuto che dai a tutti (me compreso), ma dire a chi parte da zero di usare i neopixel e mils invece di partire appunto con cose più semplici come accendere normali led e usare delay per le pause penso sia il miglior modo per spaventarlo e fargli passare la voglia ancor prima di iniziare. Ripeto, non è mia intenzione fare polemica o andare contro i tuoi ottimi consigli, ma nel mio piccolo, da semplice appassionato autodidatta penso che "bruciare" le tappe iniziando da cose troppo complesse invece che da piccoli passi possa essere un po' controproducente all'inizio.

>-zef- : 1. i "neopixel" sono BANALI da usare, basta collegarli (hanno tre pin, +, - e comando) ed usare l'ottima libreria di Adafruit ... niente cavi, niente resistenze, niente mux, niente driver, un solo pin usato per controllarli, due semplici chiamate alla libreria e fai tutto, quindi ... molto più semplici da usare; 2. come fai a fare temporizzazioni DIVERSE simultaneamente con la delay() che è bloccante ? :smiling_imp: ... mentre passa il tempo del LED1 devi fare qualche altra cosa sul 2 e mentre passa il tempo del 1 e del 2 devi fare altre cose sul 3 ... e così via ! L'hai letto bene il suo messaggio iniziale ?

T'assicuro che prima di dare una risposta valuto cento volte la richiesta dell'utente e cerco sempre di semplificargli la vita ... fidati !

Guglielmo

ovvio che concordo con te al 100% l'uso di mills è il modo più corretto per gestire temporizzazioni diverse senza bloccare il processore per tempi morti, ma anche con delay puoi fare temporizzazioni diverse simultaneamente, basta solo dividere un grande problema in tanti piccole soluzioni :wink:

Per i neopixel mai usati e non ho idea di quanto sia semplice o meno usarli (mi fido della tua esperienza) forse sono ancora mentalmente troppo "bloccato" con l'asm dei pic dimenticando che su arduino si trovano librerie per fare praticamente di tutto senza grandi sforzi :slight_smile:

@ gpb01: effettivamente ho provato con millis(), che non conoscevo prima di partecipare a questa discussione, non avevo ragionato sul fatto che delay è bloccante.... per un problema di questo genere è un suicidio, molto meglio millis()

grazie mille per la dritta!

-zef-:
... ma anche con delay puoi fare temporizzazioni diverse simultaneamente, basta solo dividere un grande problema in tanti piccole soluzion ...

... auguri ... qui hai 14 LED ciascuno con differenti temporizzazioni ... ho idea che ti è venuto prima il "mal di testa" che vedere il tutto funzionare :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

r_o_b_93:
... effettivamente ho provato con millis(), che non conoscevo prima di partecipare a questa discussione, non avevo ragionato sul fatto che delay è bloccante.... per un problema di questo genere è un suicidio, molto meglio millis()

... infatti, con millis(), una volta che hai capito bene come usarla, è di una semplicità unica ;). Un po più di tempo dedicato allo studio prima, riduce drasticamente il tempo di sviluppo dopo :slight_smile:

Guglielmo

Ciao -zef-

Hai ragione che i Neopixel (o WS2812, come si chiama il componente) e millis non sono la cosa piú semplice, ma é la soluzione piú semplice per il progetto proposto dal utente.

Ciao Uwe

uwefed:
... Hai ragione che i Neopixel (o WS2812, come si chiama il componente) ... non sono la cosa piú semplice

Lo sono se, ovviamnete, li paragoniamo ad un singolo LED o ad un paio di essi ... appena il numero cresce tutto si complica e i NeoPixel SONO la soluzione più semplice.

Con i NeoPixel (che appunto sono dei LED WS2812 o simili) il tutto è SEMPRE molto banale ...
... due fili per l'alimentazione e un pin per i comandi.

L'egregia libreria di Adafruit nasconde completamente tutte le complessita e, ripeto, con un paio di chiamate si fa tutto e ... molto di più, dato che i NeoPixel sono oltretutto LED RGB e quindi, oltre a comandarli singolarmente, per ogniuno si può scegliere colore e luminosità ... sempre con le due famose chiamate !

Scusate se poco ! :smiley:

Guglielmo