0
- 08.09.2015 - 19:05
|
Доброго всем дня. Помогите, хотя бы советом - в какую сторону копать? :) Есть задачка: написать программку для Ардуино. - Никак не могу разобраться с этим языком, пытался-пытался сам - ничего не получается. Разобранные опыты могу сделать, даже поменять что-то, а с нуля сделать или собрать из нескольких - никак! Может кто-то помочь (или подсказать человека, который может помочь:) | |
1
- 08.09.2015 - 20:01
| Озвуч задачу. Что не выходит? Может и подскажут. | |
2
- 08.09.2015 - 22:41
|
Задача такая. Исходные данные: У светодиодного фонарика есть управляющая схема, которая имеет 4 режима работы (1, 2, 3 и 0, т.е. Выкл.). Режимы переключаются циклически при помощи одной кнопки, путем кратковременного ее нажатия. Задание: На основе платы Ардуино разработать схему, которая добавит фонарику следующую функцию: - Из любого включенного режима фонарика при нажатии (и удерживании) дополнительной кнопки на время удерживания должен включаться 3-й режим фары. При отпускании этой кнопки должен происходить возврат к предыдущему состоянию фонарика (режиму, включенному до этого). Схему подключения придумал такую: Со светодиода подаем сигнал на вход ардуино - измеряем напряжение (либо заполнение ШИМ). На другой вход вешаем дополнительную кнопку - программа будет отслеживать ее нажатие и, по измеренному напряжению, будет несколько раз "быстро нажимать" кнопку переключения режимов фонаря - отправляя серию импульсов (один, два или три). Логику самой программы придумал пока что вот такую (вот тут меня подстерегает незнание команд и прочего, поэтому пишу "своими словами"): void setup() ** // нужен один аналоговый вход для измерения напряжения // нужен один вход для нашей дополнительной кнопки // нужен один выход для посылки сигналов фаре (нужно притягивать к земле на короткое время: 0,05..0,1 секунды - имитировать нажатия кнопки на фаре) // переменная Mode - может принимать значения 1, 2 (3?) и 0 // переменная P - может принимать значения 0 и 1 // переменой P заранее присваиваем значение 0 // ** void loop() ** // Измеряем напряжение на аналоговом входе Ардуино от 0 до 3,3 вольта и присваиваем переменной "Mode" значение 0, 1 или 2. // если напряжение <= 0,1 вольта, то Mode = 0 // если напряжение >= 3,1 вольта, то Mode = 1 // иначе, или если напряжение > 0,3 вольта и < 3 вольт, то Mode = 2 // Проверяем, нажата ли кнопка buttonIsUp = digitalRead(BUTTON_PIN); if (!buttonIsUp) ** //Если кнопка не нажата // Проверяем, отпустили ли ее только что, или она уже была отпущена while(!digitalRead(BUTTON_PIN)); // Если кнопка была отпущена НЕ только что, а уже давно if P = 0 // Читаем "флаг" (Не знаю правильно ли написал) continue // Возвращаемся к началу цикла, ничего не делая else ** // Если кнопку только что отпустили, то в зависимости от Режима "Mode", возвращаем фару к исходному состоянию, бывшему до переключения: посылаем сигнал имитации нажатия кнопки фары нужное число раз if Mode = 0 // Имитируем нажатие кнопки 1 раз if Mode = 1 // Имитируем нажатие кнопки 2 раза if Mode = 2 // Имитируем нажатие кнопки 3 раза ** // Меняем "флаг" состояния кнопки, обозначающий совершенное переключение - присваиваем переменной "P" значение 0. P = 0 ** else ** // Если кнопка нажата // Проверяем, нажата ли кнопка только что или уже удерживалась до этого. Для этого "читаем флаг" - значение переменной "P" if P = 1 // Читаем "флаг" (Не знаю правильно ли написал) continue // Возвращаемся к началу цикла, ничего не делая else ** // Если кнопку только что нажали, то в зависимости от Режима "Mode", бывшему до переключения, посылаем сигнал имитации нажатия кнопки фары нужное число раз для включения режима "Мигания" if Mode = 0 // Имитируем нажатие кнопки 3 раза if Mode = 1 // Имитируем нажатие кнопки 2 раза if Mode = 2 // Имитируем нажатие кнопки 1 раза ** // Обозначаем, что кнопку нажали. - Меняем "флаг" состояния кнопки, обозначающий совершенное переключение - присваиваем переменной "P" значение 1. P = 1 ** | |
3
- 12.09.2015 - 16:12
| Жесть какая, не проще подкинуть логический n-мосфет и сделать все на дуине? | |
4
- 12.09.2015 - 18:14
| eth0, каким образом можно сделать? Подсказали еще один вариант: - кнопкой (одновременно с подачей сигнала на вход Ардуины) подаем питание на саму Ардуину - Ардуина меряет напряжение на светодиоде - в зависимости от напряжения выдает 1-3 "виртуальных нажатия" кнопки - ждем отпускания кнопки (что-то типа "while"), после чего посылаем нужное количество "импульсов" для обратного переключения (чем питается Ардуина, т.к. отпустив кнопку - сняли снее питание? А питается она из подключенного параллельно питанию конденсатора. Нужно подобрать его на нужное время - но это моя забота:) | |
5
- 03.10.2015 - 11:08
| 4-advanced >руками и паяльником? | |
6
- 03.10.2015 - 19:00
|
5-Фанат NASCAR А чего не при помощи ..овна и палок? :) Если знаете, чем помочь - выскажитесь. | |
7
- 05.10.2015 - 00:25
| 6-advanced >я и высказался, не? | |
8
- 06.10.2015 - 19:34
| эээ. я верно понял что есть фонарик с платой управления и вы к нему еще сбоку цепляете ардуино? зачем так? почему не сделать все на ардуино? | |
| Интернет-форум Краснодарского края и Краснодара |