Случайное продолжение события
- Войдите на сайт для отправки комментариев
Ср, 27/07/2016 - 12:53
кроме всех прочих, столкнулся с проблемой - не совсем, вернее совсем, не понимаю как сделать так:
1. событие = сработал будильник.
2. для его отключения хочу применить датчик положения.
3. отключение будильника должно происходить по следующим сценариям:
3.1. потрясти будильник раз 5 медленно.
3.2. потрясти будильник раз 10 быстро.
3.3. вариант 3.1.+3.2.
3.4. вариант 3.2.+3.1.
так вот, не понимаю как сделать случайное отключение по одному из сценариев(3.1...3.4).
подскажите плз :)
Пусть будильник перед срабатыванием "бросает кубик", например, с помощью http://arduino.ru/Reference/Random
класс! спасибо!
вопросы:
в значениях можно указать case(в котором прописать условия), я правильно понимаю?
таким образом, если указать 4 условия то будет мне щастье?
:)
в значениях можно указать case(в котором прописать условия), я правильно понимаю?
Сделайте будильник на колесиках с датчиком расстояния до препятствия и пусть он "время от времени" от вашей руки убегает в сторону. :)
(давайте на "ты"?)
fogary,
я так думаю - создать некий case с условиями(кол-во маханий, их частота), потом на них в коде ссылаться.
что б каждый раз не повторять условия.
как-то так.
...или туплю нещадно?
Arhat109-2, не, мысль! не спорю. )))))))))))))
тока не для меня - я простого не могу освоить :(
Где-то перед запуском будильника определяем, как на этот раз его остановить :
СПОСОБ_ОТКЛЮЧЕНИЯ = random(1,4);
Дальше ждем действий подопытного и реагируем соответственно
if (СПОСОБ_ОТКЛЮЧЕНИЯ == 1)
{ ждём "потрясти будильник раз 5 медленно" и отключаем будильник }
else if (СПОСОБ_ОТКЛЮЧЕНИЯ == 2)
else if (СПОСОБ_ОТКЛЮЧЕНИЯ == 3)
{ ждём "потрясти будильник раз 5 медленно, потрясти будильник раз 10 быстро" и отключаем будильник }
А Ф И Г Е Т Ь Н Е В С Т А Т Ь !
Araris, этожжжжж почти код готовый!
спасибо ОГРОМЕННОЕ!
Вы излишне восторженны, там до готового кода ещё охо-хо как далеко.
Где-то перед запуском будильника определяем, как на этот раз его остановить :
СПОСОБ_ОТКЛЮЧЕНИЯ = random(1,4);
иначе функция будет возвращать значения в диапазоне от 1 до 3.
Не забудьте добавить в setup() добавить вызов функции randomSeed(), как описано в статье (по ссылке выше).
Если верить документации, то правильно будет так:
иначе функция будет возвращать значения в диапазоне от 1 до 3.
Да, каюсь, там действительно написано
Параметры
Возвращаемое значение
Случайное число между min и max-1. (long)
И зачем рандом там. Чел может
1-потрясти будильник раз 10 быстро
2 - потрясти будильник раз 5 медленно.
3-потрясти будильник раз 10 быстро
4 - спокойно лечь спать дальше.
Убегающие будильники где-то в сети уже готовые видел, ежели вчё .. пошукайте. :)
fogary, Araris
спасибо вам!
почему фигня?
"редкостная" и "если", вопросов не вызывают =)
вот, накодил, только не компилируется.
#define Buzz A2; порт с буззером #define Trema 2; // порт с датчиком положения int count = 0; // переменная счетчика замыканий Trema void setup() { randomSeed(analogRead(A6)); // источник "случайного" числа шум на этом порту pinMode(Trema, INPUT_PULLUP); // порт с датчиком положения подтянут к +5В pinMode(Buzz, OUTPUT); // выход буззера } void loop() { /*тут код часов и момент, когда наступает время срабатывания будильника */ tone(Buzz, 1000);//включение звука randNumber = random(4);// кол-во вариантов отключения AlarmOFF = random(1,5); //ждем действий подопытного и реагируем соответственно if (AlarmOFF == 1) //ждём "потрясти будильник раз 5 медленно" и отключаем будильник { int Trema_read();// считываем состояние датчика byte count = 0; // переменная, в которую записываются нажатия кнопки long Trema_delay; // переменная для проверки длительности замыкания if(digitalRead(Trema)== LOW) // если замыкание Trema обнаружено, то... { delay(50);// против дребезга Trema_delay = millis; // начинаем отсчет времени if(Trema_delay - millis > 1000 && byte count = 5); //длительность и количество замыканий Trema { delay(50);// против дребезга noTone(Buzz);// выключение звука } } } }longTrema_delay; -> unsignedlongTrema_delay;millis -> millis()
добавил.
но ругается на ";" и скобки, начиная с 30 строки. видать синтаксис нарушен.
Уберите ";" в строке 27.
У Вас в программе три переменных с названием "count" (строки: 3, 21, 27), причем две из них в приделах одной функции. Вы присваиваете им значения, но нигде, в приведенной программе, не используете. Зачем Вы используете присвоение этой переменной в условии проверки (строка 27), то же не понятно. Если Вам действительно нужны три переменные, то лучше их назвать по разному, хотя бы "count", "count1", "count2", но лучше дать более осмысленные имена.
спасибо, убрал ";" из 27 и ещё несколько ошибок.
но увы :(
про переменные - нужна одна (счётчик срабатываний датчика положения Trema).
так понимаю, что по своей сути датчик та же кнопка, смотрю примеры работы с кнопкой(обработка кол-ва нажатий) но что-то не получается...
вот, решил пока упростить - только датчик, и только выключение звука.
#define Buzz A2 // порт с буззером #define Trema 1 // порт с датчиком положения int TremaState = 0; //текущее состояние int TremaLastState = 0; //предыдущее состояние //int count = 0; // переменная счетчика замыканий Trema void setup() { pinMode(Trema, INPUT_PULLUP); // порт с датчиком положения подтянут к +5В pinMode(A2, OUTPUT); // выход буззера } void loop() { tone(A2, 1000); //включение звука TremaState = digitalRead(Trema); if(TremaState == LOW) // если срабатывание Trema обнаружено, то... { noTone(A2); //отключение звука } }всё хорошо, только звук не отключается :(
Очень даже отключается, в строке 16.
А потом тут же включается, в строке 12. При каждом проходе loop().
а как сделать что б он после отключения не включался?
или это будет происходить сигналом на включение будильника?
как-то так:
1. датчик разомкнут, будильник НЕ сработал.
2. датчик разомкнут, будильник сработал. тут уж надо трясти =)
3. т.к время срабатывания будильника прошло, то при выключении звук не включится при следующем проходе loop.
я правильно понимаю?
А где бомба будильник?)
Буду надеяться на вас)))
так вот, делаю ж =)
а как сделать что б он после отключения не включался?
или это будет происходить сигналом на включение будильника?
как-то так:
1. датчик разомкнут, будильник НЕ сработал.
2. датчик разомкнут, будильник сработал. тут уж надо трясти =)
3. т.к время срабатывания будильника прошло, то при выключении звук не включится при следующем проходе loop.
я правильно понимаю?
В приведённом выше скетче нет даже следов какого-либо будильника, поэтому конкретно говорить пока не о чем.
Позвольте дать совет : сделайте для начала просто будильник с пищалкой и кнопкой (благо их много в Интернетах описано), а потом уже оснащайте его бантами, рюшами и проч.
да, логично.
получается мои рассуждения верны?
сейчас изучаю как заменить в одном полезном скетче Ds3231 на DS1302.