Pages: [1] 2 3   Go Down
Author Topic: sequenza led accelerata  (Read 1268 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,
sono nuovo mi chiamo Roberto e sono di Trani; mi sono affezionato molto al mondo di arduino; con molta calma sto cercando di capire come funziona .

Ho creato questo programmino:

int tgr=LOW;
int var=0;
int X;

void setup() {
pinMode(40,INPUT);
for (int uscita=2 ; uscita<29; uscita++){
pinMode(uscita,OUTPUT);
}
}

void loop(){
X=1000;
tgr=digitalRead(40);
if((tgr==HIGH)&&(var==0)){
for(int uscita=2; uscita<29; uscita++){
digitalWrite(uscita,HIGH);
delay(X);
digitalWrite(uscita,LOW);
X=X-35;
}
}
else{
for(int uscita=0; uscita<29; uscita++){
digitalWrite(uscita,LOW);}
}
}

facendo eseguire il programma, il tutto funziona molto bene; l'unica cosa che non mi soddisfa è la parte accelerata. mi spiego meglio:
all'inizio è molto lenta, poi successivamente accelera troppo velocemente; esiste un modo per avere un'accelerazione "costante"?

grazie a tutti in anticipo.....
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao
Cosa accelera? Arduino scappa via dalla scrivania?

In questo modo obblighi la gente a studiare e decifrare la logica del programma nel tentativo di capire cosa vuoi fare visto che hai omesso questo dettaglio fondamentale.
Specifica cosa vuoi ottenere, a cosa può servire, spiega il programma cosa dovrebbe fare, qualcuno potrà puntare direttamente sulla parte di programma senza studiarselo tutto.

ciao
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto devi mettere un delay (X) anche dopo digitalWrite(uscita,LOW);
le cose dovrebbero cambiare parecchio
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Udine
Offline Offline
Jr. Member
**
Karma: 0
Posts: 72
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Secondo me oltre alla modifica di Michele

Quote
Intanto devi mettere un delay (X) anche dopo digitalWrite(uscita,LOW);

io partirei con un valore di X più grande..
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vuoi fare effetto KITT

Code:
void oneAfterAnotherLoop()
{
  int delayTime = 50; //the time (in milliseconds) to pause between LEDs
                       //make smaller for quicker switching and larger for slower
 
//Turn Each LED on one after another
  for(int i = 0; i <= 9; i++){
    digitalWrite(ledPins[i], HIGH);  //Turns on LED #i each time this runs i
    delay(delayTime);
    digitalWrite(ledPins[i], LOW);
    //delay(delayTime);                //gets one added to it so this will repeat
  }                                  //8 times the first time i will = 0 the final
                                     //time i will equal 7;
 
//Turn Each LED off one after another
  for(int i = 9; i >= 0; i--){  //same as above but rather than starting at 0 and counting up
                                //we start at seven and count down
    digitalWrite(ledPins[i], HIGH);  //Turns off LED #i each time this runs i
    delay(delayTime);                //gets one subtracted from it so this will repeat
    digitalWrite(ledPins[i], LOW);
}                                  //8 times the first time i will = 7 the final
                                     //time it will equal 0                                                                 
}
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2747
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

attento perchè se accendi 27 led in fila e poi li spegni in sequenza senza transistors cuoci tutto

ciao
« Last Edit: April 11, 2012, 11:00:54 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Secondo me oltre alla modifica di Michele

Quote
Intanto devi mettere un delay (X) anche dopo digitalWrite(uscita,LOW);

io partirei con un valore di X più grande..
Può essere che la cosa migliori perché si allarga il tempo totale, ma considera che fino a 100ms il flashing di vede quindi ha a disposizione circa 30 step, solo che li vanifica col fatto che i led si accendono subito dopo essersi spenti, visto che manca appunto un delay.

@ Pablos: l'idea è simpatica, ma anche tu forse hai omesso un delay(delayTime); in fondo.
Sul discorso consumi hai perfettamente ragione, probabilmente usa una MEGA per avere così tante porte, ma se non l'ha fuso finora credo che le avrà messe smiley
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Avete ragione! Scusate, forse sono andato troppo nello specifico, senza spiegare per bene nulla.

Allora, la mia idea è di accendere dei led in sequenza
led1 si accende, aspetto X secondi, poi si spegne; a questo punto la sequenza, passa al led2 e così via.
se X lo mantengo costante, ottengo una sequenza costante di led che si accendo e spengono.

La mia idea e di creare una sequenza che pian piano acceleri. per questo ho inserito quella condizione X=X-35; ogni volta che itera, la X diminuisce di una quantità pari a 35 millisecondi.

Ripeto così, il sistema funziona benissimo, il fatto è che ottengo all'inizio lunghi tempi prima di passare al led successivo e verso la fine della sequenza ottengo tempi troppo corti, ecco perché vi chiedevo se era possibile creare qualcosa di più "equilibrato".

Mentre aspettavo che qualcuno rispondesse, ho buttato giù un'altra condizione, usando la funzione esponenziale:
 
void loop(){
x=0;
tgr=digitalRead(40);
if((tgr==HIGH)&&(var==0)){
for(int uscita=2; uscita<29; uscita++){
x=x+1;
digitalWrite(uscita,HIGH);
delay(Y);
digitalWrite(uscita,LOW);
Y=1000*(0,9)^x;
}
}

ottenendo un risultato molto più accettabile(a livello teorico-cartaceo), ma su arduino non l'ho ancora provato, visto che non sono riuscito a capire ancora come far funzionare la funzione pow.
Qualcuno mi saprebbe aiutare in qualche altro modo?


Spero di essere stato più chiaro.  smiley-razz smiley-razz
Logged

Padova, Italia
Offline Offline
Newbie
*
Karma: 0
Posts: 47
I love Arduino:-)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E se tu facessi un qualcosa del genere?

y=y-1;
x=x-y;

In questo modo anche l'accelerazione diviene graduale...poi a seconda dei valori che inserisci ottieni una salita diversa...
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ma hai almeno provato il consiglio che ti ho dato? altrimenti che li chiedi a fare? smiley-mr-green
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto devi mettere un delay (X) anche dopo digitalWrite(uscita,LOW);
le cose dovrebbero cambiare parecchio

Ma un delay costante dopo digitalWrite(uscita,LOW); ?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Secondo me oltre alla modifica di Michele

Quote
Intanto devi mettere un delay (X) anche dopo digitalWrite(uscita,LOW);

io partirei con un valore di X più grande..

Non otterrei valori troppo lunghi e morti all'inizio??
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

attento perchè se accendi 27 led in fila e poi li spegni in sequenza senza transistors cuoci tutto

ciao

Tranquillo Pablos, la mia idea è questa!
ora cerco di scendere un po' più sul concreto!

I led servono in realtà a ben poco, io tramite arduino comanderò dei mosfet IFRZ48; questi mi faranno, ogni qualvolta riceveranno l'impulso, chiudere un secondo circuito, per l'innesco di un accenditore elettrico, per l'accensione di fuochi d'artificio.
Ricapitolando i led non esistono più al posto dei led ci saranno dei mosfet, che fungeranno da interruttore per i miei accenditori elettrici.
Ora tramite video cercherò di farvi capire cosa ho in mente di ottenere!



da 5 secondi, capirete la "mia sequenza accellerata".....grazie  smiley

p.s.
sono un pirotecnico, non vi preoccupate, con l'hobby per l'elettronica!  smiley-cool smiley-cool
« Last Edit: April 12, 2012, 01:43:01 am by fireworks » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho un arduino MEGA 2560
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Fireowrks in inglese significa "fuochi d'artificio". Avevo avuto il sospetto  smiley-razz
Logged


Pages: [1] 2 3   Go Up
Jump to: