Tempo de espera no programa

Boa tarde a todos,
sendo novato no mundo do Arduino (1 semana de experiência), principalmente na programação do mesmo, venho pedir ajuda.
Tenho em mente de usar um Arduino Nano para controlar um tapete transportador movido com um simples MOTOR DC e dois sensores para controlar a posição do tapete. A parte eléctrica e electrónica ja eu fiz e esta a trabalhar. A parte do programa é que está a falta de algo. É ideia é que o Arduino controle o motor através de dois Relais que fazem a inversão do motor e chegando a posição direita ou esquerda pára o motor através de um dos sensores. O que não consigo pôr no código é que o motor chegando a uma das duas posições fique parado durante um período de tempo antes de arrancar novamente.
Fica aqui o Código que estou a usar

Desde já um obrigado

//////////////////////////////////////////////////////////
const int SENSOR1 = 2; //
const int SENSOR2 = 3; //
const int RELAY1  = 6; //
const int RELAY2  = 7; //
int SENSORstate1  = 0; //
int SENSORstate2  = 0; //

//////////////////////////////////////////////////////////

void setup() {
  
 pinMode(RELAY1,OUTPUT); pinMode(RELAY2,OUTPUT);
 pinMode(SENSOR1,INPUT); pinMode(SENSOR1,INPUT);
  
 }

//////////////////////////////////////////////////////////

void loop() {
  
  SENSORstate1 = digitalRead(SENSOR1);
  if (SENSORstate1 == HIGH){
   //delay(2000);
   digitalWrite(RELAY2,HIGH);
   digitalWrite(RELAY1,LOW);
   //delay(2000);
   } 
  
  
  SENSORstate2 = digitalRead(SENSOR2);
  if (SENSORstate2 == HIGH){
   //delay(2000);
   digitalWrite(RELAY2, LOW);
   digitalWrite(RELAY1,HIGH);
   //delay(2000);
  }
  
  }

Tá certo a sua ideia, tá errado são dois delays em cada if.

tenta assim:

void loop() {
SENSORstate1 = digitalRead(SENSOR1);
SENSORstate2 = digitalRead(SENSOR2);

   if (SENSORstate1 == HIGH){
   digitalWrite(RELAY2,LOW);
   digitalWrite(RELAY1,LOW);
   delay(4000);
   digitalWrite(RELAY2,HIGH);
   digitalWrite(RELAY1,LOW);

  if (SENSORstate2 == HIGH){
   digitalWrite(RELAY2, LOW);
   digitalWrite(RELAY1, LOW);
   delay(4000);
   digitalWrite(RELAY2, LOW);
   digitalWrite(RELAY1,HIGH);

  }
 
}

Primeiro, ele irá para o motor.
Esperar 4 segundo e acionar no sentido contrário

PS:
Outro erro percebi agora.
Qual lado ele tem que acionar primeiro?
Relay 1 ou 2?
Seja o lado que for coloca isso no setup primeiro tipo:

digitalWrite(RELAY2,HIGH);
digitalWrite(RELAY1,LOW);

Assim ele começa movendo em um sentido quando inicia e depois vai obedecer seus sensores.

Está certo..... : ))
A falha não estava no tempo, mas sim na sequncia que punha os relais LOW ou HIGH...
Percebido.
Obrigado pela ajuda
ProfCristiano
:slight_smile:

Neste momento nem pensei em adicionar algo para ligar e desligar o equipamento. Mas sim , não tendo

digitalWrite(RELAY2,HIGH);
digitalWrite(RELAY1,LOW);

no Setup apos desligar o equipamento só iria começar a trabalhar se um dos sensores fosse acionado manualmente. A melhor opcão seria após desligar e ligar continuar com o ultimo acionameto.
Vai ser o proximo quebra cabeças. Alguma dica como seria o codigo? , Não pesso pela resoluçao, só algo para continuar.
Obrigado Prof

Olá solrac3f.
Sobre continuar de onde parou. Eu sei que tem como, mas não lembro de cabeça.
Existe a opção de manter variáveis dentro da memória do arduino de modo que ela não se apague ao desligar o arduino.
Dai daria para criar um variável que armazenaria o sentido do movimento. Ao iniciar ele checaria essa variável e acionaria o motor de acordo.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.