Pages: [1]   Go Down
Author Topic: ROTAZIONE LED  (Read 414 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
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

my Arduino code: https://github.com/lestofante/arduinoSketch
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
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

my Arduino code: https://github.com/lestofante/arduinoSketch
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)
Online Online
Faraday Member
**
Karma: 57
Posts: 3527
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
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
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
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
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
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
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

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
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: