Подключение ардуины к габаритам автомобиля
- Войдите на сайт для отправки комментариев
Вс, 03/06/2012 - 22:39
Подключил цифровые входы ардуино с внуир. подтяжкой через диоды шоттки к:
1. Ручному тормозу авто. При включении ручника цепь садится на землю. Все работает. В сериал порту пишет когда ручник вкл. - выкл.
2. К габаритам. При включении габаритов в цепи появляется питание +12В. В сериал порту ничего не пишется вообще. Ардуино не прошивается при таком подключении. Диод подключен верно. Где ошибка?
Видимо это связано с тем, что в первом случае минусом управляется, а во втором плюсом.
Вот схема
Подключаюсь к комбинации приборов, к сигналам на светодиоды.
Попробуйте отключить внутреннюю подтяжку с 19 вывода.
хм, а теоретически это что даст? не спалю?
Нет, не спалите. Просто когда пропадет 12 вольт с габаритов, лампочка в приборке через диод тянет пин к минусу, в полне возможно, что из-за подтяхки к +5В не получется на пине снизить напряжение до поргового.
А при таком подключении светодиод не будет гореть в полнакала?
Это как это в полнакала?
Ну я имею ввиду что с ардуины придет 5в на светодиод.... а с бортсети обычно 12В.
Поэтому и спрашиваю, без подтяжки не будет ардуино питать светодиод в полнакала?
Не понял.... ????
Ну я имею ввиду что с ардуины придет 5в на светодиод.... а с бортсети обычно 12В.
Поэтому и спрашиваю, без подтяжки не будет ардуино питать светодиод в полнакала?
Будет. Только очень маленьким током. И происходить это будет не "без подтяжки", а именно "с подтяжкой". Что есть подтяжка? Подключение ноги, через резистор 20K к питанию дуины. Следовательно когда вы уберете 12v с диода, то ток пойдет 5v->резистор подтяжки->нога->диод->светик->земля.
И да, кстати, можете еще скетч показать публике... мало-ли что там.
А, понял. Просто на схеме нарисованны лампочки, а не светодиоды.
Это не код, а чер-ти что.....
вы что интернет экономите? Где вся управляющая логика? Я понимаю что там по вашему мнению "все в порядке". И скорее всего это так. Но и вариантов когда "подскользнулись на ровном месте" - бывает куча. Почему сразу не показать скетч целиком? Как есть? ctrl-c, ctrl-v.
Если там все нормально - все. забыть и не думать больше об этом.
Извините, хотел как проще.
Исправляюсь...
Ну первая причина по которой "не работает" и "Ардуино не прошивается при таком подключении" ясна.
В схеме вы нарисовали пины 16,19, а в скетче используете 0,1
Либо вы дали неправильную информацию о подключении, либо подключили 16,19, а читать пытаетеся 0,1
Кроме того. 0,1 - уже занят до вас :) На них работает Serial (и скетчи заливаются). Так что "освободите место". Переезжайте на использование других пинов. Тех же 16,19
Ну и, не существенно, но я бы выкинул строчку 38. Зачем задержка между чтениями двух пинов? Пусть сразу про два говорит, раз в секунду.
p.s. На всяк случай, пины 2,3 - у вас тоже заняты. Спидометром и тахометром. Так что "от 4-того и выше" использовать можно.
И еще, по хорошему, в setup нужно бы добавить, в явном виде Serial.begin
Спасибо.
С схеме действительно ошибочно указано 16, 19 - реально подключено к 0 и 1.
Итак:
1. Освободить пины 0 и 1
2. Serial.begin
И самое главное, как советовали ранее подтяжку digitalWrite(SmallLightPin, HIGH) убирать или нет?
По подтяжке: я бы не убирал. в моем понимании без нее пин, при включении габаритов будет ловить "случайный мусор-помехи из эфира". То 0 возвращать, то 1.
Обратной стороной медали - действительно при выключении габаритов может быть "слабое свечение" диода. От ноги ардуины. Ну думая "маловероятно". Слишком маленький ток. Не хватит его что-бы "зажечь светик" (тем более 12-ти вольтовый).
Зачем Максим советовал выключить подтяжку - я не понял. Хотя в схемотехнике, вроде, он разбирается лучше меня.
В любом случае можете попборовать и так и так. На безопастность это не влияет. В худщем случае - в serial будут видны ложные "срабатывания", и только.
>Извините, хотел как проще.
Если не хотите ветку засирать "длинными простынями скетчей" - можно код вставлять в "свернутом виде". На вкладке "дополнительно".
Тут есть картинки где это делать http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
И, еще. Постарайтесь не вписывать свой комментарий к коду, внутрь своего кода. Пользуйтесь кнопкой "Предпросмотр". Во первых он там менее заметен, во вторых мешает скопировать код и вставить в свою arduinoIDE, не дает скомпилировать.
Я бы, что-бы было удобнее читать в мониторе, выводил вот так пины
Ну и если уж, совсем попридиратся, пины лучше объявлять не переменными (так как они никогда не меняются), а через #define
#define HandBreakPin 4 // тормозной пин
Вообщем-то не существенно, на пару байт памяти - экономия на каждом пине. И пара тактов при вызове функции (не нужно читать переменную).
И дебаг, то же можно сделать (если вы не собираетесь включать/выключать этот режим "на ходу", а только в момент компиляции скетча
#define DEBUG 1
тогда "отладочную логику" - тоже можно сделать на препроцессорных диррективах
Тогде, когда вы сделатте #define DEBUG 0
этот кусок кода вообще проигнорируется компилятором и не будет занимать память. Для ArduinoIDE он перестанет существовать, до тех пор пока DEBUG опять не объявят как 1.
И хорошо бы, все-таки, увидеть скетч целиком (вы что, стесняетесь? или там копирайт великий?) . В функциях SpeedImpulse_on, TahometrImpulse_on - тоже можно выстрелить себе в ногу. От которой ваша логика "при отладке пока не использую" может поломатся.
Уф. Да, учту все твои предложения.
Что касается скетча в полном объеме, у меня там мусора много, комментариев, закомметированных мест, пометок - что не забыть и т.д. Копирайты ни при чем :), просто ругать будете за засорение
Ну а функции (относительно без мусора) , вот они, критика приветсвуется:
Все. Утомили. Больше талдычить "дайте скетч целиком" - не буду. Кому это нужно, вам или мне?
Вы все время что-то пытаетесь "сократить", вы уверены что "то что вы скрыли" - не играет роли?
Например строчка
Tahometr_impulse_count++;
Может вызывать пробелемы если переменную Tahometr_impulse_count объявили без ключевого слова volatile. Как ее объявили - не ведомо. Партизан на допросе цедит ответы сквозь зубы.
По тому что "видно".
Serial.print в функциях обработки переменных - вызывать нельзя. Это "слишком долгая операция".
Во вторых: логика функций-обработчиков должна быть минимальная. Нужно выйти из этой функции быстро, как только возможно. Она же прервала нормальный поток. Запретила все прерывания и т.п. В ней нужно делать только "самое необходимое" - увеличивать счетчик, взводить, если нужно, какой-нибудь флаг указывающий что было прерывание. А все расчеты, Serial.print и т.п. - делать внутри loop, глядя на эти счетчики и флаги.
Правда для этого - прийдется отказаться от использования delay внутри loop, везде использовать только функцию millis(). Loop должен крутиться "без запоров". Как можно быстрее и чаще. Что-бы возникала иллюзия "одновременности".
Извиняюсь, еще раз, вот весь скетч, но со всем мусором.
Этот скетч набор функционала пока не связанного друг с другом.
В планах скетс будет управлять переключением КПП, видеокамер, света
Библиотека Mystepper.h аналог stepper.h (убрано удержание ШД)
Ну так и есть. volatile забыли.
Глобальные переменные которые может менять функция обработчик прерывания - должны объявлятся с ним (может и без него будет работать, но сугубо от по фазе луны. если повезет). Почитайте доку http://arduino.ru/Reference/AttachInterrupt, обратите внимание на раздел ""Замечание по использованию". Там и про Serial есть, и про volatile.
Если LCDGear1_Indicate_PIN_XXX объявить как массив, то весь код можно привести в гораздо более читаемый вид. Не нужны "километровые портянки". Нужно же быть ленивым, когда нужно
Примерно так:
Спасибо, учту все эти замечания и потом выложу на суд.
P.S. Был в командировке