Bloquear pino (RESOLVIDO)

Pessoal uso o arduino nano. Eu queria saber se é possível bloquear um pino no arduino após usar uma vez. Se eu apertar uma botoeira vou ter um delay de 1 segundo, depois passa por um contador for para retornar somente uma vez a palavra agua pela serial. O problema é que passa pelo loop e sempre que vai para a função agua1() a variável agua volta a ter valor 0(zero).
Queria como bloqueio um pino na função, como eu salvo o valor da variável agua como 1 para que não envie mais nada pela serial, envie somente se eu resetar o arduino. Segue o código e fico no aguardo…

void setup()
{
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  
  Serial.begin(9600);
}

void loop()
{
  int pino2 = digitalRead(2);//vai ler ele como HIGH
  
  if(pino2 == LOW)
  {
    delay(1000);
    agua1();
     // Serial.print("suco");
  }
  
}

void agua1()
{
  for (int agua = 0; agua < 1; agua++)
  
    Serial.println("Agua");
  
}

Precisas apenas de uma variável global que "registre isso já aconteceu" e compará-la 8)

Livra-te do delay o mais que puder, sempre indicam isto: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

O teu problema é lógica de programação, pura e simples. Vá exercitando com exemplos que podes encontrar na net, alguns exemplos:
http://arduino.cc/en/tutorial/button

O link acima ainda não tem o que desejas, ele acende o led se o botão estiver pressional e apaga se o botão não estiver pressionado, mas tente entender o código, preste atenção no circuito e veja sobre pullup e pulldown (usarás muito isso).

Abaixo um instructables que encontrei via google que tem uns passo a passo, que num passar de vistas pareceu interessante:

Olhei bem por cima, existem algumas imperfeições, enxergá-las pode ser uma boa lição de casa! Por este link terás diversas perguntas respondidas, problemas, poste aqui.

Obrigado Mortis, agora deu certo, eu já sabia que existia variáveis globais mas não tive a capacidade de conseguir aplicar. Aqui tem um link sobre variáveis globais se alguém quiser ver:

http://www.tiexpert.net/programacao/c/variaveis-globais-e-locais.php

int agua = 0;
void setup()
{
pinMode(2, INPUT);
digitalWrite(2, HIGH);

Serial.begin(9600);
}

void loop()
{
int pino2 = digitalRead(2);//vai ler ele como HIGH

if(pino2 == LOW)
{
agua1();
// Serial.print(“suco”);
}

}

void agua1()
{
for (agua; agua < 1; agua++)

Serial.println(“Agua”);

}

Estamos aqui para ajudar… Conforme você vai praticando, as opções ficam mais claras :wink:

Não fui com a cara do loop (for) rs, você poderia substituí-lo por uma condição (if) simples
de:

for (agua; agua < 1; agua++)
    Serial.println("Agua");

para:

if (agua == 0){
   agua = 1;
   Serial.println("Agua");
}

ou poderias fazer tudo no loop:

void loop()
{
//Com a condição aqui, deixaria de fazer requisições à porta a cada loop, já que não desejas mais o processamento do bloco até que ocorra o reset
 if(agua == 0) { //se ainda não ocorreu agua = 1
  int pino2 = digitalRead(2);//verifica a porta
  if(pino2 == LOW) //se o botão foi pressionado
  {
    Serial.print("agua"); //imprime na serial
    agua  == 1; //altera agua para 1, evitando o re-processamento do bloco
  }
}

Existem muitas formas de fazer a mesma coisa :wink:

Bons estudos!