Задержка без delay();

polkiloqq
polkiloqq аватар
Offline
Зарегистрирован: 25.04.2015

Здравствуйте.
У меня такая проблема.
Есть код:

  val = digitalRead(in1);
  vall = digitalRead(in2);
  digitalWrite(out1,val);
  digitalWrite(out2,vall);

И мне нужно,чтобы он 30 секунд работал,а 30 секунд не работал. С delay(); это сделать не получилось. С millis(); тоже,видимо где-то допускаю ошибку или чего-то не понимаю. Буду благодарен за помощь!

  long timeStartMeas;
  int in1 = 3;
  int in2 = 5;
  int out1 = 8;
  int out2 = 9;
  int val = 0;
  int vall =0;
  
void setup() {
  
  timeStartMeas = millis();
  pinMode(in1,INPUT);
  pinMode(in2,INPUT);
  pinMode(out1,OUTPUT); 
  pinMode(out2,OUTPUT);

}

void loop() {
  long currentTime = millis();
  if(currentTime - timeStartMeas >= 30000)
  {
  digitalWrite(out1,LOW);
  digitalWrite(out2,LOW);
  delay(30000)
  }
  else
  {
    timeStartMeas = currentTime;
  val = digitalRead(in1);
  vall = digitalRead(in2);
  digitalWrite(out1,val);
  digitalWrite(out2,vall);
  }
  
  return;
}

Полный код.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

polkiloqq

#define in1 3
#define in2 5
#define out1 8
#define out2 9

void setup(){
Serial.begin(9600);
pinMode(in1,INPUT);
pinMode(in2,INPUT);
pinMode(out1,OUTPUT); 
pinMode(out2,OUTPUT);
}

void loop() {  
uint16_t n=millis()%60000;
if (n<30000){
    digitalWrite(out1, digitalRead(in1) );
    digitalWrite(out2, digitalRead(in2) );
    }
else {
  digitalWrite(out1,LOW);
  digitalWrite(out2,LOW);
  }


}

 

Datak
Offline
Зарегистрирован: 09.10.2014






long timeStartMeas = millis( ) - 30000;
.....
..... 
void loop( )
{
  long currentTime = millis( ) - timeStartMeas;

  if( currentTime >= 30000 )
  {
    digitalWrite( out1, digitalRead( in1 ) );
    digitalWrite( out2, digitalRead( in2 ) );
  }

  if( currentTime >= 60000 )
  {
    digitalWrite( out1, LOW );
    digitalWrite( out2, LOW );

    timeStartMeas += 60000;
  }
}

Так как-то, по-моему.

polkiloqq
polkiloqq аватар
Offline
Зарегистрирован: 25.04.2015

dimax,Datak,большое спасибо!