2 Реле времени. Задержка включения и выключения.

leshak
Offline
Зарегистрирован: 29.09.2011

Leshiy пишет:

Я не то, что не поставил, я даже не читал.

Круто. Ну значит желаю и дальше бороться с переполнениями и проч. У меня-то проблем с понимаем этого всего нет. Так что от вашего "не чтения" я не пострадаю аж никак.
 

Leshiy пишет:

Лучше про структуры расскажите, про конкретное применение в данном случае. Я не понимаю их смысла здесь, на каждую кнопку по структуре объявлять, вы это имели ввиду?


А чего я буду рассказывать?  Это было ваше домашние задание. Пока я от вас никаких попыток (кода) по этому поводу не вижу. Вот увижу, тогда и буду думать "то я имел ввиду" или нет. Тем более что я однозначно говорил "массив структур", а не "массивы в структуре". И долго расписывал что именно из желания иметь один массив и возникла идея "заюзаем структуры".

А еще, напомню, кто-то через многомерный массив должен был решение подготовить. Что-бы сравнить его потом с решением через структуры.

Leshiy
Offline
Зарегистрирован: 19.07.2014

Вот оно мне надо.

monser
Offline
Зарегистрирован: 01.07.2017

4ERTIK пишет:

Примерно так (если я понял правильно)

//реле включения с задержкой и выключения с задержкой
#define ledPin1 12  //Реле 1 - управление
#define ledPin2 11  //Реле 2 - управление

byte valA; //переменная времени 
byte flagA;
long previousMillisA = 0;

byte valB; //переменная времени 
byte flagB;
long previousMillisB = 0; 


void setup()    
{ 

  pinMode(ledPin1, OUTPUT); //иниц выхода
  pinMode(ledPin2, OUTPUT); //иниц выхода

} 

void loop() 

{ 
  //**************************первый таймер , включаемый через Н-секунд после нажатия**********************************
  if(digitalRead(8)==HIGH)//если кнопка нажата ... 
  { 
    flagA=1;
  }
  if(flagA==1)
  {

    if (millis() -previousMillisA >1000) 
    { 
      previousMillisA = millis();     
      valA++;                       // работает счет,ledPin1  выключен 
      digitalWrite(ledPin1,LOW); 
    } 
  } 

  if(valA>=5) //кол-во секунд((millis() -previousMillisA >1000) при достижении этого значения , ledPin1 включается
  { 
    digitalWrite(ledPin1,HIGH);


  }
  if(digitalRead(8)==LOW)//если кнопка не нажата ... 
  { 
    flagA=0;
    digitalWrite(ledPin1,LOW); //выключаем ledPin1 
    valA=0;//обнуляем переменную
  } 

  //********************************таймер второй*********************
  if(digitalRead(9)==HIGH)//если кнопка нажата ... 
  { 
    previousMillisB = millis();
    flagB=1;
    valB=0;
  }
  if(flagB==1)
  {
    digitalWrite(ledPin2,HIGH);
  }
  if(flagB==1&&digitalRead(9)==LOW)
  {

    if (millis() -previousMillisB >1000)
    { 
      previousMillisB = millis();     
      valB++;                       // работает счет,ledPin1  включен 
      //      digitalWrite(ledPin2,LOW); 
    }  
  }
  if(valB>=10) //кол-во секунд ,при достижении этого значения , ledPin2 выключается
  { 
    digitalWrite(ledPin2,LOW);
    flagB=0;
  }


}


Спасибо, второй таймер именно то, что мне было нужно.
Но пока никак не могу справиться со второй частью  задачи:
Вроде проще некуда, но познания в программировании пока не позволяют справиться. Уже голову сломал.
 Имеются 2 входа и один выход.
 При включении устройства на обоих входах-1, выход-0.
 Через 2-3 сек на вх1 появляется-0 и если  вх2-1, на вых-1.
 Устройство в работе.
 При аварии, на вх2 появляется 0 в течении 2х сек.
 Вых должен стать -0 и блокироваться.
 Вот из за этих 2х сек никак и не могу справиться.