Ayuda a novato (luces tipo KIt con pulsador)

Hola a todos, llevo muy poco tiempo en este mundo y estoy leyendo muuucho y practicando…el caso es que me he atascado con algo que seguro es una chorrado pero no le saco punta…

De los ejemplos de muestra (miles que hay por la red…) me puse con el de leds tipo “KIT”, el caso es que cuando empece con los pulsadores me propuse activarlo y desactivarlo con un pulsador y ahí es donde me atasco, no consigo encontrar la manera de que una vez metido en el bucle me saque de él…os paso el codigo ultimo (digo ultimo porque he hecho mil modificaciones intentando diferentes caminos…).(lo del puerto serial esta para ver yo como variaban las variables…).Gracias de antemano por la ayuda…

"
// Damos nombre a los pin de los led
int led1 = 3;
int led2 = 4;
int led3 = 5;
byte i=0; // esta variable la emplearemos para la alternancia de leds
// damos nombre al pulsador
int pulsador = 2;

// y ahora la variable del pulsador

int lecActpul = 0; // variable que leera la lectura del pulsador
int lecUltpul = 0; // variable que guarda la lectura anterior
int encendido = 0;// variable que utilizaremos para endendido u apagado

// the setup routine runs once when you press reset:

void setup() {
// Configuracion de inicio, los led como salida.
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);

// el pulsador como entrada
pinMode(pulsador, INPUT);

// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

}

// the loop routine runs over and over again forever:
void loop() {

// leer el estado de los botones
lecActpul = digitalRead(pulsador);

// print out the state of the button:
Serial.print(lecUltpul);Serial.println(encendido %2);
// establecemos la condicion para el encendido, que el valor sea 1 (o sea HIGH )

if (lecActpul != lecUltpul && lecActpul == HIGH){

encendido = encendido++;

while (encendido %2 != 0)
{
for (i=3; i<=5; i++)
{ digitalWrite(i,HIGH);
delay (100);
digitalWrite(i, LOW);
}}

}
lecUltpul = lecActpul;
}"

No explicas que quieres hacer exactamente con el pulsador y los 3 LEDs

Jopapa www.jopapa.me

Jopapa: No explicas que quieres hacer exactamente con el pulsador y los 3 LEDs

Jopapa www.jopapa.me

Tienes razon!! Mil perdones..quiero que con una pulsacion comience la alternancia de leds y con otra se apague...

http://lmgtfy.com/?q=luces+tipo+coche+fantastico+arduino

Heke: http://lmgtfy.com/?q=luces+tipo+coche+fantastico+arduino

A ver, soy novato en Arduino compañero....pero te aseguro que google...en español e ingles ,lo tengo ya rascaito....la diferencia es que todos los proyectos de luces tipo "KIT" que he encontrado son sin pulsadores...y los ejemplos de pulsadores son con uno o varios leds que encienden o apagan...pero no con una alternancia...

Mi problema basicamente es que no se como hacer que se ejecute el bucle cuando pulso 1 vez y para de ejecutarse con la siguiente pulsacion....

gracias de todas formas ;)

http://lmgtfy.com/?q=cambio+estado+pulsador+arduino

:grin:

Es facil y ademas estaba en ardumania por ej. http://www.ardumania.es/cambio-de-estado-de-un-pulsador/

Un saludo.

Heke: http://lmgtfy.com/?q=cambio+estado+pulsador+arduino

:grin:

Es facil y ademas estaba en ardumania por ej. http://www.ardumania.es/cambio-de-estado-de-un-pulsador/

Un saludo.

Sin animo de ofender, revisas antes de enlazar? pues como veras en mi codigo...a lo que me enlazas ya esta hecho.. el problema es que, o no me ejecuta el bucle continamente,o o no sale de él (ya depende si utilizado for, while, switch...)...

Con el siguiente codigo cuando pulso realiza una sola vez la alternancia (es decir se encienden una vez cada led) cuando lo que voy buscando es que si pulso una vez el ciclo de alternancia continue hasta que vuelva a pulsar…)

"// Damos nombre a los pin de los led
int led1 = 3;
int led2 = 4;
int led3 = 5;
byte i=0; // esta variable la emplearemos para la alternancia de leds
// damos nombre al pulsador
int pulsador = 2;

// y ahora la variable del pulsador

int lecActpul = 0; // variable que leera la lectura del pulsador
int lecUltpul = 0; // variable que guarda la lectura anterior
int encendido = 0;// variable que utilizaremos para endendido u apagado

// the setup routine runs once when you press reset:

void setup() {
// Configuracion de inicio, los led como salida.
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);

// el pulsador como entrada
pinMode(pulsador, INPUT);

// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

}

// the loop routine runs over and over again forever:
void loop() {

// leer el estado de los botones
lecActpul = digitalRead(pulsador);

// print out the state of the button:

// establecemos la condicion para el encendido, que el valor sea 1 (o sea HIGH )

if (lecActpul != lecUltpul && lecActpul == HIGH){

encendido = encendido++;
Serial.print(lecUltpul);Serial.println(encendido);
while (encendido %2 != 0)
{
for (i=3; i<=5; i++)
{ digitalWrite(i,HIGH);
delay (100);
compruebapulsador();
digitalWrite(i, LOW);
}}

}
lecUltpul = lecActpul;
}
void compruebapulsador(){

if (digitalRead(2)==HIGH)
{encendido = 0;}
}"

Prueba esto

const int buttonPin = 8; // the number of the pushbutton pin const int ledPin13 = 13; // the number of the LED pin const int ledPin12 = 12; // the number of the LED pin const int ledPin11 = 11; // the number of the LED pin

boolean Flag = false;

void setup() {

pinMode(ledPin13, OUTPUT); pinMode(ledPin12, OUTPUT); pinMode(ledPin11, OUTPUT);

pinMode(buttonPin, INPUT); }

void loop(){

if (digitalRead(buttonPin)){ delay(150); Flag=!Flag; } if (Flag) { // turn LED on: digitalWrite(ledPin13, HIGH); delay(100); digitalWrite(ledPin13, LOW); digitalWrite(ledPin12, HIGH); delay(100); digitalWrite(ledPin12, LOW); digitalWrite(ledPin11, HIGH); delay(100); digitalWrite(ledPin11, LOW); } else { // turn LED off: digitalWrite(ledPin13, LOW); digitalWrite(ledPin12, LOW); digitalWrite(ledPin11, LOW); } }

No esta optimizado porque tendría que ser sin delay(), pero como son solo de 100ms el botón funciona razonablemente bien.

Jopapa www.jopapa.me

Jopapa:
Prueba esto

const int buttonPin = 8; // the number of the pushbutton pin
const int ledPin13 = 13; // the number of the LED pin
const int ledPin12 = 12; // the number of the LED pin
const int ledPin11 = 11; // the number of the LED pin

boolean Flag = false;

void setup() {

pinMode(ledPin13, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin11, OUTPUT);

pinMode(buttonPin, INPUT);
}

void loop(){

if (digitalRead(buttonPin)){
delay(150);
Flag=!Flag;
}
if (Flag) {
// turn LED on:
digitalWrite(ledPin13, HIGH); delay(100); digitalWrite(ledPin13, LOW);
digitalWrite(ledPin12, HIGH); delay(100); digitalWrite(ledPin12, LOW);
digitalWrite(ledPin11, HIGH); delay(100); digitalWrite(ledPin11, LOW);
}
else {
// turn LED off:
digitalWrite(ledPin13, LOW);
digitalWrite(ledPin12, LOW);
digitalWrite(ledPin11, LOW);
}
}

No esta optimizado porque tendría que ser sin delay(), pero como son solo de 100ms el botón funciona razonablemente bien.

Jopapa
www.jopapa.me

Mil gracias!! Este funciona, como tu dices se atasca en funcion del uso que le des al boton, pero por lo menos voy a analizar el codigo y a ver si soy capaz de depurarlo yo solito…de nuevo muchas gracias!!