фотодатчик и UNO
- Войдите на сайт для отправки комментариев
Ср, 23/01/2019 - 15:33
Добрый день. ДЕлаю маленький проектик. Суть проекта при срабатывание датчика больше 5 сек. ,закрываются рыле,при освобождении датчика уже включаются рыле. А при отсутствии сигнала больше 5 сек , закрыть рыле,а при появлении сигнала опять открыть рыле. Получилась только первая часть, с второй частью проблемка). как можно понять что датчик выключен.? LOW не сработал)
if(digitalRead(sensor_pin) == HIGH){
digitalWrite(rel1_pin, HIGH);
digitalWrite(rel2_pin, HIGH);
trig = true;
Timer = millis();}
if (trig)
if(millis() - Timer > 5000)
{
digitalWrite(rel1_pin, LOW);
digitalWrite(rel2_pin, LOW);
trig = false;
}
}
давайте по порядку : можете схему привести и какими датчиками пользуетесь ?
при срабатывание датчика больше 5 сек
это что значит ? датчик улавливает сигнал на протяжении 5-ти секунд и более ?
покажите ваш код обработки обоих случаев
при срабатывание датчика больше 5 сек. ,закрываются рыле,при освобождении датчика уже включаются рыле. А при отсутствии сигнала больше 5 сек , закрыть рыле,а при появлении сигнала опять открыть рыле.
На чьём, простите, рыле? Я таких намёков нипатерплю!!!
как можно понять что датчик выключен.? LOW не сработал)
Никак!
Для начала надо понять смысл задачи и сформулироваль её непротиворечиво и внятно.
Вот чем отличается "срабатывание датчика" от "поялвления сигнала"? При первом, как я понял, надо рыло закрыть, а при втором "опять открыть". Вы сами-то понимаете что и когда делать с рылом?
давайте по порядку : можете схему привести и какими датчиками пользуетесь ?
при срабатывание датчика больше 5 сек
это что значит ? датчик улавливает сигнал на протяжении 5-ти секунд и более ?
покажите ваш код обработки обоих случаев
Все верно, кратковременные сигналы не интересуют. А если нет сигнала больше 5-ти секунд, подать сигнал на пины 10,12,чтоб сработало рыле.
#define sensor_pin 2 #define rel1_pin 12 #define rel2_pin 10 unsigned long Timer; bool trig = false; void setup() { Serial.begin(9600); pinMode(rel1_pin, OUTPUT); digitalWrite(rel1_pin, HIGH); pinMode(rel2_pin, OUTPUT); digitalWrite(rel2_pin, HIGH); pinMode(sensor_pin, INPUT); } void loop() { if(digitalRead(sensor_pin) == HIGH){ digitalWrite(rel1_pin, HIGH); digitalWrite(rel2_pin, HIGH); trig = true; Timer = millis();} if (trig) if(millis() - Timer > 5000) { digitalWrite(rel1_pin, LOW); digitalWrite(rel2_pin, LOW); trig = false; } }при срабатывание датчика больше 5 сек. ,закрываются рыле,при освобождении датчика уже включаются рыле. А при отсутствии сигнала больше 5 сек , закрыть рыле,а при появлении сигнала опять открыть рыле.
На чьём, простите, рыле? Я таких намёков нипатерплю!!!
Не переживайте Вы так. Рыле - это родня цыкла.
Рыле - это родня цыкла.
А-а-а! Т.е. рыле надо включать в цыкле? И тогда всё будет окей? Так объясните ТС, а то он мучается с этими рылами.
а может там гендендерная несовместимость?
Все верно, кратковременные сигналы не интересуют. А если нет сигнала больше 5-ти секунд, подать сигнал на пины 10,12,чтоб сработало рыле.
#define sensor_pin 2 #define rel1_pin 12 #define rel2_pin 10 unsigned long Timer; bool trig = false; void setup() { Serial.begin(9600); pinMode(rel1_pin, OUTPUT); digitalWrite(rel1_pin, HIGH); pinMode(rel2_pin, OUTPUT); digitalWrite(rel2_pin, HIGH); pinMode(sensor_pin, INPUT); } void loop() { if(digitalRead(sensor_pin) == HIGH){ digitalWrite(rel1_pin, HIGH); digitalWrite(rel2_pin, HIGH); trig = true; Timer = millis();} if (trig) if(millis() - Timer > 5000) { digitalWrite(rel1_pin, LOW); digitalWrite(rel2_pin, LOW); trig = false; } }А Вы уверены, что ЭТО работает? Меня жутко смущает 27 строка.
Задача поставлена не совсем понятно. Посмотрите, я понял так
#define sensor_pin 2 #define rel1_pin 12 #define rel2_pin 10 unsigned long Timer; uint8_t trigOn = 0; uint8_t trigOf = 0; void setup() { Serial.begin(9600); pinMode(rel1_pin, OUTPUT); digitalWrite(rel1_pin, HIGH); pinMode(rel2_pin, OUTPUT); digitalWrite(rel2_pin, HIGH); pinMode(sensor_pin, INPUT); } void loop() { if(digitalRead(sensor_pin) == HIGH && trigOn == 0){//Сработал датчик trigOn = 1; Timer = millis();//Засекли время } if(digitalRead(sensor_pin) == HIGH){ if(trigOn == 1 && millis() - Timer > 5000)//Прошло 5с идатчик Вк.-Вк.реле { trigOf = 0; digitalWrite(rel1_pin, HIGH); digitalWrite(rel2_pin, HIGH); trigOn = 2; } } // Здесь коментарии теже самые только при Вык. датчика if(digitalRead(sensor_pin) == LOW && trigOf == 0){ trigOf = 1; Timer = millis(); } if(digitalRead(sensor_pin) == LOW){ if(trigOf && millis() - Timer > 5000) { trigOn = 0; digitalWrite(rel1_pin, LOW); digitalWrite(rel2_pin, LOW); trigOf = false; } } }Вот у меня всегда проблема как надо писать это слово , с одной ріле или с двумя точками рїле. Но может рйле все же вернее.
А что с ней не так? То, что она не нужна вовсе и оптимизатор её скорее всего выбросил - это понятно, а проблем с ней вроде не видно (если я ничего не пропустил).
Ни разу с таким не сталкивался... Буду знать. Спасибо, Евгений.
Мда. Накрутили писец как. А юзали бы автомат Пуха, то проблем никаких не было.