Toggle Switch para acender grupos de leds

Boa noite amigos,

Sou novo no fórum e venho estudando Arduino sozinho e me deparei com um exercício que eu mesmo criei que se trata do seguinte:

Uma chave alavanca de 3 posições (ON-OFF-ON) onde quando eu acionar a chave em uma posição, conta-se um delay depois os 2 leds verdes acendem, quando jogo essa chave em qualquer outra posição imediatamente os leds verdes se apagam, conta-se um delay e 2 leds vermelhos acendem... Entra um loop e ficaria monitorando a chave...

O que ocorre é que quando simulo no Proteus o circuito funciona conforme eu imaginei e fiz a logica... Quando pego o UNO3 e uma protoboard o circuito não comporta como no Proteus...

Segue o codigo que estou usando:

const int led2 = 13;
const int led = 8;
const int botao = 2;

int estadoBotao = 0;

void setup()
{
pinMode(led2,OUTPUT);
pinMode(led,OUTPUT);
pinMode(botao,INPUT);
}

void loop()
{

estadoBotao = digitalRead(botao);

if (estadoBotao == HIGH)
{
digitalWrite(led2,LOW);
delay(2000);
digitalWrite(led,HIGH);
} else
{
digitalWrite(led,LOW);
delay(2000);
digitalWrite(led2,HIGH);

}
}

Será que estou fazendo algo errado, se alguem puder me ajudar ficaria imensamente grato!

Um abraço a todos!

O que ocorre é que quando simulo no Proteus o circuito funciona conforme eu imaginei e fiz a logica... Quando pego o UNO3 e uma protoboard o circuito não comporta como no Proteus...

Boas bem vindo ao forum.
Ai tens uma prova real de que uma simulação é bem diferente da aplicação prática.O teu problema reside no botao e a um efeito criado visto ele ser mecanico.O botao sendo mecanico cria varias transições momentaneas quando ele comuta e esta instrusão "estadoBotao = digitalRead(botao); " nao é lida como estas a pensar.
De modo a entenderes o que se passa ve isto:

Para corrigires isso tens de fazer o debounce ao botão.
Bons estudos

Obrigado por esclarecer HugoPT, deixe-me tirar outra duvida... Na lógica haverá diferença se comparado uma chave toggle de um botão? Pergunto pois seria diferente deixar um sinal ligado direto do que um que geraria um pulso.

Grande abraço!

Em resumo todo o botão mecânico faz isto, uns mais do que outros mas não tens como fugir disso.A simulação simula o cenário ideal onde o sinal é comutado de forma perfeita e logo o teu código funciona perfeito.
Tens de fazer o debounce sempre numa aplicação real.