Led controlado por um botão.

Olá, eu gostaria de um código onde se eu aperto um butão um led acende, continuando acesso.
Ai eu aperto denovo e ele apaga, já vi algo do tipo na internet mas ninguem não estou achando dinovo.

Não, esse código ai não é oque eu quero, nesse dai o botão deve ficar pressionado para o led ficar ligado.
Eu quero o seguinte, aperto o butao o led fica ligado, e aperto novamente e o led desliga.

if (botao == ON && LED == APAGADO) {
    LED = LIGADO; 
}
if (botao == ON && LED == LIGADO) {
    LED = APAGADO; 
}

A lógica é esta. Convém lembrar que deves fazer um debounce ao botão.

já li algo sobre debouncing mas não entendi muito bem, poderia explicar melhor sobre isto?

Isso é o que procura

//OK Amigo vou postar um codigo aki ,,, espero que te ajude..
#define led 13 // Definimos o pino do led no 13
#define botao 2 // definimos o botao no pino 2

long UltimoTempo = 0; // Pega o Ultimo tempo apertado do Botao
int EstadoDoBotao = LOW; // Pega o Ultimo estado do Botao
int filtro = 300 ; // Filtra o ruido do botao 300 millseconds voce poder mudar
int pegaValorDoBotao =LOW; // Set o valor Atual do botao como desligado

void setup() {
pinMode (led,OUTPUT); // Set o led para SAIDA
pinMode (botao,INPUT); // Set o botao como ENTRADA

}

void loop() {
pegaValorDoBotao = digitalRead(botao); // Pega o valor atual do botao

if (pegaValorDoBotao == HIGH && (millis() - UltimoTempo) > filtro) {
/* Aki esta o pulo do gato
Verifico se vc apertou o botao , e verifico na mesma condicao se
millis() = cronometro interno do arduino - o Ultimoperiodo for maior que o ruido esta condicao vai ser sempre verdadeira

*/
if (EstadoDoBotao == HIGH) {
EstadoDoBotao = LOW;
}else {
EstadoDoBotao = HIGH;
}
UltimoTempo = millis();
}

digitalWrite(led,EstadoDoBotao);
pegaValorDoBotao = digitalRead(botao); // Pega o valor atual do botao
}

Eis aqui um vídeo com os 2 códigos. 1 com led acendendo e apagando enquanto o botão está ou não pressionado. e o outro código que é o que faz o led permanecer aceso até a próxima vez que clicar e soltar o botão.

poderia alteerar para que o led ficasse aceso com um pulso e so apagasse se acionasse outro pulso em outro botao?

araujobrz:
//OK Amigo vou postar um codigo aki ,,, espero que te ajude..
#define led 13 // Definimos o pino do led no 13
#define botao 2 // definimos o botao no pino 2

long UltimoTempo = 0; // Pega o Ultimo tempo apertado do Botao
int EstadoDoBotao = LOW; // Pega o Ultimo estado do Botao
int filtro = 300 ; // Filtra o ruido do botao 300 millseconds voce poder mudar
int pegaValorDoBotao =LOW; // Set o valor Atual do botao como desligado

void setup() {
pinMode (led,OUTPUT); // Set o led para SAIDA
pinMode (botao,INPUT); // Set o botao como ENTRADA

}

void loop() {
pegaValorDoBotao = digitalRead(botao); // Pega o valor atual do botao

if (pegaValorDoBotao == HIGH && (millis() - UltimoTempo) > filtro) {
/* Aki esta o pulo do gato
Verifico se vc apertou o botao , e verifico na mesma condicao se
millis() = cronometro interno do arduino - o Ultimoperiodo for maior que o ruido esta condicao vai ser sempre verdadeira

*/
if (EstadoDoBotao == HIGH) {
EstadoDoBotao = LOW;
}else {
EstadoDoBotao = HIGH;
}
UltimoTempo = millis();
}

digitalWrite(led,EstadoDoBotao);
pegaValorDoBotao = digitalRead(botao); // Pega o valor atual do botao
}

cabana:
poderia alteerar para que o led ficasse aceso com um pulso e so apagasse se acionasse outro pulso em outro botao?

cabana:
poderia alteerar para que o led ficasse aceso com um pulso e so apagasse se acionasse outro pulso em outro botao?

nao funcionou bem o led ficou oscilando e so tem um botao teria que acionar em um botao e desligar em outro so com pulso