Embora o hugo já tenha explicado o que se passa, tenho que dizer que percebi perfeitamente a sua dúvida, mas como não responde directamente às perguntas que coloquei no post anterior (acaba por responder indirectamente, mas não sei porquê não responde directamente) acaba po mostrar perfeitamente que não sabe o que é a linguagem C nem um microcontrolador.
Tentando explicar qual era o objectivo das questões:
Sabe como funciona um programa para Arduino?
Num microcontrolador, uma coisa normal é haver um ciclo infinito que repita o programa (também chamado de while(1), porque é realizado normalmente por esta estrutura). Isto é necessário, porque o equipamento em que se coloca o microcontrolador deve estar sempre pronto a funcionar (e portanto a executar o programa), se não estiver pronto a funcionar quer dizer que está desligado (por exemplo sem energia). Sendo assim, o aspecto normal num programa de um microcontrolador é:
void main(void)
{
// aqui é colocada a inicialização do programa
while (1) {
// aqui é colocado o programa
}
}
Não sei se durante a sua experiência com linguagem de programação C e com microcontroladores chegou a a ver uma coisa parecida com isto, mas é isto que acontece.
Isto leva-nos à 2ª questão que foi colocada mas que não responde directamente:
Sabe o que significa a palavra na língua inglesa "loop"?
A palavra "loop" em inglês pode ser traduzida para português como ciclo. Sendo assim, posso dizer-lhe que que desenvolveu o Arduino tentou simplificar um pouco as coisas pata que pudesse ser utilizado por pessoas sem formação em programação. Nesse sentido ocultou parte da estrutura dos programas em C tendo feito isto:
void main(void)
{
// aqui é colocada a inicialização do programa
setup();
while (1) {
// aqui é colocado o programa
loop();
}
}
Criando estas duas funções, é muito mais fácil para uma pessoa que não tenha conhecimentos de programação perceber que dentro de uma função chamada "setup" tem que colocar as instruções de inicialização e dentro de uma função que se chama "loop" tem que colocar as instruções que vão fazer parte do seu programa e que se vão repetir infinitamente.
Sendo assim, e tendo chegado à conclusão de qual é a estrutura de um programa em C para um Arduino, o seu programa na realidade tem o seguinte aspecto:
/****************************LAÇO DO WHILE ********************************
* Este laço é utilizado quando se deseja executar ao menos uma vez determinada rotina
* antes da confirmação de um parâmetro,status,etc.
**************************************************************************/
//Aqui criamos as váriaveis e definimos os pinos utilizados
int led_red = 13; //Define led_red no pino 13
int led_green = 12; //Define led_green no pino 12
int led_blue = 11; //Define led_blue no pino 11
int botao = 4; //define o botão no pino 4
int cont = 0;
void main(void)
{
// Aqui definimos quais pinos serão utilizados como entrada e quais pinos
//serão utilizados como saída:
pinMode(led_red,OUTPUT); //Define o pino 13 como saída
pinMode(led_green,OUTPUT); //Define o pino 12 como saída
pinMode(led_blue,OUTPUT); //Define o pino 11 como saída
pinMode(botao,INPUT_PULLUP); //Define pino 4 como entrada e habilita pull up
while (1)
{
// Aqui digitamos nosso código:
do{
digitalWrite(led_red,HIGH); //Acende o led vermelho
delay(500); //delay 0.5s
digitalWrite(led_red,LOW); //Desliga led vermelho
digitalWrite(led_green,HIGH); //Liga led verde
delay(500); //delay 0.5s
digitalWrite(led_green,LOW); //desliga led verde
digitalWrite(led_blue,HIGH); //Liga led azul
delay(500); //delay 0.5s
digitalWrite(led_blue,LOW); //desliga led azul
delay(500); //delay 0.5s
}
//Verifica se o botão está pressionado e só entao repete as instruções
//escritas no "do" - isso não acontece, acredito que por estarmos dentro da função
//void loop as instruções contidas em "do" são repetidas mesmo sem a confirmação
//do while
while(digitalRead(botao)==LOW);
}
}
Agora repare no que está a fazer o seu programa. Como o ciclo "do-while" executa sempre a primeira repetição sem verificar a condição o que está contido no seu interior irá sempre ser executado. Quando essa execução termina é verificada a condição e como não é cumprida esse ciclo é terminado. No entanto, como está dentro de um ciclo infinito o "do-while" volta a ser executado e, como isto é um ciclo infinito, este comportamento irá-se repetir para sempre.
Sendo assim, a escolha do "do-while" não é a melhor neste caso. Deveria optar por um "while" ou mesmo por um "if" (que neste caso tem o mesmo comportamento).