написание скетча
- Войдите на сайт для отправки комментариев
Чт, 14/04/2016 - 14:35
Приветствую всех. прошу не кидать камнями, так как новичок. пытаюсь сделать бегущий огонь, включающийся по сигналу от реле поворотов. то есть пока реле подает сигнал прерывистый, огоньки бегают. написал скетч, но почему то не работает. помогите.
#define IN_PIN 2 #define FIRST_LED 4 #define TOTAL_LEDS 10 #define LIGHT_TRESHOLD 1 int sign = digitalRead(IN_PIN); int ledPin = FIRST_LED; void setup() { pinMode(IN_PIN, INPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { int lightLevel = sign; bool play = lightLevel >= LIGHT_TRESHOLD; if (play) { digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); ledPin = (ledPin - FIRST_LED + 1) % TOTAL_LEDS + FIRST_LED; delay(3000); } else { digitalWrite(ledPin, LOW); } }
А с чего бы её работать, если Вы нигде в loop не читаете ничего с IN_PIN?
Вы уж читайте каждый раз, а то там мож давно че-нить поменялось, а Вы как прочитали один раз в самом начале, так по тому старому значению всю жизнь и живёте.
И, кстати,
был какой-то фильм с депардье и Рено. Там подростки угнали БМВ у конкретных пацанов. Те их догнали, остановили. Подростки с наглым видом выходят из машины и заявляют: "мы несовершеннолетние, и нам плевать на полицию". На что конкретные пацаны резонно ответили: "а мы не из полиции, и нам плевать, что вы несовершеннолетние".
Так и здесь. Или Вы житель этого форума, или нет. А новичёк там или ветеран - лично мне до лампочки.
1. читать IN_PIN нужно тоже в loop, первой строкой (например).
Прежде чем программа заработает, её необходимо скомпилировать. А вы этого еще не сделали. Разбирайтесь с ошибками компиляции, компилятор сообщает тип ошибки и номер строки в которой она обнаружена.
Упрощайте скетч, удаляя все лишнее. Когда от счетча останется только скелет, который все-таки не сможете скомпилировать, если сами не разберетесь, спрашивайте.
1. Сам код, отвечающий за бегущий огонь (строки 31-35), рабочий?
2. Код из строки 6 лучше перенести и вставить после 21 строки. Иначе выходит, Вы сначало опрашиваете порт, а потом определяете его на вход.
3. В таком виде как сейчас, Вы проверяете состояние реле только один раз, т. е. состояние переменной sign - не меняется.
Прежде чем программа заработает, её необходимо скомпилировать. А вы этого еще не сделали. Разбирайтесь с ошибками компиляции, компилятор сообщает тип ошибки и номер строки в которой она обнаружена.
А в чём проблема? Нормально всё компилируется.
А в чём проблема? Нормально всё компилируется.
Странно,
У меня не компилируются вызовы
вне тела функций
Действительно, странно.
Вы именно этот скетч компилировали или другой и просто помните? Если другой, то наверняка там была другая причина. Такой вызов вполне законен и у меня этот скетч компилируется нормально.
попробовал изменить
скомпилировался нормально. записался в контроллер тоже нормально. но не работает.
1. Удалите строки 4,6,26,27. Строку 29 измените на
if
( digitalRead(IN_PIN) )
Так "красивше", впрочем, это всё не так важно.2. Теперь о важном: что и откуда подаётся на IN_PIN ?
На макете вывел два провода 5 вольт и второй контакт. Замыкаю их каждую секунду имитируя работу реле поворотов. Пока замыкаю, происходит переключение диодов по очередности. Но задержка переключения с одного на другой три секунды. Видимо не там вставил delay
всем спасибо. получилось. изменил delay, и перенес строчку int.
еще вопрос. почему срабатывает от наводки на второй контакт? или это беда китайских плат? достаточно пальцем коснуться, как программа срабатывает.
еще вопрос. почему срабатывает от наводки на второй контакт? или это беда китайских плат? достаточно пальцем коснуться, как программа срабатывает.
Это Вы открыли для себя новое физическое явление и очень близки к изобретению антенны.
Притяните контакт к земле резистором в 1-5кОм - не будет срабатывать.
И ещё. Вот в этом месте написан какой-то бред:
digitalRead не может вернуть ничего, кроме HIGH или LOW. Эта строчка у Вас работает только потому, что LIGHT_TRESHOLD равна 1. Но выглядит это ужасно и непонятно. Гораздо логичнее написать.