Скетч с диодом и кнопкой
- Войдите на сайт для отправки комментариев
Ср, 12/10/2022 - 12:40
Люди добрые, помогите пожалйста написать простой скетч. Вроде понимаю как включить лед по кнопке, и примерно понял скетч с плавным увеличением/уменьшением яркости. Но никак не могу написать скетч, чтобы при клике по кнопке лед плавно загарелся, и при следующем клике плавно потух
Люди добрые, помогите пожалйста написать простой скетч. Вроде понимаю как включить лед по кнопке, и примерно понял скетч с плавным увеличением/уменьшением яркости. Но никак не могу написать скетч, чтобы при клике по кнопке лед плавно загарелся, и при следующем клике плавно потух
а что именно не получается?
Где скетч, хоть и не получившийся?
самое близкое что мне удалось собрать - по нажатию кнопки лед начал постпенно загараться и гаснуть без остановки. а мне нужно чтобы он плавно загарелся и продолжил гореть, пока не нажму кнопку еще раз, чтобы он плавно погас. Не получается сам скетч сформулировать. Ардуино только начинаю осваивать, поэтому для меня такое сочетание - дремучий лес
Сейчас вот в эту сторону копаю
Нужно разбить задачу на несколько подзадач. Для начала сделать функцию, которая будет плавно зажигать или гасить светодиод.
Потом нужно разбираться с кнопками. Примерно так:
Вводятся два флага - bool ledUp, ledDown, каждая кнопка отвечает за своей флаг, при клике поднимает его (присваивает true). Функция, отвечающая за светодиод следит за этими флагами и если они не равны false, зажигает или гасит светодиод. В конце цикла сбрасывает флаги (присваивает им false). Как-то так
Предыдущий скетч выглядел примерно так
две функции уже есть void LedUp() строки 10-15 и void LedDown() 18-21
две функции уже есть void LedUp() строки 10-15 и void LedDown() 18-21
И, самое главное, это даже не будет первым шагом в правильном направлении, т.к. для того, чтобы передалать скетч из типа "delay" в тип "millis" его нужно переписывать с нуля (т.е. в нем невозможно использовать те функции, которые уже якобы есть).
Нужно разбить задачу на несколько подзадач. Для начала сделать функцию, которая будет плавно зажигать или гасить светодиод.
Потом нужно разбираться с кнопками. Примерно так:
Вводятся два флага - bool ledUp, ledDown, каждая кнопка отвечает за своей флаг, при клике поднимает его (присваивает true). Функция, отвечающая за светодиод следит за этими флагами и если они не равны false, зажигает или гасит светодиод. В конце цикла сбрасывает флаги (присваивает им false). Как-то так
Кроме того, при сброшенных флагах теряется информация о том, в каком состоянии мы оставили светодиод. И, скажем, при попытка повторно включить уже включенный он будет резко сбрасываться в 0, после чего плавно разгораться, что, как мне кажется, не соответствует условиям задачи.
Лучше применить конечный автомат с 4-мя состояниями:
- светодиод выключен,
- светодиод загорается,
- светодиод горит,
- светодиод тухнет.
Лучше применить конечный автомат с 4-мя состояниями:
- светодиод выключен,
- светодиод загорается,
- светодиод горит,
- светодиод тухнет.
Жди вопрос - А где тут кнопки? ))
Поскольку только начинаю осваивать - всё вышесказанное для меня прозвучало как китайская грамота)
две функции уже есть void LedUp() строки 10-15 и void LedDown() 18-21
И, самое главное, это даже не будет первым шагом в правильном направлении, т.к. для того, чтобы передалать скетч из типа "delay" в тип "millis" его нужно переписывать с нуля (т.е. в нем невозможно использовать те функции, которые уже якобы есть).
пусть учится разбивать на подзадачи хотя бы, а то видишь - китайская грамота "иэсансыулютипатюши"
Ну пока что гугл оказался полезнее и информативнее
Два флага - это как бы избыточно. Тем более, что не исключен вариант конфликта между ними.
Кроме того, при сброшенных флагах теряется информация о том, в каком состоянии мы оставили светодиод. И, скажем, при попытка повторно включить уже включенный он будет резко сбрасываться в 0, после чего плавно разгораться, что, как мне кажется, не соответствует условиям задачи.
Флаги определяют текущее направление. Хотя, можно сделать и один, типа int8_t и задавать там дельту - плюс будет означать включение, минус - выключение. Заодно и скорость изменения яркости. А текущее состояние все равно должно быть в какой-то переменной - к чему-то же дельту прибавлять/отнимать нужно.
Лучше применить конечный автомат с 4-мя состояниями:
- светодиод выключен,
- светодиод загорается,
- светодиод горит,
- светодиод тухнет.
Что бы там ни говорили злые языки, но конечный автомат точно так же должен опрашивать кнопки и точно так же должен иметь функцию включения/выключения. Т.е. все ровно то же самое )))
Ну пока что гугл оказался полезнее и информативнее
Теперь понял, у каво надо спрашивать в первую очередь?
Два флага - это как бы избыточно. Тем более, что не исключен вариант конфликта между ними.
Кроме того, при сброшенных флагах теряется информация о том, в каком состоянии мы оставили светодиод. И, скажем, при попытка повторно включить уже включенный он будет резко сбрасываться в 0, после чего плавно разгораться, что, как мне кажется, не соответствует условиям задачи.
Флаги определяют текущее направление. Хотя, можно сделать и один, типа int8_t и задавать там дельту - плюс будет означать включение, минус - выключение. Заодно и скорость изменения яркости. А текущее состояние все равно должно быть в какой-то переменной - к чему-то же дельту прибавлять/отнимать нужно.
Лучше применить конечный автомат с 4-мя состояниями:
- светодиод выключен,
- светодиод загорается,
- светодиод горит,
- светодиод тухнет.
Что бы там ни говорили злые языки, но конечный автомат точно так же должен опрашивать кнопки и точно так же должен иметь функцию включения/выключения. Т.е. все ровно то же самое )))
Спасибо большое, самые полезные ответы, теперь хоть приблизительно понимаю по каким командам информацию искать, как (если) доделаю скину сюда на оценку))
Желательно в пятницу, ближе к вечеру скидывать.
Во, блин! Программа 10 строк. Из них 4 в лупе. Автоматы бл...
Направление меняется по отпусканию кнопки. Мне так больше нравиться. Менять направление можно в любой момент, даже если не зажглось до конца, повторное нажатие будет гасить.
Желательно в пятницу, ближе к вечеру скидывать.
на пятницу я одну тему хочу дохоливарить )))
Желательно в пятницу, ближе к вечеру скидывать.
на пятницу я одну тему хочу дохоливарить )))
Какую именно пятницу?))
Поскольку только начинаю осваивать - всё вышесказанное для меня прозвучало как китайская грамота)
Ну пока что гугл оказался полезнее и информативнее
Наверное это тоже путь, но если бы вы доперли сами - для развития навыка программирования это было бы полезнее. Понимание чужого кода из интернета, увы, дает куда меньше - это как ответ в конце учебника подсмотреть.