Замена штатного имо Калина
- Войдите на сайт для отправки комментариев
Сб, 28/11/2015 - 16:05
Прошу помощи. Машина калина 1 Накрылся имо делаю ему замену на ардуино нано. Возникла сложность с плавным включением и выключением света, узучил кучу примеров,но все не то( При открытии водительской двери на ногу мк приходит минус, а при закрытой передней и открытой задней поступант модульный сигнал, т.е +меняется на- и обратно.ю. но если открыта передняя дверь идет только -.
Момогите реализавать вежливую подсветку.
И что? Вы написали скетч, а он не работает? Скетч в студию! Или Вы хотите, чтобы кто-то написал за Вас? Тогда в "ищу исполнителя".
я совсем недавно начал изучать ардуино
при подачи питания светодиод должен гореть 20 минут, а за тем гаснуть
я совсем недавно начал изучать ардуино
Лучше бы Вы сначала поизучали программирование.
Вот теперь берите Ваш код и построчно сами себе (можете и мне, но себе в первую очередь) говорите словами, что именно Вы в этой строчке делаете.
Пока же я вижу следующее: в строках 34-44 написано "если on>0 сделать что-то, а иначе сделать то же самое. Вы это хотели написать?
Теперь, прибавляя приращение к яркости 1) неплохо контролировать выход за границы допустимого значения, а то у Вас яркость растёт неограничено и 2) вы, выдимо, хотели плавного изменения яркости, так надо ж дать светодиоду хоть немного с текущей яркостью погореть, а Вы дергаете его при каждом вызове loop, т.е. 120 тысяч раз в секунду примерно. Вы действительно надеетесь успеть заметить так быстро меняющуюся яркость?
вот кусок кода он плавно зажигает и гасит светодиод, как заставить его плавно зажечь светодиод и оставить включенным?
Я рад за этот кусок кода, но мы вроде не его обсуждаем, а Ваш, так же? Вот и читайте мой пост №5 и делайте, что сказано.
Самое смешное, что и эта проблема также решается путем blink without delay.
Самое смешное, что и эта проблема также решается путем blink without delay.
вместо того, чтобы смеяться тыкнул носом, как это сделать
если сработало условие то запускаем цикла из 6 поста и запоминаем время текущее используя millis(). если текущее время millis()-время которое запомнили больше 20 минут выключить светодиод
Самое смешное, что и эта проблема также решается путем blink without delay.
вместо того, чтобы смеяться тыкнул носом, как это сделать
Дык я ж Вас уже тыкал! Читайте пост №5 - для начала объясните сами себе словами что там делается и что должно делаться.
Или Вы не понимаете что делается в этом скетче? Совсем не понимате? Тогда просто идите в "ищу исполнителя" и там Вам всё сделают.
Самое смешное, что и эта проблема также решается путем blink without delay.
вместо того, чтобы смеяться тыкнул носом, как это сделать
У Вас в скетче присутствуют какие-то второстепенные переменные, но отсутствуют главные - описывающие состояния системы.
По сути, любой скетч должен содержать в loop три последовательно выполняющихся блока:
1. Принимает информацию из окружающего мира: кнопки, таймер (millis()), датчики...
2. Вычисляет на основе текущего состояния и информации, добытой на этапе 1, следующее состояние системы.
3. Реализует управляющие воздействия, соответствующие текущему состоянию, вычисленному в 2, на исполнительные органы: светодиоды, сервоприводы, дисплеи, пищалки, моторы...
Причем, такая структура легко масштабируется: при необходимости одновременно управлять различными объектами при разных управляющих воздействиях соответствующие фрагменты кода помещаются в соответствующие блоки без изменения структуры скетча.
флагов не хватает чтобы знать включен светоидиод или нет, была нажата кнопка или нет
voriag1"не понятно как его оставить зажжонным и плавно погасить, когда условие перестанет выполняться?"
У Вас код не соответствует описанию.
Например,
int on=0;// переменная хранящая состояние кнопки
Ничего эта переменная не хранит. Она переопределяется первым же оператором в loop(), сответственно, играет роль локальной переменной, хотя и определена как глобальная.
Дальше не смотрел.
Во первых научитесь правильно вставлять код.
Код я Вш не компилировал, взял Ваш а там были ошибки и просто набросал принцып, Сейчас проверил исправил
спасибо, работает, сейчас вставляю таймер
как заставить окончательно выключиться светодиод по таймеру
Вот в этой строчке if (on==0 && i>0 ||millis()>= start_time + TIME) //Здесь плавно тушим и останавливаем
Вот в этой строчке if (on==0 && i>0 ||millis()>= start_time + TIME) //Здесь плавно тушим и останавливаем
но мне надо, чтобы он плавно гас по истечению 10 сек при нажатой кнопке либо если кнопку отпустили раньше, то начинал гаснуть не дожидаясь задержки в 10 сек
Чтобы ускориться поставте i=i-3 или 5-25
пробовал,не помогает, диод начинает моргать. видимо таймер сбрасывается
delay (10);
тоже, только быстрее. Можно как-нибудь зафиксировать таймер до следующего нажатия?
Давайте по другому. Если взять тот скетч что выложили и убрать проверку на время, за сколько секунд диод погаснет полностью?
промерно 6.2 сек
Я понял у Вас просто не фиксируется время. Сейчас посмотрю как исправить!
Пробуйте отзывайтесь
появилась задержка на включение, а после включения и прохождения 10 сек не гаснет
а что дает строчка f_time=1;
Это флаг для фиксации времени один раз
Даже не знаю что сказать, должно работать. Попробуйте еще так
работает но не так, зажигается с задержкой и гаснет только при отключении кнопки
Понял,тогда давайте розбираться с логикой. 1) Вы открыли дверь свет должен загореться - Чему при этом будет равен on ==1 или on==0
2) Вы закрыли дверь, нужно подождать 10 секунд и плавно потушить свет. Если я правильно понял напишите чему равен on при открытой двери
Правильно. открыли дверь появился минус, это получается== 1 закрыли, минус пропал.
Минус появился где на digitalRead (pin)? Если так то минус никогда не распознавался как 1 это есть 0
тогда я не прав, появляется 0
Спасибо, что потратили время но все равно, не то, сломал уже себе голову.
Скажите,а можно подключить на прямую ногу ардуино к -12, чтобы получить логический 0?
Нет нельзя сгорит 12>5 в 2 слишним раза. Лучше использовать оптоторн.
земля же вроде общая
Вот накидал схему и смотрю что если минус у них общий то в принцепе возможно, только чтобы туда никоем образом не попало болье ничего кроме минуса, Потому что через нагрузку (лампочка или еще чего) можно сжечь контролер. И лучше всего ставить через сопротивление для безопасности.
Лучше использовать оптоторн.
понял, спасибо