Problema con mas de dos Leds y un Pulsador

Lo primero presentarme, y gracias por adelantado a todo el que pueda ayudarme, llevo varios dias intentando esta mini prueba para luego pasar a algo mejor pero antes debo hacer funcionar esto.

La idea es que con un solo pulsador ir cambiando de led y apagar el resto, lo consigo con dos van cambiando entre ellos pero no consigo pasar al tercero y que despues de este pase al primero otra vez al pulsar de nuevo, el codigo lo tengo en el otro Pc, llevo ya como 3 o 4 diferentes y no me llegan a funcionar, e buscado en varios sitios pero no encuentro nada, creo que lo que hago mas es guardar mas de dos pulsaciones en el boton... alguna idea?

Parece tarea escolar.

Lee las Normas del foro y postea tu código usando etiquetas con lo hecho hasta ahora.

surbyte:
Parece tarea escolar.

Lee las Normas del foro y postea tu código usando etiquetas con lo hecho hasta ahora.

Te aseguro que no por que no voy al colegio ya xD, simplemente estoy comenzando en el arduino y necesito conseguir eso para luego mas adelante aplicar un rele y temporizadores pero primero necesito que funciona con los leds y con un solo pulsador

Ok. te creo pero te puse

postea tu código usando etiquetas con lo hecho hasta ahora.

y no lo has hecho aún.

surbyte:
Ok. te creo pero te puse

y no lo has hecho aún.

Vale perdona pero no e tenido tiempo hasta ahora, e mezclado tanto mi codigo ya que tengo muchas cosas en comentarios por que eran pruebas que no me han funcionado te voy a mostrar como lo tengo ahora y solo me funciona con dos no consigo pasar al tercero.

const int LED =13;
const int LED2 =12;
const int LED3 =11;
const int BOTON = 6;
int val = 0; 
int state = 0;
int old_val = 0;
void setup(){ 
pinMode(LED,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(BOTON,INPUT);
}
void loop() {       
val= digitalRead(BOTON);

if ((val == HIGH) && (old_val == LOW)){
state=1-state;
delay(10);
}

old_val = val;
//for (int state=0; state<3; state++)
//{
   /*if ((val == HIGH) && (old_val == LOW)){
   state=1-state;
   delay(10);
   }*/
if (state == 0)
{
digitalWrite(LED, HIGH);
digitalWrite(LED2, LOW); 
digitalWrite(LED3, LOW); 
}
//old_val = val;
if (state == 1)
{
digitalWrite(LED, LOW);
digitalWrite(LED2, HIGH); 
digitalWrite(LED3, LOW); 
}
if (state == 2)
{
digitalWrite(LED, LOW);
digitalWrite(LED2, LOW); 
digitalWrite(LED3, HIGH);  
}
// }
}

Bueno el problema esta en esta parte

if ((val == HIGH) && (old_val == LOW)){
state=1-state;
delay(10);
}

solo estás considerando dos estados 0 o 1 no más entonces solo se cumple las dos condiciones, debes al state ir sumando las veces que se a pulsado, entonces si pulsas una vez se enciende el primer led, al segundo pulso el segundo led etc, y ahora para que se repita en la cuarta pulsación deben apagarse todos los leds y reiniciar el valor state, e hecho unos cambios a tu código reviso y las cosas que no entiendas postea aqui tus dudas, no olvides utilizar la resistencia pull down para tu botón .

/*
Name:		Pruebas Varias
Created:	17/03/2018 11:38:02
Author:	Bryan
*/

const byte
LED = 13,
LED2 = 12,
LED3 = 11,
BOTON = 6;
int
state = 0;
bool
estadoAnterior = 0,
estadoActual;
unsigned int
contador = 0;
void setup() {
	pinMode(LED, OUTPUT);
	pinMode(LED2, OUTPUT);
	pinMode(LED3, OUTPUT);
	pinMode(BOTON, INPUT);
}
boolean haCambiado(int p) {
	estadoActual = digitalRead(p);
	if (estadoAnterior != estadoActual)  // ha habido un cambio de estado
	{
		contador++;                          // cuenta los cambios de estado
		int validarPar = contador % 2;       // solo queremos los cambios pares
		if (validarPar != 1)                 // si el cambio es par 
		{
			estadoAnterior = estadoActual;
			return true;
		}
		else {
			estadoAnterior = estadoActual;
			return false;
		}

	}
	else return false;
}
void loop() {
	if (haCambiado(BOTON)) {
		state++;
	}
	switch (state)
	{
	case 1:
		digitalWrite(LED, HIGH);
		digitalWrite(LED2, LOW);
		digitalWrite(LED3, LOW);
		break;
	case 2:
		digitalWrite(LED, LOW);
		digitalWrite(LED2, HIGH);
		digitalWrite(LED3, LOW);
		break;
	case 3:
		digitalWrite(LED, LOW);
		digitalWrite(LED2, LOW);
		digitalWrite(LED3, HIGH);
		break;
	case 4:
		digitalWrite(LED, LOW);
		digitalWrite(LED2, LOW);
		digitalWrite(LED3, LOW);
		state = 0;
		break;
	}
}

Moderador: No repitas lo que se lee arriba

Muchas gracias por la ayuda ahora probare, e puesto una resistencia de 10k, pero por que tiene que ser pull down?

PD: Ahora si quiero añadir para mas leds simplemente tendre que añadir mas estados me imagino no?

Bueno yo me imagine que conectastes un botón a 5v y por lo tanto debe ser pull down, como no especificastes como son tus conexiones, pero puedes conectarlo de las 2 formas, eso ya dependerá de como tienes tus conexiones

scorpone:
PD: Ahora si quiero añadir para mas leds simplemente tendre que añadir mas estados me imagino no?

Si tienes que añadir más estados y cambiar el estado en el cual reinicia y apaga todos los leds, o puedes ingeniarte algún código que vaya apagando el led anterior y encienda el siguiente sin usar tanto estado, eso ya dependera de ti.

Swift:
Bueno yo me imagine que conectastes un botón a 5v y por lo tanto debe ser pull down, como no especificastes como son tus conexiones, pero puedes conectarlo de las 2 formas, eso ya dependerá de como tienes tus conexiones

Si tienes que añadir más estados y cambiar el estado en el cual reinicia y apaga todos los leds, o puedes ingeniarte algún código que vaya apagando el led anterior y encienda el siguiente sin usar tanto estado, eso ya dependera de ti.

Tengo puesto otros pulsadores con resistencias de 220 y funciona igual, al principio iba a ser cada led con su pulsador cosa que era sencillo pero al final tiene que ser con uno solo, mañana seguire haciendo pruebas gracias por la ayuda