Pages: [1]   Go Down
Author Topic: ROTAZIONE LED  (Read 542 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 42
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
ho disposto in cerchio 8 led e volevo far scorrere 2 led in rotazione continua, con il codice che vi posto ho dei problemi nel "legare" lo scorrimento nel punto finale con quello iniziale, potete darci un'occhiata?



Code:
int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9};
int count = 0;
int timer = 1000;

void setup(){
  for (count=0;count<8;count++) {
       pinMode(pinArray[count], OUTPUT);
  }
}

void loop() {
  for (count=0;count<8;count++) {
      digitalWrite(pinArray[count], HIGH);
      digitalWrite(pinArray[count]+1, HIGH);

           delay(timer);

      digitalWrite(pinArray[count], LOW);
      digitalWrite(pinArray[count]+1, LOW);
  }



}


Grazie!
Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10446
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

finito il for, devi aggiungere il caso speciale in cui su accende e spegne l'ultimo e il primo led, poi il loop si occupa del resto

Code:
pinArray[count]+1

sicuro di questo codice?!  smiley-grin
« Last Edit: September 19, 2013, 05:23:50 am by lesto » Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

Ciao,
ho provato come dici tu ma non mi funziona... smiley-confuse
conosci qualche codice alternativo che dia lo stesso risultato?
Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10446
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mi sa che non hai letto attentamente.

il primo pezzo, in cui suggerisco la soluzione, mi piacerebbe vedere cosa hai scritto.

il secondo pezzo, in cui ho fatto il commento di una tua riga di codice, vorrei sapere se e cosa hai capito che non va in quel pezzo di codice (il problema è SLEGATO al problema precedente)

Quote
conosci qualche codice alternativo che dia lo stesso risultato?
al volo direi usando un array circolare, eviteresti il for, e puoi ottimizzare l'accendomento spenimento del led successivo, se fai attenzione all'inizializzazione e all'eventuale fase di stop. Il codice non te lo do non perchè sono cattivo (bhe un poco sì  smiley-twist), ma queste sono le basi di programmazione, un piccolo problema di logica, e se non impari a sbatterci la testa e capire quello che scrivi posso darti tutto il codice che vuoi ma non lo saprai mai usare.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

Ciao,
questo inizio di  sketch puo' andare bene per array circolare?
Mi manca il codice che va' all'interno del void loop....  qualche suggerimento? smiley-sad-blue
Grazie per la santa pazienza


Code:
byte led [] = {2,3,4,5,6,7,8,9};
int ciclo1 []= {2,3};
int ciclo2 []= {3,4};
int ciclo3 []= {4,5};
int ciclo4 []= {5,6};
int ciclo5 []= {6,7};
int ciclo6 []= {7,8};
int ciclo7 []= {8,9};
int ciclo8 []= {9,2};




int Count = 8;
int SPEED = 1000;


void setup () {
  for (int Pin = 0; Pin < Count; Pin++) {
    pinMode (led [Pin],OUTPUT);

  }   
}

void loop () {


}
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4618
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@lesto, forse un array circolare è tecnica un pò complicata per @imho

@imho   con il primo codice che hai postato non sei molto distante dalla soluzione.
Certo quel codice può essere migliorato, esempio evitando il for, ma visto che la prima versione c'eri quasi, rimarrei su quella e ad ottimizzare ci penserei poi.

Con il primo codice punti sempre 2 celle dell'array e questo, come poi hai anche evidenziato tu, dà un problema.
Quando sei con count=7 (cioè all'ultima cella) allora usi ANCORA count+1 per andare alla cella successiva (come ti ha detto prima @lesto). 
Che non c'e' !!! (ricorda che il linguaggio C/C++ non controlla se vai a leggere o scrivere oltre l'ultimo elemento di un array)

C'e' un caso speciale, quando count=7, devi accendere il secondo led NON in base a count+1 ma ...
« Last Edit: September 19, 2013, 09:16:13 am by nid69ita » Logged

my name is IGOR, not AIGOR

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10446
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
@lesto, forse un array circolare è tecnica un pò complicata per @imho
mai detto che fosse più facile, in realtà io volevo spingerlo a correggere il suo codice... (e comunque è più facile)

Quote
Quando sei con count=7 cioè all'ultima cella allora usi ancora count+1 per andare alla cella successiva. Che non c'e' !!!
questa mi è sfuggita

Quote
questo inizio di  sketch puo' andare bene per array circolare?
no, sei completamente fuori strada, ad occhio stai creando una macchina a stati.. anche questa è una soluzione!
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

Per fare una cosa semplice, basta usare 2 indici, uno che punta alla posizione del 1° led ed uno che punta alla posizione del 2°.

Code:
//situazione di partenza
led1 = 0
led2 = 1

//ciclo
accendo i 2 led
incremento led2
controllo che led2 non sia andato oltre l'ultima posizione: in caso affermativo, riporto a zero
incremento led1
controllo che led1 non sia andato oltre l'ultima posizione: in caso affermativo, riporto a zero
ripeto
Logged


0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10446
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

questo è un array circolare smiley (a doppio indice)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

Ma è più facile da gestire così che con un ciclo for.
Inoltre con lo pseudo codice la traduzione in linguaggio Arduino è semplificata.
Logged


0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10446
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

approvo, in oltre la "distanza" tra i due indici indica quanti led resteranno accesi contemporanemaente. Nel tuo caso solo uno (ma lasciamo che il ragazzo se la cavi, direi che ne ha abbastanza sotto il sole.. anche se avrei preferito proseguire sulla sua soluzione)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

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

Infatti, con 2 indici può accendere ben più di una coppia di led.
Logged


Pages: [1]   Go Up
Jump to: