Фото-таймер
- Войдите на сайт для отправки комментариев
всем привет!
решил сделать себе фото-таймер, он нужен для включения фотоувеличителя на определенный промежуток времени. делаю на Atmega8, проверяю на Ардуино Леонардо. сразу скажу, что в программировании новичек!
сейчас работают кнопки вверх-вниз, изменяют выдержку по секунде от 10 и выше, и по 0.1 секунды при выдержках ниже 10с.
тут есть один непонятный момент! почему-то число 9.8 не отображается, вернее пропускается. т.е. можно выставить 9.7 или 9.9, но 9.8 просто проскакивает как вверх так и вниз - не понимаю этого.
при нажатии кнопки "RUN" - включется нагрузка (сейчас это просто светодиод, будет реле) и идет отсчет до нуля.
необходимо сделать возможность паузы во время отсчета. т.е. во время отсчета, нажав кнокпу "run" нагрузка должна отключиться, отсчет приостановиться и при нажатии еще раз, продолжиться с места остановки. это основная проблема, я не понимаю как ее реализовать.
сперва я сделал все кнопки с библиотекой Bounce2, но как потом оказалось она не поддерживает долгое нажатие кнопки необходимого мне для задания времени. в итоге переделал, найдя пример в сети, теперь кнопки вверх-вниз работают так как я хотел.
кнопка "focus" пока не подключена, она должна просто включать нагрузку без отсчета времени, при повтторном нажатии отключать ее. но это потом.
основная задача сделать паузу во время отсчета.
прошу помощи у более опытных! нужны советя и примеры.
спасибо!
схема простая:
вот скетч на текущий момент:
#include <SevSeg.h> SevSeg disp; float count = 10; #define led 12 #define BUTTON_UP 8 #define BUTTON_DOWN 9 #define BUTTON_RUN 11 #define debounce 10 #define holdTime 500 int UpLast, DownLast, RunLast = 0; long btnDnTime, btnUpTime; boolean ignoreUp = false; void setup() { disp.Begin(0,A0,A1,A2,A3,PD0,PD1,PD2,PD3,PD4,PD5,PD6,PD7); disp.Brightness(5); digitalWrite(BUTTON_UP, HIGH); digitalWrite(BUTTON_DOWN, HIGH); digitalWrite(BUTTON_RUN, HIGH); pinMode(led, OUTPUT); } void buttonUp() { int butVal = digitalRead(BUTTON_UP); if (butVal == LOW && UpLast == HIGH && (millis() - btnUpTime) > long(debounce)) btnDnTime = millis(); if (butVal == HIGH && UpLast == LOW && (millis() - btnDnTime) > long(debounce)) { if (ignoreUp == false) { if (count < 10) { count = count + 0.1; } else count++; } else ignoreUp = false; btnUpTime = millis(); } if (butVal == LOW && (millis() - btnDnTime) > long(holdTime)) { if (count < 10) { count = count + 0.1; } else count++; ignoreUp = true; btnDnTime = millis(); } UpLast = butVal; } void buttonDown() { int butVal = digitalRead(BUTTON_DOWN); if (butVal == LOW && DownLast == HIGH && (millis() - btnUpTime) > long(debounce)) btnDnTime = millis(); if (butVal == HIGH && DownLast == LOW && (millis() - btnDnTime) > long(debounce)) { if (ignoreUp == false) { if (count <= 10) { count = count - 0.1; } else count--; } else ignoreUp = false; btnUpTime = millis(); } if (butVal == LOW && (millis() - btnDnTime) > long(holdTime)) { if (count <= 10) { count = count - 0.1; } else count--; ignoreUp = true; btnDnTime = millis(); } DownLast = butVal; } void countDown(float countStart){ for(countStart; countStart > 10; countStart--){ digitalWrite(led, HIGH); long time = millis(); while(millis() < time+1000) { disp.PrintOutput(); disp.NewNum(countStart,(byte) 0); } } for(countStart; countStart > 0; countStart=countStart-0.1){ long time = millis(); while(millis() < time+100) { disp.PrintOutput(); disp.NewNum(countStart*10,(byte) 1); } } digitalWrite(led, LOW); } void loop() { buttonUp(); buttonDown(); int butVal = digitalRead(BUTTON_RUN); if (butVal == LOW && RunLast == HIGH && (millis() - btnUpTime) > long(debounce)) countDown(count); RunLast = butVal; disp.PrintOutput(); if (count < 10) { disp.NewNum(count*10,(byte) 1); } else disp.NewNum(count,(byte) 0); }
Тоже интересно.
Светодатчиком светодиод в обратном включении?
А марку помнишь?
Может встречал свето-вольтовую характеристику какую-нибудь?
Алгоритм как я понимаю для таймеров такой
1.жки выбираем чтоб загнал цифру и забыл
2.кнопки можно резистивную шинку на один пин (то есть купить щиток готовый) кнопка жмешь циферка на единичку добавилась
ножек остается много можно и идивидульно повесить
3. вромя подольше отмеряеть удобно библиотечкой millis
стартанул запомнил millis-ом
прогон текста летит кнопки опрашиваешь и сраниваешь с разницами текущего и запомненного от millis
принимаешь решения
4.твой текст вроде классический а местные косячки сам отловишь
5. мнеб вольт-люксовые характеристики посмотреть для светодиодов включеных раком германиевых транзисторов включенных как угодно
6 библиотечка bounse это от дребезга контактов лишнее это
внутреннемикрушным резистором к плюсу кнопку подтяни INPUT_PULLUP и кнопки тыкая на корпус не дребезжат
ну если питание не дребезжит
и вообще прямо в это ветке все уже решалось просто почитай
вроде с таймером так и называется кухонный таймер на три страницы базары развели из-за того что не слушали меня по пункту 1-ому и полезли в динамические индикации с дурацким регистром
P.S.посмотрел на твою схему. Опять двадцать пять почему все без драйверов запоминающих типа max7219 берете? Отправил цифру и забыл. Опять бла-бла-бла на минимум три страницы. Почему у меня всегда в одну страницу помещается проект? Что я делаю не так? Ой чувствую и вольт-люксовую характеристику прийдется как на лабораторках карандашиком в клетчатой тетрадочке самому рисовать. Самому себе лабу защищать. Самому у себя принимать защиту.
Схема плохая.
При стоимости ~40$ економия 1$ на корпусе драйвера требует кучу дурацкого кода расписывать.
Тоже интересно.
Светодатчиком светодиод в обратном включении?
А марку помнишь?
Может встречал свето-вольтовую характеристику какую-нибудь?
5. мнеб вольт-люксовые характеристики посмотреть для светодиодов включеных раком германиевых транзисторов включенных как угодно
вроде с таймером так и называется кухонный таймер на три страницы базары развели из-за того что не слушали меня по пункту 1-ому и полезли в динамические индикации с дурацким регистром
честно говоря, ответа не понял :) при чем тут светодиод с обратным включением и свх ....
ощущение что темой ошиблись.
но про кухонный таймер поищу, спасибо.
Тоже интересно.
Светодатчиком светодиод в обратном включении?
А марку помнишь?
Может встречал свето-вольтовую характеристику какую-нибудь?
5. мнеб вольт-люксовые характеристики посмотреть для светодиодов включеных раком германиевых транзисторов включенных как угодно
вроде с таймером так и называется кухонный таймер на три страницы базары развели из-за того что не слушали меня по пункту 1-ому и полезли в динамические индикации с дурацким регистром
честно говоря, ответа не понял :) при чем тут светодиод с обратным включением и свх ....
ощущение что темой ошиблись.
но про кухонный таймер поищу, спасибо.
что у тебя датчиком света ?
на 12 ноге ?
изучай
как код простой пишется
на таком например
http://ru.aliexpress.com/item/FreeShipping-5PCS-LOT-MAX7219-Led-Module-8-Digit-7-Segment-Digital-LED-Display-Tube-For-Arduino/1995254787.html
что у тебя датчиком света ?
на 12 ноге ?
никакого датчика нет в принципе, он и не нужен!
на 12 ноге - нагрузка (сейчас это просто светодиод, будет реле).
в описании все сказано вроде...
Напишите мигалку диодом (blink) но только вместо delay() пользуйтесь возможностями millis() и тогда Вам все должно стать понятно
какой-же это
Фото-таймер
а я размечтался
щас еще 10$ буду ежемесячно экономить к уже примененным фото-измерителем и обнаружженным 20$ ежемесячной экономии
а тут
обычная курсовая на халяву из нас вытягиваться будет
с плохой схемой классического таймера
какой-же это
Фото-таймер
а я размечтался
щас еще 10$ буду ежемесячно экономить к уже примененным фото-измерителем и обнаружженным 20$ ежемесячной экономии
а тут
обычная курсовая на халяву из нас вытягиваться будет
с плохой схемой классического таймера
что значит какой? я же в описании сразу написал его задачу: "он нужен для включения фотоувеличителя на определенный промежуток времени"!
или читать описание теперь не принято?
о чем размечтался?
я ни из кого ничего не вытягиваю. спросил совета.
нет желания отвечать - проходим мимо. не надо засорять тему безумными советами, не разобравшись в вопросе.
какой-же это
Фото-таймер
а я размечтался
щас еще 10$ буду ежемесячно экономить к уже примененным фото-измерителем и обнаружженным 20$ ежемесячной экономии
а тут
обычная курсовая на халяву из нас вытягиваться будет
с плохой схемой классического таймера
что значит какой? я же в описании сразу написал его задачу: "он нужен для включения фотоувеличителя на определенный промежуток времени"!
или читать описание теперь не принято?
о чем размечтался?
я ни из кого ничего не вытягиваю. спросил совета.
нет желания отвечать - проходим мимо. не надо засорять тему безумными советами, не разобравшись в вопросе.
учишь уму разуму учишь
даже спасибо не говорят
а потом будут стонать - задолбало расписывание динамической индикации на бездрайверные светодиоды
а потом будут стонать - замучался тупусы к не туда засвечивающие светодиоды гасить рассматривать
на дарю вот только что мышкой накалякал схему правильную
вместо фото-сенсора можешь цепочкой на резистивной шине кнопки воткнуть
можешь на каждую свободную ногу воткнуть
и крути цифры вверх вниз
подсветка на ЖКИ совсем никакая но видно и доп переменником подрегулировать на месте можно
у меня 1-один на общую яркость при денвоном свете
можно добавить второй подсветку в темном помещении
а светодиоды в темном помещении будут засвечивать что нужно и что не нужно в зависмости как ты будешь локтями махать
схема не жрет ничерта
и пока просядет с 12 вольт до 7-ми может год другой пройти не выключаясь
и код писать в разы проще
art100 , ты знаешь что такое фотоувеличитель? Что ты к человеку прилип с фотодатчиком? Ты знаешь как делались фотографии в доцифровую эпоху?
kinesis- уменьшить значительно влияние дребезга помогают конденсаторы на 100 нанофарад (приблизительно), подключенные паралельно кнопкам. Это избавит от использования дополнительных библиотек.
Для паузы будет еще одна кнопка? Я бы использовал кнопку FOCUS: при незапущеном таймере включаем и выключаем фотоувеличитель для настройки резкости, а при запущенном отсчете-включаем и отключаем режим PAUSE
Согласен с art100 насчет MAX7219. Проще код и есть возможность менять яркость свечения семисегментников.
art100 , ты знаешь что такое фотоувеличитель? Что ты к человеку прилип с фотодатчиком? Ты знаешь как делались фотографии в доцифровую эпоху?
kinesis- уменьшить значительно влияние дребезга помогают конденсаторы на 100 нанофарад (приблизительно), подключенные паралельно кнопкам. Это избавит от использования дополнительных библиотек.
Для паузы будет еще одна кнопка? Я бы использовал кнопку FOCUS: при незапущеном таймере включаем и выключаем фотоувеличитель для настройки резкости, а при запущенном отсчете-включаем и отключаем режим PAUSE
Согласен с art100 насчет MAX7219. Проще код и есть возможность менять яркость свечения семисегментников.
гыыы
щс меня будут учит проявке фиксажу
давай
art100 , ты чего разгорячился ? учить тебя никто и не собирался. Бог с тобой .
kinesis- уменьшить значительно влияние дребезга помогают конденсаторы на 100 нанофарад (приблизительно), подключенные паралельно кнопкам. Это избавит от использования дополнительных библиотек.
Для паузы будет еще одна кнопка? Я бы использовал кнопку FOCUS: при незапущеном таймере включаем и выключаем фотоувеличитель для настройки резкости, а при запущенном отсчете-включаем и отключаем режим PAUSE
Согласен с art100 насчет MAX7219. Проще код и есть возможность менять яркость свечения семисегментников.
про конденсаторы не знал, надо будет попробовать. но для кнопок в данном варианте я не использую никаких библиотек, это я сначала попробовал Bounce, но потом отказался из-за невозможности ей обрабатывать долгое нажатие.
для паузы я планировал использовать ту же кнопку "RUN", которой запускается обратный отсчет. как бы она запускает и на паузу ставит при необходимости. а FOCUS только для наводки на резкость оставить.
вот этот момент с кнопками мне никак не понятен. может у меня не правильная логика программы!? как переназначить кнопке RUN паузу во время отсчета?
так же еще этот странный момент с 9.8, которые таймер просто проскакивает :)
про MAX7219 я понял, но хотел сделать из 7-сегментного который у меня уже есть в наличии. но в дальнейшем подумаю над этим.
спасибо за советы!
спасибо за советы!
незачем твои светодиодный выкидавать просто прослоечку вставить чтоб код упростился и ты думал только о том что кнопки делать будут. я же фоток накидал 1 корпус микрухи 8-ем 7-ми семисегментников поддерживает тебе достачтно для часов 4 пользовать от одного корпуса. цифру выбрал кинул и забыл. ты щас столько времени на код убьешь борясь за динамическую индикацию. для проявки прилично релюшку на лампу 220в иметь еще
всегда пожалуйсто
art100 наверное думает, что
незачем твои светодиодный выкидавать просто прослоечку вставить чтоб код упростился и ты думал только о том что кнопки делать будут. я же фоток накидал 1 корпус микрухи 8-ем 7-ми семисегментников поддерживает тебе достачтно для часов 4 пользовать от одного корпуса. цифру выбрал кинул и забыл. ты щас столько времени на код убьешь борясь за динамическую индикацию. для проявки прилично релюшку на лампу 220в иметь еще
написал понятный и толковый текст - может пора уже орфографией заняться .
Ощущение опережения мысли и полной несогласованности с набором текста.
Код для таймера засветки фоторезиста, 3 разряда. Шаг задания 10 сек. Пуск стоп одной кнопкой, в паузе возможно менять время. Контроллер Attiny 2313 8мГц.
Coolerr, спасибо за пример кода, попробую переделать под свои нужды.