Бегущий огонек (помогите новичку...)
- Войдите на сайт для отправки комментариев
Доброго времени суток всем любителям и профессионалам работающим в среде ардуино. Купил сыну конструктор Амперка, там есть эксперимент: "бегущий огонек" ( 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 <= LAST_LED_PIN; ++pin) pinMode(pin, OUTPUT); } 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) {int pin = nazad; digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); } } [/code]
с номерами строк понятно, сайт их сам подписал... =)
Внимание ошибка в первом сообщении! Огоньки бегут на встречу друг другу, сталкиваются на середине бегут в обратном направлении и снова бегут на встречу друг другу... =0
По ссылке в самом конце эксперимента есть "Задания для самостоятельного решения". Вы бы их сделали. :) А именно 3 и 4. Из того, что у Вас в них получится, ну совсем просто сделать то, что Вы сейчас хотите.
Сделаете цикл в котором бежит в одну сторону (задание 3), измените цикл так чтобы бежало в обратную (задание 4), потом просто вставляете эти циклы в скетч один за другим и всё!
Спасибо, попробуем...
видео к первому скетчу:
https://yadi.sk/i/os9w5evJ3Kz4UL
стр. 22 вместо "=" надо "==". Но это мелочи, нужен признак как мы работаем в данный момент. Если вперед, то должны выполнятся строки 18-20 а иначе строки 25-27, но не одновременно.
Да, я так же подумал... но решения не нашел... т.е. я думал: она и будет выполнять по порядку весь скетч, а получилось она выполняет одновременно.
Доброго времени суток, всем...
Спасибо, kalapanga, сделал как вы сказали. Скетч в таком виде на много проще. Зачем было привязывать его к счетчику времени? вот видео:
https://yadi.sk/i/gNp9UNwU3L6TcJ
Ну и просьба: если есть не коррекности пожалуйста укажите, кто чем может... =)
Уря! Заработало!
В самом простейшем варианте, когда огоньки бежали в одну сторону, бесконечно выполнялся всего один цикл. В качестве этого цикла использовался собственно цикл loop. Когда программа огоньков усложнилась, одним циклом уже стало не обойтись. Решить задачу можно было многими способами.
Под счётчиком времени Вы по видимому millis() имеете ввиду? Оно Вам в будущем всё равно пригодится. Смотрите в примерах скетчи Blink и BlinkWithoutDelay.
qwone, спасибо за вариант решения.
для меня, честно сказать очень сложно...
const
byte - зачем константам приставка
byte, ?bool - вообще в справочнике не нашел...
и сам цикл к сожалению не понял как работает.
если не трудно подпишите коментарии к работе цикла.
загрузил в ардуинку, диоды не равномерно замигали, а потом просто стали гореть, но не все...
Последняя просьба по бегущим огонькам:
У меня 9 светодиодов, 3 - зеленых, 3 - желтых, 3 - красных (см. видео) . Я могу заставить бегать огонек по зеленым , по желтым , по красным по отдельности,
а как заставить бегать огонек одновременно (синхронно) по трем цветам?
т.е. 3 вариации, 2-х циклов for , должны выполнятся одновременно... ???
Последняя просьба по бегущим огонькам:
У меня 9 светодиодов, 3 - зеленых, 3 - желтых, 3 - красных (см. видео) . Я могу заставить бегать огонек по зеленым , по желтым , по красным по отдельности,
а как заставить бегать огонек одновременно (синхронно) по трем цветам?
т.е. 3 вариации, 2-х циклов for , должны выполнятся одновременно... ???
Не зацикливайтесь на циклах! :) Вы можете свою программу поведения светодиодов вообще кучей идущих друг за другом включений-выключений описать. И всё это будет благополучно крутиться в цикле loop. Всё остальное делается для сокращения текста кода, его удобочитаемости, переносимости. А так мало ли какое поведение светодиодов вы задумаете.
По поводу последней модификации, ну смотрите. Сейчас у Вас каждое состояние характеризуется тем, что горит один светодиод. Возможных состояний 9. Вы крутите цикл 9 раз. А будет гореть за раз 3 светодиода, состояний получается 3. Вот вам и нужно прокрутить в цикле 3 состояния.
Зажигаете 1-й зелёный, 1-й желтый, 1-й красный, пауза, гасите их, зажигаете 2-е ....
Сделайте хотя бы в одну сторону. Туда-обратно на трёх светодиодах вряд ли красиво получится.
ААА. не могу понять как это сделать...
как ключить сразу 3 светодиода?
Простите я не соображаю.
надо, наверное, массив нужных пинов прописать и оттуда брать номер пина который должен работать???
надо, наверное, массив нужных пинов прописать и оттуда брать номер пина который должен работать???
Да ну какой массив!
Сейчас Вы в цикле устанавливаете высокий уровень на пине pin, ждёте паузу, низкий уровень на pin, всё повторяем 9 раз. А сейчас вам нужно: Установить выс.уровень на пине pin, установить высокий уровень на пине pin+3, установить высокий уровень на пине pin+6, пауза, установить низкий уровень на пине pin, установить низкий уровень на пине pin+3, установить низкий уровень на пине pin+6, повторить 3 раза.
kalapanga, я не понимаю как это в коде записать... Вы уж простите, но у меня каша в голове, даже идеи нормальной нет как это можно записать в программе.
они у меня все время друг за другом бегут...
Пожалуйста дайте код... если не трудно.
Вот на что у меня хватило мозгов:
Лампы зажигаются последовательно, а как сделать, чтоб загорались одновременно???
Все до меня до перло...!!!
Вот как я хотел:
Я просто не знал, что в одних скобках надо писать...
Код очень громоздкий надо применять какойто алгоритм... Я думаю...
Так а цикл-то зачем выкинули?
Вот вот, я же говорю...
Спасибки!!!
Вот теперь я понял как работает цикл for.
бегущий огонек должен светиться таким образом, что сначала загорается 1 светодиод потом 2, потом 3, и т.д. до 10-го
Потом обратно от 10 до 1, и так огонек должен пробежать туда и обратно 20 раз. помогите как это сделать
бегущий огонек должен светиться таким образом, что сначала загорается 1 светодиод потом 2, потом 3, и т.д. до 10-го
Потом обратно от 10 до 1, и так огонек должен пробежать туда и обратно 20 раз. помогите как это сделать
Написать программу по заданному лагаритму
бегущий огонек должен светиться таким образом, что сначала загорается 1 светодиод потом 2, потом 3, и т.д. до 10-го
Потом обратно от 10 до 1, и так огонек должен пробежать туда и обратно 20 раз. помогите как это сделать
Ставишь 10 СД на макетке в шеренгу по одному. Берешь 18650. "+" к анодам СД. К минусу подпаиваешь проволочку и водишь ей по катодам туда-сюда. Я проверил, у меня работает!
ЗЫ: резисторы не обязательно - на 20 раз и так сойдет
можете написать в виде кода
Здесь код ЗА ТЕБЯ пишуть тока за деньги. Поэтому, 1000р
каждому!
можете написать в виде кода
Легко!
я новенькая поэтому не знала как это сделать, если это Задел вас то простите
Вы пользуетесь google-translate?
я новенькая поэтому не знала как это сделать
Если ты не ходило на лекции, это не наши проблемы
я новенькая поэтому не знала как это сделать
Если ты не ходило на лекции, это не наши проблемы
Та скоро строем походит.
Та скоро строем походит.
Если новенькАЯ и не зналА, то вряд ли.
Та скоро строем походит.
Если новенькАЯ и не зналА, то вряд ли.
То еще проверить надо, пол определяется концом, а не окончанием.