Pages: [1]   Go Down
Author Topic: Dopo il test Blink, esperimento LED SUPERCAR  (Read 2949 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,

era da tempo che non smanettavo con l'elettronica ma per sbaglio mi sono imbattuto in questa fantastica scheda di nome arduino. l'ho comprata anche non avendo mai programmato nulla in vita mia (tranne il linguafggio ladder per plc  smiley-slim) e dopo il primo test Blink volevo realizzare quelle fantastiche luci sul cofano del fantastico k.i.t.t.
ho trovato uno screcth, ho montato la priastra e effetto bellissimo dei led a cascata.Non mi soddisfaceva appieno, perche i led andavao in una sola direzione senza tornare indietro e la mia sete d'invidia verso maichel knight cresceva sempre di più, così cho cercato di capire il codice, e per mia assoluta meraviglia sono riuscito a farlo andare avanti e indietro...propio come il telefilm.....grandissima soddisfazione.

scusate il prolisso incipit ma per me è stata una grande soddisfazione  smiley-grin

Dunque questo esperimento è ottimo per chi come me e a secco di programmazione e sgnoccola qualcosa con l'elettronica.




Uploaded with ImageShack.us

come vediamo dallo schema il GND della nostra Arduino collega tutti i lati negativi dei led (facilmente riconoscibili da un taglietto su un lato del led) mentre i lati positivi dei led sono collegati da una resistenza ed ognuno su una porta arduino, per questo esperimento useremo le porte che vanno dalla 13 alla 5.

di seguito il codice per fare il copia e incolla.

________________________________________________________________________________________________________

// dichiarazione delle variabili
int led_1 = 13;
int led_2 = 12;
int led_3 = 11;
int led_4 = 10;
int led_5 = 9;
int led_6 = 8;
int led_7 = 7;
int led_8 = 6;
int led_9 = 5;

// definizione di alcuni define per chiarire meglio la struttura
#define uscita  OUTPUT
#define ingresso  INPUT
#define s_1  HIGH
#define s_0  LOW
#define cycle 70

// impostazione delle porte come uscite
void setup (){
pinMode (led_1, uscita );
pinMode (led_2, uscita );
pinMode (led_3, uscita );
pinMode (led_4, uscita );
pinMode (led_5, uscita );
pinMode (led_6, uscita );
pinMode (led_7, uscita );
pinMode (led_8, uscita );
pinMode (led_9, uscita );
}
// programma che continua a ciclare
void loop (){

  // Erase all output ( spegni tutte le uscite)
    digitalWrite ( led_1, s_0 );
    digitalWrite ( led_2, s_0 );
    digitalWrite ( led_3, s_0 );
    digitalWrite ( led_4, s_0 );
    digitalWrite ( led_5, s_0 );
    digitalWrite ( led_6, s_0 );
    digitalWrite ( led_7, s_0 );
    digitalWrite ( led_8, s_0 );
    digitalWrite ( led_9, s_0 );   

 delay (1000); // waiting one second( Attendi 1 secondo)
 
 restart :    // dichiaro un punto a cui tornare finito l'esecuzione del programma
    digitalWrite ( led_1, s_1 );  // la logica è :
//     |                   |          |__________ accendila( s_1 perchè è stata dichiarata come HIGH, in caso di LOW avremmo
//     |                   |                                 trovato s_0
//     |                   |________________ LED 1
//     |__________________________ scrivi sull'uscita
 
 delay (cycle); // waiting 1/2 second
     digitalWrite ( led_2, s_1 );
    digitalWrite ( led_1, s_0 );
 
 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_3, s_1 );
    digitalWrite ( led_2, s_0 );

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_4, s_1 );
    digitalWrite ( led_3, s_0 );

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_5, s_1 );
    digitalWrite ( led_4, s_0 );
 
  delay (cycle); // waiting 1/2 second
    digitalWrite ( led_6, s_1 );
    digitalWrite ( led_5, s_0 );

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_7, s_1 );
    digitalWrite ( led_6, s_0 );

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_8, s_1 );
    digitalWrite ( led_7, s_0 );

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_9, s_1 );
    digitalWrite ( led_8, s_0 );
   
     delay (cycle); // waiting 1/2 second
    digitalWrite ( led_9, s_0 );
    digitalWrite ( led_8, s_1 );
   
 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_8, s_0 );
    digitalWrite ( led_7, s_1 );

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_7, s_0 );
    digitalWrite ( led_6, s_1 );

delay (cycle); // waiting 1/2 second
    digitalWrite ( led_6, s_0 );
    digitalWrite ( led_5, s_1 );

delay (cycle); // waiting 1/2 second
    digitalWrite ( led_5, s_0 );
    digitalWrite ( led_4, s_1 );
   
    delay (cycle); // waiting 1/2 second
    digitalWrite ( led_4, s_0 );
    digitalWrite ( led_3, s_1 );
   
   

 delay (cycle); // waiting 1/2 second
    digitalWrite ( led_3, s_0 );
    digitalWrite ( led_2, s_1 );

delay (cycle); // waiting 1/2 second
     digitalWrite ( led_2, s_0 );
   
 
 
   
   
   
   
// jump to restart ( torna al punto dichiarato in alto denominato restart
goto restart;

}

_____________________________________________________________________________________________________-

se qualcosa non è chiaro postate, altrimenti....BUON DIVERTIMENTO  smiley-mr-green
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10100
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

piccolo consiglio:
trasforma
Code:
int led_1 = 13;
int led_2 = 12;
int led_3 = 11;
int led_4 = 10;
int led_5 = 9;
int led_6 = 8;
int led_7 = 7;
int led_8 = 6;
int led_9 = 5;
in
Code:
int leds[]={12,11,10,9,8,7,6,5}
a questo punto magicamente puoi trasformare da:
Code:
pinMode (led_1, uscita );
pinMode (led_2, uscita );
pinMode (led_3, uscita );
pinMode (led_4, uscita );
pinMode (led_5, uscita );
pinMode (led_6, uscita );
pinMode (led_7, uscita );
pinMode (led_8, uscita );
pinMode (led_9, uscita );
a:
Code:
int i;
for (i=0; i<9; i++){
    pinMode (leds[i], uscita );
}
e stessa cosa per le digitalWrite.
kiss  smiley
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Viterbo
Offline Offline
Full Member
***
Karma: 0
Posts: 126
Non prendere la vita troppo sul serio. Tanto, comunque vada, non ne uscirai vivo.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se ti interessa io come primo progettino... ( modifica di uno Scooter ) ho fatto questo
Logged


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

Altro consiglio. Invece di fare 9 linee di massa, metti una massa unica su una delle piste esterne della breadboard e poi collega tutti i piedini negativi dei LED a quella pista. In questo modo eviti 8 ponticelli.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grazie per i consigli.....mamma mia che codice brutto hai postato lesto  smiley-slim
Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10100
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è sarcastico? bhè quando dovrei fare medie su 10 o più valori (facciamo 50) ne riparliamo  smiley-razz

il codice come averi fatto io sarebbe:
Code:
int leds[]={13,12,11,10,9,8,7,6,5}
int numeroPin=9;
void setup(){
    int i;
    for (i=0; i<numeroPin; i++){
        pinMode (leds[i], OUTPUT ); //setta come output digitale
        digitalWrite(leds[i], LOW); //spegne il led
    }
}

int contatoreLed=0;
void loop(){
    digitalWrite( leds[contatoreLed], HIGH); //accende il pin
    delay (500); // aspetta mezzo secondo (1 secondo = 1000 millisecondi)
    digitalWrite( leds[contatoreLed], LOW); //spegne il pin
   //le istruzioni seguenti sono così veloci ad eseguire (qualche microsecondo, 1/1.000.000 di secondo) che occhio umano non si accorge che ci sono led spenti
    contatoreLed++; //passa al prossimo pin
    if (contatoreLed >= numeroPin){ //se i pin sono finiti
      contatoreLed=0; //ricomincia dal primo pin
    }
}
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

certo che sono sarcastico  smiley-lol, dico che è brutto perchè capirlo è davvero complicato per me che non ho programmato nulla prima d'ora.  smiley
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20168
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Attenzione di non surriscaldare l' arduino. Ogni uscita sopporta 40mA ma in somma solo 200mA.
Ciao Uwe
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

anche con le resistenze potrebbe avere problemi?
Logged

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

Le resistenze servono per un far bruciare i led, non riducono il carico.
Logged


Pages: [1]   Go Up
Jump to: