К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Решить задачку - программа для Arduino.

Гость
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
эээ. я верно понял что есть фонарик с платой управления и вы к нему еще сбоку цепляете ардуино? зачем так? почему не сделать все на ардуино?


К списку вопросов
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск




Copyright ©, Все права защищены