время срабатывания выхода

serj666
Offline
Зарегистрирован: 27.03.2012

 Подскажите новечку как ограничить работу выхода после срабатывания С delay развлекался  не получается

int res =1;
int mot1 =13;
int mot2 =12;

void setup(){
analogReference(DEFAULT);
pinMode(mot1, OUTPUT);
pinMode(mot2, OUTPUT);

}

void loop(){
  int val =analogRead(res);
  if(val < 500)digitalWrite(mot1, HIGH);
  else digitalWrite(mot1, LOW);


  if(val > 500)digitalWrite(mot2, HIGH);
  else digitalWrite(mot2, LOW);
}

 

step962
Offline
Зарегистрирован: 23.05.2011

serj666 пишет:

 Подскажите новечку как ограничить работу выхода после срабатывания С delay развлекался  не получается

"Переведи!" (c)

Что значит "ограничить"?

Что подразумевается под "срабатыванием"?

Как "развлекался"?

Что "не получается"?

serj666
Offline
Зарегистрирован: 27.03.2012

 команду deley(1000) вставлял в разные строки  но результат получался не совсем такой какой нужен

Ограничить значит - при срабатывании выходов mot1 или mot2( моторы)ограничить время их работы до 1-2 секунды

спасибо

Zaliv
Offline
Зарегистрирован: 05.03.2011

 Из кода и описания все равно не очень понятно, что Вы хотите добится. Чтобы после того как (val < 500) мотор проработал 1-2 секунды? Пока (val < 500) мотор работал, но не более 1-2 секунд?

Попробуйте определится, что хотите. Введите дополнительный переменные, чтобы знать когда моторы были включены и проверяйте в главном цикле loop не пора ли выключить.

serj666
Offline
Зарегистрирован: 27.03.2012

Если (val < 500) мотор крутился 1-2 секунды в одну сторону, Если(val >500) мотор крутится в другую сторону, но не более 1-2 секунды

Будет стоять драйвер двигателя

 

step962
Offline
Зарегистрирован: 23.05.2011

serj666 пишет:

Если (val < 500) мотор крутился 1-2 секунды в одну сторону, Если(val >500) мотор крутится в другую сторону, но не более 1-2 секунды

Будет стоять драйвер двигателя

 

Рассмотрим "Если (val < 500) мотор крутился 1-2 секунды в одну сторону" (вторая задача - близнец)

 

// определяем гле-нибудь в Setup:

oldVal1=curVal1

// В основном цикле:

curVal1 = // здесь считываем значение, за которым следим

if (curVal1>500 && oldVal1<=500) {
// контролируемая величина перешла порог - включаем дв-ль
 motor1on=1;  // устанавливаем флаг вращения дв-ля
// и запоминаем момент перехода через порог
 time1=millis();
}

if(motor1on) { // движок вращается?
  if(millis()-time1>1000) {  // вращается больше секунды?
// выключаем движок
    motor1on=0;  // и сбрасываем флаг вращения дв-ля
  }
}

// подготовка к новому пробегу цикла:
oldVal1 = curVal1;

Что делаем?

в первой конструкции if следим за контролируемой величиной и при достижении некоторого значения выполняем действия, которые требуется выполнить.

во второй конструкции if следим за взведенным в первой конструкции таймером и при достижении заданной длительности периода выполняем другую группу действий.

параллельно изменяем значения переменных/флагов, необходимых для правильной отработки.

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

serj666
Offline
Зарегистрирован: 27.03.2012

 спасибо буду эксперементировать  

serj666
Offline
Зарегистрирован: 27.03.2012
#define POROG 500
#define DELAY1 1000
#define DELAY2 1000

#define IN 0
#define OUT1 2
#define OUT2 3

boolean stat = 0;

void setup() 
{
  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
}

void loop() {
  if(analogRead(IN) < POROG && !stat)
 {
   digitalWrite(OUT1, 1);
   delay(DELAY1);
   digitalWrite(OUT1, 0);
   stat = 1;
 }
 if(analogRead(IN) > POROG && stat)
 {
   digitalWrite(OUT2, 1);
   delay(DELAY2);
   digitalWrite(OUT2, 0);
   stat = 0;
 }
}

 вот таким кодом все решилось

огромная благодарность "maksim"