fazer pausa ate que determinada entrada passe a LOW

Boas sou iniciante no arduino e na programaçao, estou a desenvolver um mecanismo e tenho um microswitch ligado.

o código está assim:

if (digitalRead(switchPin2) == LOW)
{
digitalWrite(motortubo, HIGH); // liga o motor
delay(6000); // fica ligado 6segundos
digitalWrite(motortubo, LOW); // desliga o motor do tubo
}
else
{
digitalWrite(motortubo, LOW); // Aqui é que a porca torce o rabo

}

preciso que se o switchPin2 estiver HIGH ele fique á espera sem avançar mais o programa até que fique LOW

desde ja agradeço alguma ajuda

Podes usar um while(switchPin2){};
Quando o pino estiver alto a avaliaçao que o while fará sera verdadeira e entrara dentro do while e so saira ate que seja falso.Desta forma penso que fara o que queres

while(switchPin2){};//Nao faz nada se entrar neste loop
if (digitalRead(switchPin2) == LOW)
  {
  digitalWrite(motortubo, HIGH); // liga o motor
  delay(6000);                  // fica ligado 6segundos
  digitalWrite(motortubo, LOW); // desliga o motor do tubo
  }
  else
{
    digitalWrite(motortubo, LOW); // Aqui é que a porca torce o rabo

  }

Já agora... e desculpa se o tom não for o mais adequado...

Tira esse delay() daí. Isso é uma má prática. (pensando nisso, acho que talvez valha a pena fazer um tutorial sobre porque não usar um delay. :\

Se quiseres atingir o mesmo resultado, faz assim:

unsigned long now=0, then=0;

while(digitalRead(switchPin2) == HIGH);//Nao faz nada se entrar neste loop
if (digitalRead(switchPin2) == LOW)
  {
  digitalWrite(motortubo, HIGH); // liga o motor
  then = millis();
  }
now = millis();
if ((now - then) > 6000) {
  digitalWrite(motortubo, LOW); // desliga o motor do tubo
  }

Assim o teu código não fica "preso" naquele delay.
Reparei que tens outro problema com a porca... mas não percebi o que era. No entanto, isso pode ser resolvido na nova condicão que coloquei.

tentei o que o HugoPT disse e nao resultou, ficava parado nessa parte, mesmo que o switchPin2 passase a LOW, nao andava mais, faltava á frente o == HIGH.

De momento ficou assim:

while(digitalRead(switchPin2) == HIGH) { }
if (digitalRead(switchPin2) == LOW)
{
digitalWrite(motortubo, HIGH); // liga o motor do tubo
delay(6000); // fica ligado 6segundos
digitalWrite(motortubo, LOW); // desliga o motor do tubo
}

Resumindo adicionei a linha while(digitalRead(switchPin2) == HIGH) { }, e apaguei o ELSE .

Bubulindo, mais tarde coloco o codigo como postaste e depois deixo feedback, sou muito novato nisto mas já li por ai que nao se deve usar o DELAY, mas não percebi o porquê, :astonished:

obrigado a todos

o que o HugoPT falha porque, como vês no meu código, a variável switchpin nunca é actualizada. Ou seja;

while(switchPin2){};//mas não tens funcão nenhuma para mudar o estado de switchpin2... para isso terias de fazer while(digitalRead(switchPin2));
if (digitalRead(switchPin2) == LOW) //aqui já alteras o estado da variável, mas nunca entras aqui se a variável não mudar de estado na linha anterior.

Vê o comentário.