Pages: [1] 2   Go Down
Author Topic: Tutorial Loop con dissolvenza  (Read 1593 times)
0 Members and 1 Guest are viewing this topic.
Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


   
   

Salve a tutti, volevo abbinare un effetto dissolvenza al  tutorial " Loop" di Jarvis88 http://arduinotutorial.altervista.org/loop/ , mi spiego meglio, una volta accesi i led in  sequenza mi piacerebbe che si spegnessero sempre in sequenza ma con un effetto dissolvenza, e possibile?
A proposito mi sapete consigliare un libro che mi dia una infarinata di programmazione possibilmente in italiano?
Logged

Gio

Carunchio Chieti ITALY
Offline Offline
Full Member
***
Karma: 2
Posts: 202
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per il libro c'è quello di Massimo banzi!!Arduino la guida ufficiale smiley-wink
http://www.libridigitali.com/ebook/Arduino lo trovi anche in libreria smiley-wink
« Last Edit: April 04, 2011, 04:45:10 pm by Marco Ritrivi » Logged

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Marco, ma per il "Loop" nessuno mi può aiutarre?
Logged

Gio

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Finalmente ci sono riuscito, ho  scritto questo listato e funziona,

 
Code:
/* listato per l'accensione e spegnimento  di 6 led
in sequenza e con dissolvenza . */




int value = 0;  //Variabile per tenere l'attuale valore


#define num_pins 5  //Numero dei pins

int pins[] = {
  3, 5, 6, 9, 10, 11, };  //Array dei pin
int led0 =  3;   //led 0 collegato al pin 3
int led1 =  5;   //led 1 collegato al pin 5
int led2 =  6;   //led 2 collegato al pin 6
int led3 =  9;   //led 3 collegato al pin 9
int led4 =  10;  //led 4 collegato al pin 10
int led5 =  11;  //led 5 collegato al pin 11


void setup()
{
}
void loop()
{
  
   //Accensione in dissolvenza led 0
  for (value = 0; value <= 255; value+=5)
  {
    analogWrite(led0, value);  //Setto il valore sul led da 0 a 255
    delay(40);
  }
   // Spegnimento in dissolvenza led 0
     for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led0, value);
    delay(30);
  }  
  
  
  //Accensione in dissolvenza led 1
  for (value = 0; value <= 255; value+=5)
  {
    analogWrite(led1, value);  //Setto il valore sul led da 0 a 255
    delay(30);
  }



  //Accensione in dissolvenza led 2
  for (value = 0; value <= 255; value+=5)
  {
    analogWrite(led2, value);  //Setto il valore sul led da 0 a 255
    delay(30);
  }



  //Accensione in dissolvenza led 3
  for (value = 0; value <= 255; value+=5)
  {
    analogWrite(led3, value);  //Setto il valore sul led da 0 a 255
    delay(30);
  }



  //Accensione in dissolvenza led 4
  for (value = 0; value <= 255; value+=5)
  {
    analogWrite(led4, value);  //Setto il valore sul led da 0 a 255
    delay(30);
  }



  //Accensione in dissolvenza led 5
  for (value = 0; value <= 255; value+=5)
  {
    analogWrite(led5, value);  //Setto il valore sul led da 0 a 255
    delay(30);
  }

  // Spegnimento in dissolvenza led 1
  for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led1, value);
    delay(30);
  }  
  // Spegnimento in dissolvenza led 2
  for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led2, value);
    delay(30);
  }  

  // Spegnimento in dissolvenza led 3
  for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led3, value);
    delay(30);
  }  

  // Spegnimento in dissolvenza led 4
  for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led4, value);
    delay(30);
  }  

  // Spegnimento in dissolvenza led 5
  for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led5, value);
    delay(30);
  }  
}


mi serve solo un aiuto, se io volessi accendee il "led 0" solo ogni 3 cicli di accensione dei led 1,2,3,4,5, come potrei fare?
Logged

Gio

roma, italy
Offline Offline
Full Member
***
Karma: 0
Posts: 239
dreamer
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

qui entra in gioco il modo in cui programmi, lo stile.
vedrai che con la pratica il tuo codice sarà sempre migliore.

ti posso consigliare per
Code:
for (value = 0; value <= 255; value+=5)
  {
    analogWrite([b]led0[/b], value);  //Setto il valore sul led da 0 a 255
    delay(40);
  }
   // Spegnimento in dissolvenza led 0
     for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led0, value);
    delay(30);
  }  
ciclati anche l'array pins, e il tuo programma diventa due cicli for annidati
PEr la tua domanda finale:
 fai un controllo con un if, quando
Code:
pin[i]==3  //(il led0)
e
una variabile , che incrementi a ogni passaggio e che resetti tipo ogni 10 ,
coincide con 3 allora accendi

per leggere la grandezza dinamica dell'array ho trovato un trucchetto
Code:
// nelle definizioni (prima di setup) metti
#define asize(x)  (sizeof (x) / sizeof (x[0]))
//e nel loop
asize(pins)

buona ottimizzazione
« Last Edit: April 05, 2011, 07:27:33 am by stefanosky » Logged

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa ma io di programmazione ne capisco ancora molto poco, sono alle prime armi, potresti per cortesia essere un pò più chiaro.
Logged

Gio

roma, italy
Offline Offline
Full Member
***
Karma: 0
Posts: 239
dreamer
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
allora per iniziare studiati bene la reference
http://arduino.cc/en/Reference/HomePage

per il for
Code:
for (value = 0; value <= 255; value+=5)
  {
    analogWrite([b]led0[/b], value);  //Setto il valore sul led da 0 a 255
    delay(40);
  }
   // Spegnimento in dissolvenza led 0
     for (value = 255; value >= 0; value-=5)
  {
    analogWrite(led0, value);
    delay(30);
  }  

come
Code:
for (value = 0; value <= 255; value+=5)
cicla da 0 fino a 255 con passo 5 modificando la variabile value
puoi ciclare (scorrere) un array
Code:
for (i= 0; i< asize(pins); i++)
NB:i++ (aumenta di 1 il valore della variabile, è la contrazione di i = i+1)
e usi la variabile i per chiamare il valore dentro la posizione i-esima dell'array
con
Code:
int ledOk= pins[i];

quindi
Code:
int numeroCiclo = 1;
 
--------loop-----------
for (scorri l'array){
     int ledOk= pins[i];
     if(ledOk==3){
     if(numeroCiclo==3){
       lanciaLed(ledOk);
     }
   }
   else{
     lanciaLed(ledOk);
   }
    
if(i==(asize(pins)-1)){numeroCiclo++;} //-1 perchè da la grandezza dell'array, non gli indici
if(numeroCiclo==10){numeroCiclo=1;} // ho messo 10 , decidi quando azzerare i giri
}
//-------fine loop
void lanciaLed(int led){
       int sali=1;
       int k=0;
     for (value = 0; value <= 510; value+=5){
         if(value==255){sali=0;}
         if(value==0){sali=1;}
         analogWrite(led, k);
         delay(30);
         if(sali==1){k++;}
         else{k--;}
     }
}


ho messo una funzione dato che dovevo ripetere due volte il codice.
questo è il modo piu' compatto che ho fatto velocemente, magari si possono aggiustare gli if, per non far fare troppi controlli.
il sali e scendi, lo avevo visto da qualche parte, ora non mi ricordo , l'ho ricostruito al volo
ciao
Stefanosky
« Last Edit: April 05, 2011, 09:13:39 am by stefanosky » Logged

Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie adesso lo studio un pò, comunque ho una leggera infarinata, reminescenze del vecchio basic commodore, ho notato che il c in alcuni casi è molto simile.
Logged

Gio

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

..., reminescenze del vecchio basic commodore,....

Uhm.... un altro Commodoriano... quindi uno di quegli eletti che possedettero un computer ad 8 bit degli anni '80! Benvenuto nel club!  smiley-grin
Logged


Noto (SR)
Offline Offline
Newbie
*
Karma: 0
Posts: 33
ARDUINO UNO
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per il benvenuto, anche se questo fa scoprire la mia non giovanissima età. Comunque non è che ero un programmatore provetto, più che altro mi destreggiavo a copiare i listati da riviste.
Logged

Gio

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

Beh, io sono del 72, non so te  smiley-sweat

Cmq io ero un po' più avanzato rispetto al semplice BASIC. Programmavo anche in assembly.
Ah, avevo un C16.
Logged


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

Aaaah, il fratello piccolo del Plus4, piccolo e nero come Calimero, e come il mio Sinclair Spectrum  smiley-mr-green, quante discussioni, alla fine comprai il "portatile" Commodore Executive (un trolley senza ruote con floppy integrato e monitor da 5" a colori) per giocare a calcio, altro che wii! smiley-cry
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

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

Con quel c*sso di computer (per i miei amici Sessaquantrattisti) ci ho fatto veramente di tutto!
Ci feci anche un antifurto collegando un contatto dry-reed normalmente chiuso alla porta di camera con una calamita sullo stipite, 2 righe di assembly infilate nell'interupt per cambiarmi il valore di una cella di memoria, ed un piccolo programmino che, tramite l'altoparlante della TV, riproduceva una sirena se la porta veniva aperta!

In pratica ho fatto il primo Arduino compatibile della storia!!!!  smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol
Di 50x20cm ah ah ah ah  smiley-grin smiley-grin smiley-grin
Logged


roma, italy
Offline Offline
Full Member
***
Karma: 0
Posts: 239
dreamer
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

grandi, io avevo lo zx e ci ricopiavo gli empi di un manuale a 10 anni, in inglese tecnico degli anni 80, ero arrivato a disegnare geometrie. smiley giobe facci sapere se hai capito
Logged

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

Eravamo veramente avanti, per la nostra età e per la documentazione che si trovava in Italia!
Io l'assembly lo imparai SENZA manuali, soltanto usando il monitor esadecimale interno e disassemblando la memoria del PC, analizzando il codice dei giochini scritti in linguaggio macchina ecc.... Solo in seguito arrivò un manuale per utenti esperti in cui era riportata (in italiano) un po' di documentazione sulle locazioni di memoria fondamentali del C16, ed allora feci la "svolta"  smiley-grin
Logged


Pages: [1] 2   Go Up
Jump to: