Vai al contenuto
PLC Forum


Domanda Arduino Uno


Messaggi consigliati

Inserito:

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.


Inserita:

Usa un potenziometro come AI e lo scrivi dentro il delay...

Inviato dall'app. Mobile di PLC Forum da iPad3,6

Inserita:

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.

Inserita:

forse ti riferisci al fatto che invece di usare un numero definito all'interno del delay(....) e' meglio usare una o piu variabili che imposti tu ?

Inserita:

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.

Inserita:

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 .....

Inserita: (modificato)

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
Inserita:

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.

Inserita:

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 .

Inserita:
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.

Inserita: (modificato)

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
  • 2 months later...
Inserita:

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.

Inserita:

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);}
}

Inserita:

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.

Inserita:

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.

Inserita:
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".

Inserita:

Grazie dei suggerimenti ragazzi.

Livio,la tua idea e più che giusta!

Ho momentaneamente "sospeso" con arduino per mancanza di tempo...

  • 2 months later...
Inserita:

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?

Inserita:

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.

Inserita:

verifica i limiti di frequenza , puo' darsi che arduino non ce la fa

Inserita:

la frequenza di arduino uno è di circa 500hz facile che è come dice walter

Inserita:

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

Inserita:

Il timer 1 ed il timer 2 si possono usare tranquillamente; è il timer0 che è usato per i cicli di delay.

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...