effetti luminosi a led

salve ho acquistato arduino da poco ,ho gia fatto dei programmini per effetti luce,ma vorrei vorrei metterli tutti in uno sketch e magari premendo il pulsante avandare avanti al gioco sucessivo. Qualcuno sa come si puo fare....grazie mille :slight_smile:

http://www.arduino.cc/en/Reference/SwitchCase

Dovrebbe farti venire qualche idea :smiley: :smiley: :smiley:

metti in ogni "case" un effetto luce, la variabile var la incrementi con un pulsante (es: da 0 a 5, una volta raggiunto 5 azzeri così puoi ripartire da capo)...a te il divertimento

Qui sul forum ho messo qualcosa di simile per un menu LCD, potrebbe esserti di aiuto:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241310950/32#32

questo è il primo gioco come potrei fare ci sto provando ma nn ci riesco

int ledPin = 13; // LED connesso al pin digitale 13
int ledPin1 = 12; // LED connesso al pin digitale 12
int ledPin2 = 11; // LED connesso al pin digitale 11
int ledPin3 = 10; // LED connesso al pin digitale 10
int ledPin4 = 9; // LED connesso al pin digitale 9
int ledPin5 = 8; // LED connesso al pin digitale 8

// The setup() method runs once, when the sketch starts

void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()
{
digitalWrite(ledPin, HIGH); // set the LED on
delay(100); // wait for a second

digitalWrite(ledPin, LOW); // set the LED off
delay(000); // wait for a second
digitalWrite(ledPin1, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin1, LOW); // set the LED off
delay(00); // wait for a second
digitalWrite(ledPin2, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin2, LOW); // set the LED off
delay(00); // wait for a second
digitalWrite(ledPin3, HIGH); // set the LED on
delay(100); // wait for a second

digitalWrite(ledPin3, LOW); // set the LED off
delay(000); // wait for a second
digitalWrite(ledPin4, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin4, LOW); // set the LED off
delay(00); // wait for a second
digitalWrite(ledPin5, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin5, LOW); // set the LED off // wait for a second
delay(000); // wait for a second
digitalWrite(ledPin4, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin4, LOW); // set the LED off
digitalWrite(ledPin3, HIGH); // set the LED on
delay(100); // wait for a second

digitalWrite(ledPin3, LOW); // set the LED off
delay(000);
digitalWrite(ledPin2, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin2, LOW); // set the LED off
delay(00);
digitalWrite(ledPin1, HIGH); // set the LED on
delay(100); // wait for a
digitalWrite(ledPin1, LOW); // set the LED off
delay(00);

}

e questo è il secondo

int ledPin = 13; // LED connesso al pin digitale 13
int ledPin1 = 12; // LED connesso al pin digitale 12
int ledPin2 = 11; // LED connesso al pin digitale 11
int ledPin3 = 10; // LED connesso al pin digitale 10
int ledPin4 = 9; // LED connesso al pin digitale 9
int ledPin5 = 8; // LED connesso al pin digitale 8

// The setup() method runs once, when the sketch starts

void setup() {
// initialize the digital pin as an output:
pinMode(ledPin, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
}

// the loop() method runs over and over again,
// as long as the Arduino has power

void loop()
{
digitalWrite(ledPin,HIGH); // set the LED on
delay(0); // wait for a second

digitalWrite(ledPin1,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin, LOW); // set the LED off
delay(00); // wait for a second

digitalWrite(ledPin1, LOW); // set the LED off
delay(100); // wait for a second

digitalWrite(ledPin,HIGH); // set the LED on
delay(00); // wait for a second

digitalWrite(ledPin1,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin, LOW); // set the LED off
delay(000); // wait for a second

digitalWrite(ledPin1, LOW); // set the LED off
delay(1000); // wait for a second

digitalWrite(ledPin2,HIGH); // set the LED on
delay(0); // wait for a second

digitalWrite(ledPin3,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin2, LOW); // set the LED off
delay(00); // wait for a second

digitalWrite(ledPin3, LOW); // set the LED off
delay(100); // wait for a second

digitalWrite(ledPin2,HIGH); // set the LED on
delay(00); // wait for a second

digitalWrite(ledPin3,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin2, LOW); // set the LED off
delay(000); // wait for a second

digitalWrite(ledPin3, LOW); // set the LED off
delay(1000); // wait for a second

digitalWrite(ledPin4,HIGH); // set the LED on
delay(0); // wait for a second

digitalWrite(ledPin5,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin4, LOW); // set the LED off
delay(00); // wait for a second

digitalWrite(ledPin5, LOW); // set the LED off
delay(100); // wait for a second

digitalWrite(ledPin4,HIGH); // set the LED on
delay(00); // wait for a second

digitalWrite(ledPin5,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin4, LOW); // set the LED off
delay(000); // wait for a second

digitalWrite(ledPin5, LOW); // set the LED off
delay(1000); // wait for a second

digitalWrite(ledPin2,HIGH); // set the LED on
delay(0); // wait for a second

digitalWrite(ledPin3,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin2, LOW); // set the LED off
delay(00); // wait for a second

digitalWrite(ledPin3, LOW); // set the LED off
delay(100); // wait for a second

digitalWrite(ledPin2,HIGH); // set the LED on
delay(00); // wait for a second

digitalWrite(ledPin3,HIGH); // set the LED on
delay(25); // wait for a second

digitalWrite(ledPin2, LOW); // set the LED off
delay(000); // wait for a second

digitalWrite(ledPin3, LOW); // set the LED off
delay(1000); // wait for a second

}

come potrei fare a selezionarli tramite un pulsante magari nell'ingresso 2?
:o

I link postati da federico fanno al caso tuo.. ci hai dato un occhio?

allora magari domani con piu pazienza riprovo e cerco di capire cosa sto facendo...la forza di arduino siete voi :wink:

Altro consiglio: Per far si che puoi "cambiare funzione" appena premi il pulsante, Arduino deve sempre in grado di controllare lo stato del pulsante così da incrementare la variabile appena viene premuto...questo per dirti che se vuoi costruriti una cosa con cui interagisci non devi usare troppi delay oppure non devono essere troppo lunghi perchè è come se mettessero in pausa il microcontrollore e ingressi e uscite durante il delay non sono più manipolabili, quindi significa che premi il pulsante e non succede niente.

Per fortuna a risolvere queste situazioni c'è la funzione millis() che è come la manna dal cielo! (anche se prima o poi mette in difficoltà chiunque!!)

A sbatterci la testa su ste cose credo che ci siamo passati tutti (io ogni tanto ce la sbatto ancora ;D), purtroppo i microcontrollori ti obbligano a pensarla come vogliono loro :smiley: anche se gli sviluppatori di Arduino hanno fatto un bel lavoro per rendere il tutto più umano :stuck_out_tongue:

@federico
no si possono usare gli interrupt per risolvere il problema di cui parli?

@Sten: vuole essere una critica costruttiva la mia ma, dovresti provare anche ad utilizzare i cicli per i tuoi test.

Ad esempio guarda qui:

cavolo bel consiglio.....ogni giorno si imparano cose nuove scusate ma ho arduino solo da venerdi.grazie mille per i consigli :sunglasses:

@t30: eh beh, gli interrupt possono interrompere i delay, quindi sarebbe proprio il caso adatto, però sono solo due i pin con gli interrupt hardware, però per mia esperienza è più comprensibile millis() di un interrupt e forse è considerato un pochino più avanzato il discorso degli interrupt...in realtà come in molte problemi c'è più di una soluzione giusta...

Ciao a tutti, sono nuovo del "settore" ma ho notato un piccolo errore ripetuto varie volte:
"delay(100); // wait for a second"

Se vuoi un ritardo di un secondo deve essere delay(1000); perché sono millisecondi.
E poi sarebbe meglio non usare il delay ma la funzione "millis" (con la quale mi sto scontrando da qualche tempo), perchè durante il delay è come se tu spegnessi Arduino e lui in quel tempo non fa assolutamente nulla se non tenere acceso il led...

Ciao