Vai al contenuto
PLC Forum


Domanda Arduino Uno


Andrea25

Messaggi consigliati

Buonasera a tutti.

Spero di scrivere nella sezione giusta.Avrei bisogno di chiedere una cosa sulla programmazione di Arduino Uno:ho scritto un programma per l'accensione sequenziale di 13 led e ad ogni passaggio ho impostato un certo tempo(delay)e volevo sapere e capire come posso modificare tutti i "delay"con un solo comando,senza riscriverli tutti,per variare la velocità di sequenza accensione dei led.

Spero di essermi spiegato bene...grazie.

Link al commento
Condividi su altri siti


Attenzione che la funzione "delay" è bloccante, ovvero durante quel tempo la macchina è ferma. Quindi tra il rpimo e l'ultimo LED ci possono essere tempi differenti dovuti alle fermate precedenti.

Link al commento
Condividi su altri siti

No Walter, lui ha il ritardo uguale per tutti; vuol solo variare il ritardo con un unico comando, quindi la soluzione proposta da robyelara. Con l'ingresso analogico hai un numero che varia tra 0 e 1023 che puoi usare per variare contemporaneamente tutti i ritatrdi. Poui anche avrle tutti diversi, poi usi il dato analogico come variabile per moltiplicare/dividere le varie costanti.

Link al commento
Condividi su altri siti

si e' un'applicazione che si trova su tutti i libri arduino e sul web ,Dopo "Hello world" c'e questa del ingresso analogico con potenziometro

Se non usa un potenziometro puo' usare un display lcd .....

Link al commento
Condividi su altri siti

Buonasera a tutti.

Vi ringrazio per i vostri interventi:Livio hai riassunto benissimo quello che voglio fare,grazie a robyelara per il suggerimento del potenziometro.

walterword,vedo sul mio libro di Arduino.

Come sempre ci provo e vi aggiorno :thumb_yello:

Modificato: da Andrea25
Link al commento
Condividi su altri siti

Buonasera a tutti.

Ora che mi avete suggerito il metodo potenziometro ho cercato in rete ed ho trovato tanti schemi e sketch.

Sul libro che ho (di Arduino uno) non porta esempi e non parla di potenziometri...

Ad ogni modo ho provato a collegarlo e a scrivere uno sketch(così si chiama vero?)e funziona tutto bene :thumb_yello:

Mi sembrava strano che in un dispositivo come Arduino si dovesse cambiare i delay uno ad uno!

Grazie di nuovo a tutti.

Link al commento
Condividi su altri siti

be....esistono decine di libri su arduino .....

Si , si chiama sketch .l'ambiente e' organizzato per rendere meno ostico e complicato il lavoro al programmatore o designer .

comunque ricorda che si possono scrivere librerie in C++ e che gli sketches sono scritti in un linguaggio che e' il c++ sintassicamente parlando .

Link al commento
Condividi su altri siti

Sul libro che ho (di Arduino uno) non porta esempi e non parla di potenziometri..

Quasi certamente porterà un esempio simile: usa il valore analogico letto da un potenziometro per variare il valore di PWM in modo da variare la liminosità di un LED. Questo è un esempio che trovi forse anche negli sketch di esempio.

Link al commento
Condividi su altri siti

Buongiorno Livio.

Mi riguarderò bene il libro...sai sono alle primissime armi e forse,come dici tu,c'è la soluzione magari esplicata in modo un p'ò diverso e magari l'ho letta ma non capita!

Grazie comunque di nuovo :thumb_yello:

Modificato: da Andrea25
Link al commento
Condividi su altri siti

  • 2 months later...

Questo è lo sketch per modificare con solo comando i vari tempi di delay:

# define Sensore A0
# define LED1 2
# define LED2 3

int tempo = 0;


void setup()
{ pinMode (Sensore,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
Serial.begin(9600);}

void loop(){

tempo = analogRead(Sensore);
digitalWrite (LED1,HIGH);
delay(tempo *0.5 );
digitalWrite (LED1,LOW);
digitalWrite (LED2,HIGH);
delay(tempo*2);
digitalWrite (LED2,LOW);
delay(tempo);
}

la variabile tempo va da 0 a 1023 e quindi da 0 a 1,023 secondi (facciamo un secondo conto pari), devi quindi moltiplicare la variabile tempo per 5 se vuoi ottenere 5 secondi o un numero diverso per ciascun delay. La risposta non è immediata perchè il delay mentre è attivo blocca l'acuisizione del valore analogico.

Se il tempo di ciascun led dovesse dipendere da una propria variabile lo sketch è inutlizzabile e devi optare per la funzione millis()

Almeno è quello che ho capito da dilettante.

Link al commento
Condividi su altri siti

Questo è invece lo sketch usando la funzione millis() fi fatto lo sketch BlinwithDelay degli esempi di Arduino modificato.

Credo che il listato possa essere ulteriormente smagrito.

/* L'uso dell'istruzione delay blocca il LOOP.
Con questo sketch un led lampeggia mentre
il void loop continua nei suoi cicli.*/

# define LEDA 2
# define LEDB 3
# define POT A0

int ledStateA = LOW;
int ledStateB = LOW;

long pMillisA = 0;
long pMillisB = 0;

long pausa = 0;

void setup()
{ pinMode (POT, INPUT);
pinMode(LEDA, OUTPUT);
pinMode(LEDB, OUTPUT); }

void loop(){

pausa = analogRead(POT);

unsigned long cMillisA = millis();

if( cMillisA - pMillisA > (pausa + 50))
{ pMillisA = cMillisA;
if ( ledStateA== LOW)
ledStateA = HIGH;
else
ledStateA = LOW;
digitalWrite(LEDA, ledStateA);}


unsigned long cMillisB = millis();

if( cMillisB - pMillisB > ( pausa + 275) )
{ pMillisB = cMillisB;
if ( ledStateB == LOW)
ledStateB = HIGH;
else
ledStateB = LOW;
digitalWrite(LEDB, ledStateB);}
}

Link al commento
Condividi su altri siti

L'autore delladiscussione non si fa vivo da oltre 2 mesi.

Inutile immettere i listati degli sketches di esempio di arduino, si trovano già nel software di arduinobasta aprire il menù a tenda.

E' anche inutile mettere links che generali che google propone e ripropone.

in questo modo si appesantisce solo l'archivio del forum.

Link al commento
Condividi su altri siti

Non avevo notato la data del primo post. La pagina linkata è riferita a corsi scolastici in italiano su Arduino, non cosi facili da trovare se non spulci fra le pieghe di goofle.

Comunque a vostra discrezione, cancellate pure il post.

Link al commento
Condividi su altri siti

La pagina linkata è riferita a corsi scolastici in italiano su Arduino, non cosi facili da trovare se non spulci fra le pieghe di goofle.

Se uno ha un minimo di voglia e di pazienza è sufficiente che faccia la ricerca con le parole chiave, ad esempio, "arduino corsi" e metta il filtro per i soli documenti in ling

ua italiana.

Poi io ritengo giusto, ma è una mia idea, che chi domanda per imparare non debba avere tutto fatto, ma debba essere solo guidato. Sai il vecchio proverbio cinese: "Se ragali un pesce ad un affamato losfami per un guiorno; se gli insegni a pescare lo sfami per tutta la vita".

Link al commento
Condividi su altri siti

  • 2 months later...

Salve a tutti.

Ho pensato di continuare a scrivere su questa discusione(spero di non sbagliare)perchè volevo chiedervi un consiglio.

Ho impostato il programma con potenziometro come mi avete suggerito ed ho provato a far girare dei passo-passo bipolari mediante l'integrato driver in dotazione con il kit arduino(L282 se non sbaglio).Funziona,il motore gira ma arrivato a circa 150 giri/min."salta"qualche step e se aumento ancora si ferma in una "tremarella"sul posto avanti e indietro.

Ho provato con diversi motori e ho riscontrato lo stesso problema.Potrebbe essere quindi il driver?Oppure la scheda arduino?

Link al commento
Condividi su altri siti

Più facile che siano i motori non pilotati correttamente.

Se disponi di un oscilloscopio puoi osservare le forme degli impulsi che alimentano i motori e verificare che al crescere della frequenza non si deformino.

Poi, se usi arduino come negli sketch di esempio ci son dei grossi limiti di frequenza.

Link al commento
Condividi su altri siti

la libreria che usa arduino per far funzionare questo tipo di motori credo che usi il timer 1 , però non conviene toccare nulla in quanto e' gia tutto prescalato e programmato per fare anche altre cose come il pwm se non erro

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...