Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Решить задачку - программа для Arduino. (http://forums.kuban.ru/f1024/reshit-_zadachku_-_programma_dlya_arduino-7157395.html)

smartbsv 08.09.2015 19:05

Решить задачку - программа для Arduino.
 
Доброго всем дня.
Помогите, хотя бы советом - в какую сторону копать? :)
Есть задачка: написать программку для Ардуино. - Никак не могу разобраться с этим языком, пытался-пытался сам - ничего не получается. Разобранные опыты могу сделать, даже поменять что-то, а с нуля сделать или собрать из нескольких - никак!
Может кто-то помочь (или подсказать человека, который может помочь:)

ipp 08.09.2015 20:01

Озвуч задачу. Что не выходит? Может и подскажут.

smartbsv 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


**

eth0 12.09.2015 16:12

Жесть какая, не проще подкинуть логический n-мосфет и сделать все на дуине?

smartbsv 12.09.2015 18:14

[b]eth0[/b], каким образом можно сделать?

Подсказали еще один вариант:
- кнопкой (одновременно с подачей сигнала на вход Ардуины) подаем питание на саму Ардуину
- Ардуина меряет напряжение на светодиоде
- в зависимости от напряжения выдает 1-3 "виртуальных нажатия" кнопки
- ждем отпускания кнопки (что-то типа "while"), после чего посылаем нужное количество "импульсов" для обратного переключения (чем питается Ардуина, т.к. отпустив кнопку - сняли снее питание? А питается она из подключенного параллельно питанию конденсатора. Нужно подобрать его на нужное время - но это моя забота:)

fanatnascar 03.10.2015 11:08

4-advanced >руками и паяльником?

smartbsv 03.10.2015 19:00

5-Фанат NASCAR
А чего не при помощи ..овна и палок? :)
Если знаете, чем помочь - выскажитесь.

fanatnascar 05.10.2015 00:25

6-advanced >я и высказался, не?

zeb 06.10.2015 19:34

эээ. я верно понял что есть фонарик с платой управления и вы к нему еще сбоку цепляете ардуино? зачем так? почему не сделать все на ардуино?


Текущее время: 04:33. Часовой пояс GMT +3.