Не меняя местами провода измените программу так чтобы огонек бегал в обратном направлении

Доброго времени суток всем любителям и профессионалам работающим в среде ардуино. Купил сыну конструктор Амперка, там есть эксперимент: «бегущий огонек» ( http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-. ), собрали. переписали скетч. огенек дествительно бежит в одном направлении от начала до конца шкалы и снова от начала , а нам бы хотелось, чтобы он бегал туда и обратно.

Попробовал переписать скетч по своему разумению. НО получилось, что огоньки бежгут с двух концов сведодиодной шкалы навстречу друг другу до середины шкалы, и снова так же. Результат для меня не ожиданный, тк я думал вообще работать не будет. Подскажите пожалуйста решение для того, чтобы огонек бегал туда и обратно. Заранее спасибо! вот мой скетч, почему-то не копируются номера строк, если кто подскажет ак их копировать, буду очень признателен.

[code] #define FIRST_LED_PIN 2 #define LAST_LED_PIN 11 void setup() < for (int pin = FIRST_LED_PIN; pin void loop() < unsigned long int ms = millis(); int vpered, nazad; vpered = FIRST_LED_PIN + (ms / 120) % 10; nazad = LAST_LED_PIN — (ms / 120) % 10; int pin = vpered; digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); if (vpered = 11) > [/code]

  • Войдите на сайт для отправки комментариев

Ср, 12/07/2017 — 17:21
prohor-nastya

с номерами строк понятно, сайт их сам подписал. =)

Бегущий огонёк на Arduino или гирлянда на минималках

Внимание ошибка в первом сообщении! Огоньки бегут на встречу друг другу, сталкиваются на середине бегут в обратном направлении и снова бегут на встречу друг другу. =0

  • Войдите на сайт для отправки комментариев

Ср, 12/07/2017 — 17:46

По ссылке в самом конце эксперимента есть «Задания для самостоятельного решения». Вы бы их сделали. 🙂 А именно 3 и 4. Из того, что у Вас в них получится, ну совсем просто сделать то, что Вы сейчас хотите.

Сделаете цикл в котором бежит в одну сторону (задание 3), измените цикл так чтобы бежало в обратную (задание 4), потом просто вставляете эти циклы в скетч один за другим и всё!

  • Войдите на сайт для отправки комментариев

Ср, 12/07/2017 — 17:57
prohor-nastya

  • Войдите на сайт для отправки комментариев

Ср, 12/07/2017 — 18:14
prohor-nastya

видео к первому скетчу:

  • Войдите на сайт для отправки комментариев

Ср, 12/07/2017 — 18:36

стр. 22 вместо «=» надо «= forum-post-footer clear-block»>

  • Войдите на сайт для отправки комментариев

Вс, 16/07/2017 — 11:23
prohor-nastya

Да, я так же подумал. но решения не нашел. т.е. я думал: она и будет выполнять по порядку весь скетч, а получилось она выполняет одновременно.

  • Войдите на сайт для отправки комментариев

Вс, 16/07/2017 — 11:34
prohor-nastya

Читайте также:
Программа отжиманий для новичков

Доброго времени суток, всем.

Спасибо, kalapanga, сделал как вы сказали. Скетч в таком виде на много проще. Зачем было привязывать его к счетчику времени? вот видео:

#Arduino — 09 — Управление номером пина при помощи переменной. Бегущий огонёк.


#define FIRST_LED_PIN 2 #define LAST_LED_PIN 11 void setup() < for (int pin = FIRST_LED_PIN; pin void loop() < for (int pin = FIRST_LED_PIN; pin for (int pin = LAST_LED_PIN; pin >= 2; pin— ) >

Ну и просьба: если есть не коррекности пожалуйста укажите, кто чем может. =)

  • Войдите на сайт для отправки комментариев

Вс, 16/07/2017 — 11:56

В самом простейшем варианте, когда огоньки бежали в одну сторону, бесконечно выполнялся всего один цикл. В качестве этого цикла использовался собственно цикл loop. Когда программа огоньков усложнилась, одним циклом уже стало не обойтись. Решить задачу можно было многими способами.

Под счётчиком времени Вы по видимому millis() имеете ввиду? Оно Вам в будущем всё равно пригодится. Смотрите в примерах скетчи Blink и BlinkWithoutDelay.

  • Войдите на сайт для отправки комментариев

Вс, 16/07/2017 — 11:47

const byte pins[] = ;// массив ног const byte num = 10;// колличество ног const uint32_t time = 100; // шаг 0.1сек int ii = 0;// текущая нога bool dir = 1; // направление движения 1 вперед / 0 назад void setup() < for (int i = 0; i < num; ++i) < pinMode(pins[i], OUTPUT); digitalWrite(pins[i], LOW); >> void loop() < static uint32_t past = 0; if (millis() — past >= time) < digitalWrite(pins[ii], LOW); if (dir) < ++ii; if (ii >= num) dir = 0; ii = ii — 2;> else < —ii; if (ii < 0) dir = 1; ii = 1; >digitalWrite(pins[ii], HIGH); > >

  • Войдите на сайт для отправки комментариев

Пнд, 17/07/2017 — 12:08
prohor-nastya

qwone, спасибо за вариант решения.

для меня, честно сказать очень сложно.

const byte — зачем константам приставка byte, ?

bool — вообще в справочнике не нашел.

и сам цикл к сожалению не понял как работает.

если не трудно подпишите коментарии к работе цикла.

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

  • Войдите на сайт для отправки комментариев

Пнд, 17/07/2017 — 13:25
prohor-nastya

Последняя просьба по бегущим огонькам:

У меня 9 светодиодов, 3 — зеленых, 3 — желтых, 3 — красных (см. видео) . Я могу заставить бегать огонек по зеленым , по желтым , по красным по отдельности,

а как заставить бегать огонек одновременно (синхронно) по трем цветам?

т.е. 3 вариации, 2-х циклов for , должны выполнятся одновременно. .

  • Войдите на сайт для отправки комментариев

Пнд, 17/07/2017 — 13:58
prohor-nastya пишет:

Последняя просьба по бегущим огонькам:

У меня 9 светодиодов, 3 — зеленых, 3 — желтых, 3 — красных (см. видео) . Я могу заставить бегать огонек по зеленым , по желтым , по красным по отдельности,

а как заставить бегать огонек одновременно (синхронно) по трем цветам?

Читайте также:
Программа для записи звука с синтезатора на компьютер

т.е. 3 вариации, 2-х циклов for , должны выполнятся одновременно. .

Не зацикливайтесь на циклах! 🙂 Вы можете свою программу поведения светодиодов вообще кучей идущих друг за другом включений-выключений описать. И всё это будет благополучно крутиться в цикле loop. Всё остальное делается для сокращения текста кода, его удобочитаемости, переносимости. А так мало ли какое поведение светодиодов вы задумаете.

По поводу последней модификации, ну смотрите. Сейчас у Вас каждое состояние характеризуется тем, что горит один светодиод. Возможных состояний 9. Вы крутите цикл 9 раз. А будет гореть за раз 3 светодиода, состояний получается 3. Вот вам и нужно прокрутить в цикле 3 состояния.

Зажигаете 1-й зелёный, 1-й желтый, 1-й красный, пауза, гасите их, зажигаете 2-е .

Сделайте хотя бы в одну сторону. Туда-обратно на трёх светодиодах вряд ли красиво получится.

  • Войдите на сайт для отправки комментариев

Источник: arduino.ru

Не меняя местами провода, измените программу так, чтобы огонёк бегал в обратном направлении.

В этом эксперименте мы создаем маленькую клавиатуру, на которой можно сыграть несколько нот.

Схема

Код

#define BUZZER_PIN 13

#define FIRST_KEY_PIN 7

#define KEY_COUNT 3

int keyPin = i + FIRST_KEY_PIN;

boolean keyUp = digitalRead(keyPin);

int frequency = 3500 + i * 500;

tone(BUZZER_PIN, frequency, 20);

Вопросы для проверки себя

Почему мы не настраивали порты, к которым подключены кнопки, как INPUT, но устройство работает?

Все порты на плате изначально имеют значение INPUT, так что задавать их не обязательно.

Каким образом мы избежали написания отдельного когда для чтения каждой кнопки?

Благодаря тому, что в начале программы мы определили FIRST_KEY_PIN и KEY_COUNT, мы можем подключать произвольное количество кнопок к любым идущим друг за другом цифровым пинам, и для корректировки программы нам не придется менять параметры цикла for.

Почему разные «ноты», издаваемые пищалкой, звучат с разной громкостью?

Чем выше частота ноты, тем громче она звучит.

4.Для чего мы использовали оператор логического отрицания!?

Поскольку мы собрали схему с подтягивающим резистором, при нажатии кнопки мы будем получать на соответствующем порте 0. Мы используем логический оператор отрицания «не»!. Если keyUp имеет значение 0, выражение!keyUp будет иметь значение 1 и наоборот.

Задания для самостоятельного решения

Сделайте так, чтобы наше пианино звучало в диапазоне от 2 кГц до 5 кГц.

Источник: cyberpedia.su

Бегущие огни ардуино схема подключения. Бегущие поворотники на ленте WS2812 и Arduino. Задания для самостоятельного решения

Объявляется переменная timer . Это целое число, с именем timer , и эта строка устанавливает это число равным 200. Как вы могли заметить, большинство строк программ Arduino заканчиваются точкой с запятой. При написании и изменении собственных скетчей Arduino не забываете о точке с запятой, поскольку строка без такого знака вызовет ошибку компиляции.

void setup() // use a for loop to initialize each pin as an output:
(Настройка) конфигурирует контакты платы с 3 по 7 как выходы с использованием цикла for, который представляет собой специальный цикл, который несколько раз повторяет небольшую часть кода на основе условия, используя счетчик приращений. Условие проверяется каждый раз когда повторяется цикл. Цикл продолжит выполнения кода внутри него до тех пор, пока условие истинно.

Читайте также:
Программы для диагностики автомобилей КАМАЗ

Изначально переменная thisPin установлена в 3, условие заключается в том, что этот номер Pin должен быть меньше 8, а счетчик приращений увеличивает это значение переменной Pin при каждом повторении цикла ( thisPin ++ — это то же самое, что и thisPin = thisPin + 1 ). Итак, на первом прохождении уикла, контакт с номером 3 устанавливается в режим выхода. Во второй проход уже контакт 4 конфигурируется на выход. И так далее, пока thisPin не станет равным 8, после чего условие thisPin станет ложным и код прекратит цикл, продолжая работу с остальной частью программы. Это может показаться слишком сложным способом сделать простую вещь, но программисты любят эффективность! Вы можете так же легко выполнить конфигурацию контактов следующим образом, так сказать «в лоб»:

void setup() // initialize each pin as an output:
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
>

Вы можете заметить, что, как правило, при программировании для Arduino одну и ту же задачу можно решить разными способами. Кодирование похоже на создание вещей в вашей мастерской: вы, как правило, используете любые инструменты, которые у вас есть. Поэтому давайте использовать цикл for для чего-то веселого. анимации!

// loop from the lowest pin to the highest:
for (int thisPin = 3; thisPin
Цикл начинается с того же самого оператора, что и раньше, при увеличении от меньшего числа до большего. Внутри цикла for код включает светодиод на контакте Pin , останавливается на 200 мс (Мы ч вами ранее присвоили это число переменной timer ), затем код выключает этот светодиод. Далее цикл повторяется, но уже со следующим светодиодом

// loop from the highest pin to the lowest:
for (int thisPin = 7; thisPin >= 3; thisPin—) // turn the pin on:
digitalWrite(thisPin, HIGH);
delay(timer);
// turn the pin off:
digitalWrite(thisPin, LOW);
>
>

Следующая часть кода — еще один цикл, но он начинается с контакта платы с наибольшим номером и использует thisPin— (так называемый Декримент, уменьшение на единицу), что равносильно выражению thisPin = thisPin-1 . Можно писать и так, и так, но thisPin— короче и эффективнее. Программа выходит из этого цикла когда thisPin становится меньше 3 (условие > = 3 , больше или равно трем, то есть 2). Конечная закрывающая фигурная скобка закрывает основной (главный, большой) цикл. Таким образом, эта программа подсвечивает каждый светодиод по порядку, затем изменяет порядок на противоположный и снова зажигает светодиоды.

Принципиальная схема

Схема на макетке

Обратите внимание

Обратите внимание, что в данном эксперименте резисторы установлены между катодами и землей в отличие от эксперимента пульсар .

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru