видео - это всегда прекрасно.
можете вышеизложенное перевести с русско-албанского на язык ардуины,я примерно логику улавливаю но не на столько что бы из этого что-то сваять путное .Все таки у ардуины логика немного отличается от обычной жизненной или применимой в аналоговой электронике.
( в реальной жизни те же currentMillis = millis () и просто millis() - тождественно равны,у ардуино свой подход к этим моментам ).
покрутив немного соленоид семафора понял что надолго его не хватит ,буду городить с сервами.
но остался момент для переезда,суть - переход в 0-е состояние с задержкой.(если уровни обоих датчиков меньше определенного уровня - через несколько сек. перейти в соотв. состояние )
реалтизовано вот так - int pin1 = A0; //
int pin2 = A1;
const int ledPin1 = 9;
const int ledPin2 = 10;
int ledState1 = LOW;
int ledState2 = LOW;
int crossState = 0;
int val1 =0;
int val2 = 0;
const int p=100;
unsigned long previousMillis = 0;
unsigned long pinPulseFlag;
unsigned long loopTime;
const long interval = 600;
const long timer = 5000;
long LastTime = 0;
void setup() {
Serial.begin(9600) ;
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(pin1,INPUT);
pinMode(pin2,INPUT);
pinPulseFlag = 0;
}
void loop() {
unsigned long currentMillis = millis();
{
val1 = analogRead(A0);
val2 = analogRead(A1);
if ( val1 > p || val2 > p ) {
crossState = 1 ;
}
else {
if (millis() - LastTime > timer ) { LastTime = millis();
crossState = 0; pinPulseFlag=0;}
}
}
switch(crossState) {
case 0:
Serial.println(crossState);
ledState1 = LOW ;ledState2 = LOW ; digitalWrite(ledPin1,LOW);
digitalWrite(ledPin2,LOW);
break;
case 1:
Serial.println(crossState);
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState1 == LOW ) {
ledState1 = HIGH;ledState2 = LOW;
} else {
ledState1 = LOW;ledState2 = HIGH;
}
digitalWrite(ledPin1, ledState1);digitalWrite(ledPin2, ledState2);
}
break;
}
}