Дорогие товарищи и господа, поминимаю что вы меня пошлетие учится, но форумы для того и существуют, что бы спросить совета. Когда я научюсь, форум мне будет уже не нужен или я сам буду учить. Совет которого я прошу в данной теме - пригодится многим самодельщикам еще только начавшим разбираться в премудростях программирования.
Итак, решил я сварганить бюджетное "умное зеркало". Для тех кто не знает, весь чудесный фокус сиго дорогущего изделия, сводится к тому, что бы спрятать за полупрозрачным зеркалом самый обычный монитор, отображающий какую-то полезную информацию. Зачастую это или старый монитор или планшетник, который дабы не жрать электричество и ресурсы, все время должен быть выключен и включался на некоторое время только при приближении человека - т.е. тупо включало реле на некоторое время или короткое нажатие и после скажем пяти минут, еще одно короткое нажатия для выключения (об этом суть далее). Вот такое вот устройство я и пытаюсь выкурить с вашей помощью. В общем задействовано Arduno Nano, ультразвуковой датчик и твердотельное реле.
В этом скетче, все просто - если с ультразвукового датчика показания менее 100 - включается подстветка ("желый светодид" не или реле подстветки), если 50 и менее - та же фигня но.. вот тут то и нужен ваш ценный совет опытных кунаков!
01 | #include <Ultrasonic.h> |
10 | Ultrasonic ultrasonic(trigPin, echoPin); |
14 | pinMode(Relay, OUTPUT); |
15 | pinMode(YellowLED, OUTPUT); |
20 | distance = ultrasonic.distanceRead(); |
21 | Serial .println(distance); |
24 | digitalWrite(Relay, HIGH); |
27 | digitalWrite(Relay, LOW); |
31 | digitalWrite(YellowLED, HIGH); |
34 | digitalWrite(YellowLED,LOW); |
----------------------------------------------
Итак, с YellowLED все понятно, или логический уровень 1 или 0. На освещение интерьера подаётся питание пока перед зеркалом кто-то торчит в пределах метра (переменная равна 100 или менее), но вот как бы похитрее реализовать включение монитора (планшета) в переменной Relay- я бы хотел спросить у вас.
Фактический, нужно (для запрятанного за стекло планшета с подпаянной к реле кнопкой Power):
А: Не держать уровень 1 все время, пока человек стоит у зеркала, а имитировать нажатие пальцем кнопки POWER, скажем на пол секунды.
Б: отлично, нажатие было, планшет за заркалом включился, но черт подери, как сделать так, что бы кнопка не нажималась (или не была нажата постоянно) каждый раз при прохождении цикла, пока человек стоит у зеркала (переменная Distance равна или менее чам 50)? Очень не хотелось бы использовать Delay! Очень, поскольу это на пять минут отановит работу Ардуинки и заглушит реакцию на подстветку (yellowLED).. Теоретический, надо сделать так, что бы после короткого нажатия, пять минут не было никакой реакции на событие (человек за это время все просмотрит, причешится и уйдёт на работу), после чего, через пять минут повторное короткое нажатие - теперь уже выключающее планшет и снова перевод в ожидание когда distance <50.
Я тут и про флаги и про разные переменные уже начитался, голова пухнет.. Хотя я уверен, что для знающих - там всего-то пару строк кода и никаких костылей. Помогите пожалуйста, престарелому самодельщику:))
А поищите, типа - "блинк без делей". И можно в гугеле набрать "Леший в мире Ардуино".
но черт подери, как сделать так, что бы кнопка не нажималась (или не была нажата постоянно) каждый раз при прохождении цикла, пока человек стоит у зеркала (переменная Distance равна или менее чам 50)?
Да очень просто! Когда ваша программа первый раз нажимает кнопку Power - запомните это событие. Запишите где-нибудь что "свет уже включен" . И не включайте его вторично, пока сами не выключите.
Правильное слово для поиска "конечный автомат".
На пальцах: Вам нужно завести переменную состояния, которая может принимать несколько разных значений, и прописать условия (по кнопке или времени), при которых будет происходить переход из одного состояния в другое. Естественно, понадобится еще минимум одна переменная для запоминания времени последнего изменения состояния.
Да вот на днях захотел тоже сделать "умное зеркало". Положил рядом с обычным зеркалом ардуину и ничего не вышло.Куда бы ардуину не перекладывал,все время получается "дурацкое зеркало" .Как гляну в него, а там дурак с идиотской рожей смотрит.
Ты потомушта ее рядом ложил, а надо было синей изолентой примотать.
Ты потомушта ее рядом ложил, а надо было синей изолентой примотать.
Злой ты. Вот лишь бы поиздеваться! Не Ардуино должно видеть зеркало, а зеркало Ардуино! Надо не приматывать, а перед зеркалом разместить ... и без корпуса.
http://arduino.ru/forum/programmirovanie/vklyuchenie-podsvetki-na-5-seku...