время срабатывания выхода
- Войдите на сайт для отправки комментариев
Пнд, 02/04/2012 - 05:52
Подскажите новечку как ограничить работу выхода после срабатывания С 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);
}
Подскажите новечку как ограничить работу выхода после срабатывания С delay развлекался не получается
"Переведи!" (c)
Что значит "ограничить"?
Что подразумевается под "срабатыванием"?
Как "развлекался"?
Что "не получается"?
команду deley(1000) вставлял в разные строки но результат получался не совсем такой какой нужен
Ограничить значит - при срабатывании выходов mot1 или mot2( моторы)ограничить время их работы до 1-2 секунды
спасибо
Из кода и описания все равно не очень понятно, что Вы хотите добится. Чтобы после того как (val < 500) мотор проработал 1-2 секунды? Пока (val < 500) мотор работал, но не более 1-2 секунд?
Попробуйте определится, что хотите. Введите дополнительный переменные, чтобы знать когда моторы были включены и проверяйте в главном цикле loop не пора ли выключить.
Если (val < 500) мотор крутился 1-2 секунды в одну сторону, Если(val >500) мотор крутится в другую сторону, но не более 1-2 секунды
Будет стоять драйвер двигателя
Если (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 следим за взведенным в первой конструкции таймером и при достижении заданной длительности периода выполняем другую группу действий.
параллельно изменяем значения переменных/флагов, необходимых для правильной отработки.
Это - самый тупой алгоритм. Он, возможно, будет неправильно отрабатывать особые ситуации - например, движок будет вращаться не умолкая, если контролируемая величина будет изменятьс туда-сюда вокруг порогового значения. Но идея, надеюсь, ясна. А если основная идея ясна, то доработать как-нибудь сможете...
спасибо буду эксперементировать
#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"