Pelo que entendi oque você deseja é que o led fique piscando indefinidamente até que você solte o botão, se for só isso mesmo é só você adicionar um delay(1000); na ultima linha.
Fica algo assim:
digitalWrite(2, HIGH);
delay(500);
digitalWrite(2, LOW);
delay(500);
Sabe que sua questão me fez pensar numa aula??? Fazer isso é a base para muitas outras coisas na programação! Farei uma aula sobre isso em breve!
A solução mais simples pra fazer isso que você quer é através de uma variável. Funcionaria assim: ao apertar o botão, você muda o valor de uma variável. E ai, em outro if, você checa: se a variável estiver com esse valor, pisca o led. Dessa forma, a piscada do led fica condicionada ao valor da variável, não ao estado do botão!
Um exemplo seria:
int var=0; //nossa variável de controle
void setup(){
pinMode(2,OUTPUT); //pino do LED
pinMode(3,INPUT); //pino do BOTÃO
}
void loop(){
if (digitalRead(3)){ //se botão for pressionado, coloca variável pra 1
var=1;
}
if (var==1){
digitalWrite(2,HIGH);
delay(500);
digitalWrite(2,LOW);
delay(500);
}
}
Aproveitando professor, se na aula puder incluir mais uma função no botão, que seria parar de piscar, ou seja, aperta uma vez, ele fica piscando, apertando uma segunda vez ele para.
aproveitando o embalo, como ele faria pra o led ficar piscando infinitamente e o programa continuar com outras funções? inclusive outros “if” e reset. ou seja teria que ser algo externo!?..
E se possível: seguindo essa mesma linha de raciocínio, como fazer o led parar? É possível criar algo do tipo: se a variável é 1 e botão for apertado, a variável recebe 0?
Ainda não fiz a aula Luciano!
Ontem gravei uma sobre millis. Se ficar boa depois da edição, devo postar nos próximos dias. Usando millis dá pra resolver esse problema!