Моргание светодиода ардуино с разной частотой

Arduino.ru

мигание светодиодами с разной частотой

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Написать программу включения-выключения

светодиодов на выходах микроконтроллера в зависимости от количества

нажатий кнопки на входе. Всего нажатий должно быть три. при включении

светодиоды начинают мигать с заданной частотой по очереди. После первого нажатия кнопки частота

увеличивается вдвое, после второго еще вдвое. После третьего возвращается к

Вопрос, как установить частоту мигания?И как сделать чтобы после 2 нажатия кнопки она менялась?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вопрос, как установить частоту мигания?

Ответ — открыть САМЫЙ ПЕРВЫЙ, САМЫЙ ТРИВИАЛЬНЫЙ, САМЫЙ «ДЛЯ БЕРЕМЕННЫХ ДОЯРОК» пример «blink», который поставляется с IDE и есть прямо в меню IDE. Посмотреть как там установлена частота с делать также.

И как сделать чтобы после 2 нажатия кнопки она менялась?

1. сделать чтобы мигало хоть с какой-то частотой.

2. Посмотреть на код, подумать и сделать изменение частоты.

3. Если Вы нездоровы, и с п.2 возникнут трудности, то выложить здесь СВОЙ скетч и задать по нему вопрос(ы).

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Сделал такой код:

// Инициализируем цифровой вход/выход в режиме выхода.

digitalWrite(2, HIGH); // зажигаем светодиод

delay(1000); // ждем 1 секунды

digitalWrite(2, LOW); // выключаем светодиод

delay(1000); // ждем секунду

digitalWrite(3, HIGH); // зажигаем светодиод

delay(500); // ждем 0,5 секунды

digitalWrite(3, LOW); // выключаем светодиод

delay(500); // ждем секунду

digitalWrite(4, HIGH); // зажигаем светодиод

delay(1000); // ждем 1 секунды

digitalWrite(4, LOW); // выключаем светодиод

delay(1000); // ждем секунду

все что мог перерыл, хз как подключить кнопку, и как сделать чтобы мигание продолжалось до тех пор пока кнопка не включена.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

как подключить кнопку, и как сделать чтобы мигание продолжалось до тех пор пока кнопка не включена.

Прочитать правила форума и вставить программу правильно и, наверное, добавить кнопку

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

ну добавлю я кнопку, а как сделать чтоб ардуино запоминал сколько раз она уже была нажата?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вы, простите по какой специальности «учитесь»?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

да изменил время, а коментарии нет. микро и наносистемная техника 1 курс

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

ну добавлю я кнопку, а как сделать чтоб ардуино запоминал сколько раз она уже была нажата?

Добавить переменную и менять её значение при каждом нажатии кнопки.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

И прочитайте про условные операторы си. И, вообще, чего Вы в программирование полезли — Вам явно в песочницу.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Обратите внимание на первый пост. Как построена первая фраза.Как по мне ТС даже не удосужился задание своими словами передать. Как препод выдал, так сюда и вбухал.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

микро и наносистемная техника

Т.е. Вы хотите сказать, что Вы будущий инженер? И пришли сюда с таким тривиальным вопросом? Вы даже не осознаёте степени его тривиальности! Моя 10-летняя внучка уже спит, а то я её бы спросил, не хочет ли она Вас проконсультировать.

Идите ка Вы изучать язык программирования. Обойтись без этого инженеру всё равно не получится, а сейчас Вы просто дебилом выглядите с такими заходами, уж простите мой французский.

Источник

Моргание светодиода ардуино с разной частотой

int ledPin8 = 8; // сетодиод
int ledPin9 = 9; // сетодиод
int val8=0; // счетчик на 8й пин
int val9=0; // счетчик на 9й пин

void setup()
<
pinMode(ledPin8, OUTPUT); // это выход — светодиод
pinMode(ledPin9, OUTPUT); // это выход — светодиод
>

void loop()
<
if(val8==500) // если прошел необходимый промежуток времени
<
if(ledPin8==LOW) // если светодиод не горит
<
digitalWrite(ledPin8, HIGH); // зажигаем светодиод
>
else // если светодиод горит
<
digitalWrite(ledPin8, LOW); // гасим светодиод
>
val8=0; // обнуляем счетчик
>

if(val9==1000) // если прошел необходимый промежуток времени
<
if(ledPin9==LOW) // если светодиод не горит
<
digitalWrite(ledPin9, HIGH); // зажигаем светодиод
>
else // если светодиод горит
<
digitalWrite(ledPin9, LOW); // гасим светодиод
>
val9=0; // обнуляем счетчик
>

val8=val8+1; // наращивание счетчика
val9=val9+1; // наращивание счетчика
delay(1);
>

const int ledPin8 = 8;
const int ledPin9 = 9; // the number of the LED pin

// Variables will change:
int ledState8 = LOW;
int ledState9 = LOW;// ledState used to set the LED
long previousMillis8 = 0;
long previousMillis9 = 0;// will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval8 = 1000;
long interval9 = 500;// interval at which to blink (milliseconds)

void setup() <
// set the digital pin as output:
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
>

void loop()
<
// here is where you’d put code that needs to be running all the time.

// check to see if it’s time to blink the LED; that is, if the
// difference between the current time and last time you blinked
// the LED is bigger than the interval at which you want to
// blink the LED.
unsigned long currentMillis8 = millis();

if(currentMillis8 — previousMillis8 > interval8) <
// save the last time you blinked the LED
previousMillis8 = currentMillis8;

// if the LED is off turn it on and vice-versa:
if (ledState8 == LOW)
ledState8 = HIGH;
else
ledState8 = LOW;

// set the LED with the ledState of the variable:
digitalWrite(ledPin8, ledState8);
>
unsigned long currentMillis9 = millis();

if(currentMillis9 — previousMillis9 > interval9) <
// save the last time you blinked the LED
previousMillis9 = currentMillis9;

// if the LED is off turn it on and vice-versa:
if (ledState9 == LOW)
ledState9 = HIGH;
else
ledState9 = LOW;

// set the LED with the ledState of the variable:
digitalWrite(ledPin9, ledState9);
>
>

Источник

Arduino.ru

Смена частоты моргания диодом по нажатию кнопки

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Купил себе стартовый набор Ардуино, чтобы играться, самому и с дочерью :) Опыта в программировании нет никакого вообще (BASIC в 7 классе не в счёт), но не гуманитарий, так что осваиваюсь. Собственно вопрос: написал программу, хочу чтобы она моргала светодиодом с частотой 10 Гц, при однократном нажатии кнопки переходила на частоту 2 Гц, по следующему нажатию выключала диод, и опять по кругу. Вот листинг:

По факту диод всегда моргает с частотой 10 Гц, и не реагирует на кнопку. Есть подозрение, что дело в реализации моргания с помощью delay(t) — выполнение программы прерывается, и обработки нажатия не происходит. Прав ли я?

Извините за глупый вопрос.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

А также делай надо сменить на милис

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Женёк, при запуске скетча Вы попадаете в цикл while (mode == 0) , который будет выполняться бесконечно (выхода из него нет), то есть до следующего перезапуска скетча.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

vosara, c копировал ваш код, скомпилировал и залил в плату. Диод моргает странно, два короткие вспышки (примерно по 100 мс как раз), потом пауза на полсекунды, и опять две вспышки. На кнопку не реагирует.

Araris, спасибо! То есть надо в конце каждого блока while считывать значение кнопки что ли?

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

вы бы вообще ушли от while

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Araris и vvadim правы надо уйти от while что я и сделал заменил while на if а кнопка не работает потому что строчку № 48 нужно вынести из if что я и сделал в прилагаемом коде Хотя проблема с делай осталась и кнопку нужно держать нажатой больше одной секунды. Я специально не переписываю Ваш код а только исправил чтобы вам было легче разобраться

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Я мигание поместил бы прямо в loop(), примерно так :

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

vvadim, спасибо!

vosara, вы заменили внутри функции setMode(mode) все циклы while на if? Но я не понимаю, почему так работает :) Внутри конструкции if всё равно нет проверки состояния переменной mode, так же как у меня в while.

Я хочу написать функцию для моргания (чтобы вызывать её из функции setMode), вот код:

Потом я вызываю эту функцию из setMode

Но ничего не работает, диод не моргает, на кнопку не реагирует.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

По поводу Вашего кода и желания. Хороший пример дал Araris просто модифицируйте его, если нужна функция возьмите код с 35 строки по 41 и вынесите отдельно.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Кстати, ваш код из предыдущего комментария не работает :( Скопировал его с форума, залил на контроллер, диод дважды моргает быстро, потом пауза на полсекунды. На кнопку не реагирует.

Код Araris тоже не работает, по крайней мере если его взять и скопировать. Он даже не компилируется, т.к. переменная mode не объявлена.

То есть в цикле while возможно только внутреннее изменение условия, а в if() — внешнее?

И есть мысли почему моя функция Blink() не работает? Вы поймите, если бы мне нужен был готовый результат, я бы пошёл в интернет и скачал готовые коды, библиотеки и т.п. Я разобраться хочу, что у меня не так.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Код Araris тоже не работает, по крайней мере если его взять и скопировать. Он даже не компилируется, т.к. переменная mode не объявлена.

Виноват-с, в строках 35, 37, 39 поменяйте mode на l mode.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Проверил в протеусе кнопка не работает по причине отсутствия подтягивающего резистора. Поставте и будет работать.

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Всё равно не работает. Моргает 10 Гц, на кнопку не реагирует. Через некоторое время просто ровно горит.

Резистор стоит на землю, 10 кОм.

Всё-так подскажите кто знает, где у меня в функциях ошибка? Полный листинг

То есть я хочу иметь отдельную функцию debounce, которая обрабатывает нажатие кнопки, и возвращает текущее состояние. И отдельную функцию моргания, которая моргает указанным диодом с указанной частотой. Просто если я потом захочу добавить ещё 5 диодов с разной частотой моргания, то мне нужно будет всего лишь добавить 5 переменных для их контактов, 5 переменных для интервалов, и вызвать функцию Blink нужное количество раз.

Источник

Adblock
detector