Задержка без delay();
- Войдите на сайт для отправки комментариев
Вс, 20/09/2015 - 00:01
Здравствуйте.
У меня такая проблема.
Есть код:
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;
}
Полный код.
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); } }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; } }Так как-то, по-моему.
dimax,Datak,большое спасибо!