для начала, вместо реле хочу подключить светодиоды, вот только не могу понять: кнопка старта подключить на 2 ногу, но замыкать на + или массу?? и еще: как светодиоды подключить, вернее какие резисторы нужны что бы не спалить выходы контроллера?
Правильно - помнить, как подключена кнопка, и правильно интерпретировать уровень на пине, к которому она подключена.
Еще правильно - вместе с каждой кнопкой устанавливать подтягивающий резистор. В случае кнопки замыкаемой на массу, можно использовать внутренние подтягивающие резисторы мк (pinMode(But1pin,INPUT); digitalWrite(But1pin,HIGH);), но иметь при этом LOW при замыкании кнопки. Не мешает, но требуется ПОМНИТЬ. При альтернативном подключении кнопки (замыкание на +) резистор следует ставить физически. При этом уровень для замкнутой кнопки - HIGH.
я установил резистор 10ком вместе с кнопкой, замыкается на массу, но не могу добится закономерности в работе. то светодиод постоянно горит, то не горит совсем, единственное что я уловил это отключение стартера через 8 секунд. короче говоря программа не совсем пашет(((
я установил резистор 10ком вместе с кнопкой, замыкается на массу
Еще правильно - вместе с каждой кнопкой устанавливать подтягивающий резистор. В случае кнопки замыкаемой на массу, можно использовать внутренние подтягивающие резисторы мк (pinMode(But1pin,INPUT); digitalWrite(But1pin,HIGH);), но иметь при этом LOW при замыкании кнопки.
я тоже led-ы подключал, но ничего. (( А что там подключать, включил через 220ом резисторы светодиоды на выходы 5, 6, 7 вместо реле, кнопку замыкаю на массу через 10ком резистор и ниче, они все вместе загораются и потом гаснут. (( работает удерживание кнопки на секунду, включается ACC, а если подольше подержать то Ignition.
мне нужно что бы кнопка срабатывала при отпускании
или как то по другому это реализовать? Просто я решил написать все сначала и по своему, а то рытся в чужой проге - легче выучить язык и самому написать!
В обязательном порядке нужно самому выучить язык и написать. Перевожу на русский.
До всех секций
#define btnPin 10 //компилятор заменит все встретившиеся ему btnPin на текст 10. Это НЕ переменная, это для удобства - вы не запоминаете цифры и при смене пина если что поменяете его только здесь.
в секции setup
pinMode(btnPin, INPUT); //переключение пина btnPin в режим ввода (чтобы читать из него)
digitalWrite(btnPin, HIGH); //устанавливаем высокое на пине, тем самым включая внутренний подтягивающий резистор. Никакие другие резисторы на выводе и кнопке не нужны, но кнопка замыкается на минус (GND)
в секции loop (тело программы)
if(digitalRead(btnPin) == LOW) { //если на пине LOW (по умолчанию HIGH но мы нажали кнопку и замкнули вывод на минус), ТО
while(digitalRead(btnPin) == LOW) пока держится LOW
delay(1); //ничего особо не делаем - задержка. Но это подвесит контроллер пока не отпустим кнопку, имейте ввиду
//Так как после цикла while у нас нет фигурных скобок - исполняется только один оператор delay. Все, что будет после него, исполнится один раз в рамках условия if когда "отпустит" while
//тут код, который выполнится посте отпускания кнопки
}
один блок только включает светодиод, потом так и остается включеным никак не отрубишь, а мне надо было что бы при первом нажатии включалось а при последующем выключалось, впринципе я этого добился но не четко работает ((
я выбрал ардуино потому что его можно заточить под любые нужды, я также собираюсь дистанционно заводить двигатель с помощью его. может в будущем мне захочется как то поменять программу управления. нет, готовое решение не для меня )))
blink977, прочитав последние сообщения темы я так понимаю, что у вас нечетко обрабатывается сигнал с кнопки? Если да, то взгляните в сторону использования прерывания: arduino.ru/Reference/AttachInterrupt. Это именно то,что вам нужно
Diemon, зачем? Не проще ли правильно написать программу? С этим прерыванием у него еще больше вопросов возникнет, его лучше оставить на будущее для внешних сигналов
blink977, кнопка у вас одна - значит и обработка должна быть также одна. То есть проверка на нажатие - одна! А уже в ней меняйте переменные типа boolean в зависимости от условий.
Например, если A and B то A = !A, B=!B. Если A и B==false то B=!B. То есть оперируйте переменными, а впоследствии вставьте блок обработки оных в рамках того же условия по проверке кнопки.
привожу один из блоков моей программы, нажатие кнопки и включение ignition и start.
проблема в следующем: после включения ignition у меня пауза в 1000мск, затем включается start и должен остатся включенным пока не 3-я нога не разомкнется с массой, тоесть после размыкания 3-й ноги с массой, start должен отключится, что и не происходит, он все равно остается включенным. что не так? сигнал с генератора коротит 3-ю ногу на массу, так что я подключаю провод безо всяких резисторов.
не всегда, только в начале. на 3-ей ноге будет LOW пока не погаснет лампа зарядки, как только она погаснет start сразу же должен отрубится. вот этого то он не делает ((
это потому что у тебя неправильно подключен сигнал генератора, да и сам код фигня..
начинай с этого : http://www.ladyada.net/learn/arduino/starterpack.html
пройдя все уроки поймешь как правильно подключить и код нормальный написать
я так и думал что через реле, только вот все это громоздкое получается! я уже не знаю куда мне от этих проводов и кнопок дется ))
щас работаю над процедурой дистанционного запуска двигателя, с использованием выхода сигналки на соленоид багажника. скорее всего в этом тоже помощь понадобится.
я так и думал что через реле, только вот все это громоздкое получается! я уже не знаю куда мне от этих проводов и кнопок дется ))
щас работаю над процедурой дистанционного запуска двигателя, с использованием выхода сигналки на соленоид багажника. скорее всего в этом тоже помощь понадобится.
спасибо
реле есть разного размера..
дистанционный запуск я тоже делал на свой гольф..:) все работало хорошо, только датчик нейтральной скорости не как не мог придумать куда и как поставить...
с нейтралкой я не буду парится, тем более что у меня механика, там просто некуда этот дачик ставить. если не будет поднят ручник, удаленный запуск не сработает и все!
допустим закончил я эту программу, жаль мне потом ардуину в машине оставлять! короче, снять с платы атмегу, засунуть в програматор, вычитать из атмеги бинарник с прошивкой, собрать плату на такой же атмеге, залить туда прошивку вычитанную из ардуины, и получить готовый девайс с реле, оптронами и так далее. получится?
что то не могу въехать (
для начала, вместо реле хочу подключить светодиоды, вот только не могу понять: кнопка старта подключить на 2 ногу, но замыкать на + или массу?? и еще: как светодиоды подключить, вернее какие резисторы нужны что бы не спалить выходы контроллера?
как только дотрагиваюсь до 2 ноги, светодиод подключенный к 5,6,7 ногам начинает беспорядочно мигать ((
в чем дело??
прочитайте эту же тему выше, там все расписано..
а как лучще кнопку ставить, на массу или +?
Правильно - помнить, как подключена кнопка, и правильно интерпретировать уровень на пине, к которому она подключена.
Еще правильно - вместе с каждой кнопкой устанавливать подтягивающий резистор. В случае кнопки замыкаемой на массу, можно использовать внутренние подтягивающие резисторы мк (pinMode(But1pin,INPUT); digitalWrite(But1pin,HIGH);), но иметь при этом LOW при замыкании кнопки. Не мешает, но требуется ПОМНИТЬ. При альтернативном подключении кнопки (замыкание на +) резистор следует ставить физически. При этом уровень для замкнутой кнопки - HIGH.
Выбирайте, что нравится
я установил резистор 10ком вместе с кнопкой, замыкается на массу, но не могу добится закономерности в работе. то светодиод постоянно горит, то не горит совсем, единственное что я уловил это отключение стартера через 8 секунд. короче говоря программа не совсем пашет(((
я установил резистор 10ком вместе с кнопкой, замыкается на массу
Еще правильно - вместе с каждой кнопкой устанавливать подтягивающий резистор. В случае кнопки замыкаемой на массу, можно использовать внутренние подтягивающие резисторы мк (pinMode(But1pin,INPUT); digitalWrite(But1pin,HIGH);), но иметь при этом LOW при замыкании кнопки.
что то в самой программе тоже не то (( кто нибудь может залить и проверить??
blink977, если программа не компилится - то компилятор выдает осмысленную ошибку, почему так происходит.
не програма компилится без ошибок. я все симитировал, и сигнал с генератора и все реле но никакого результата (
работает включение ACC и Ignition при удержании кнопки на секунду и две соответственно.
А при простом нажатии все три реле включаются вместе, и вырубаются через 8 секунд
Приведите ваш код
что то ты не так подключил, я проверял программу на led`ах все работало нормально
я тоже led-ы подключал, но ничего. (( А что там подключать, включил через 220ом резисторы светодиоды на выходы 5, 6, 7 вместо реле, кнопку замыкаю на массу через 10ком резистор и ниче, они все вместе загораются и потом гаснут. (( работает удерживание кнопки на секунду, включается ACC, а если подольше подержать то Ignition.
нужно подключить две кнопки на 2 и 3 таким образом:
а зачем 2 кнопки? на 3-ю ногу я подавал +5 вольт, имитируя горящую лампу генератора, но все равно не то было ((
генератор надо эмитировать с помощью кнопки.
попробую
Опробовал сегодня простую консрукцию для проверки кнопки, чтобы срабатывала по отпусканию. Работает)
можно поставить комменты, или разьяснить?
мне нужно что бы кнопка срабатывала при отпускании
или как то по другому это реализовать? Просто я решил написать все сначала и по своему, а то рытся в чужой проге - легче выучить язык и самому написать!
В обязательном порядке нужно самому выучить язык и написать. Перевожу на русский.
До всех секций
#define btnPin 10 //компилятор заменит все встретившиеся ему btnPin на текст 10. Это НЕ переменная, это для удобства - вы не запоминаете цифры и при смене пина если что поменяете его только здесь.
в секции setup
pinMode(btnPin, INPUT); //переключение пина btnPin в режим ввода (чтобы читать из него)
digitalWrite(btnPin, HIGH); //устанавливаем высокое на пине, тем самым включая внутренний подтягивающий резистор. Никакие другие резисторы на выводе и кнопке не нужны, но кнопка замыкается на минус (GND)
в секции loop (тело программы)
if(digitalRead(btnPin) == LOW) { //если на пине LOW (по умолчанию HIGH но мы нажали кнопку и замкнули вывод на минус), ТО
while(digitalRead(btnPin) == LOW) пока держится LOW
delay(1); //ничего особо не делаем - задержка. Но это подвесит контроллер пока не отпустим кнопку, имейте ввиду
//Так как после цикла while у нас нет фигурных скобок - исполняется только один оператор delay. Все, что будет после него, исполнится один раз в рамках условия if когда "отпустит" while
//тут код, который выполнится посте отпускания кнопки
}
вот пройди уроков http://www.ladyada.net/learn/arduino/lesson1.html
не очень понял суть кода. Зачем два одинаковых блока по проверке btnPin?
Последний блок будет выполяться с такой скоростью, что хер вы угадаете, когда кнопку надо бросить чтобы acc потух
И что за открывающася скобка после
И что за открывающася скобка после
у меня там стоял цикл do....while, потом я его убрал и эта скобка осталась
один блок только включает светодиод, потом так и остается включеным никак не отрубишь, а мне надо было что бы при первом нажатии включалось а при последующем выключалось, впринципе я этого добился но не четко работает ((
учится тебе лень вот и выходит так.. говорил же пройди все 5 уроков http://www.ladyada.net/learn/arduino/lesson1.html
учится тебе лень вот и выходит так.. говорил же пройди все 5 уроков http://www.ladyada.net/learn/arduino/lesson1.html
там нету ничего из того что мне надо ((
мне нужны конкретные примеры да я и не собираюсь в будущем программировать контроллеры, мне просто нужно запихнуть в машину эту кнопку, и все дела!
В тех пяти уроках есть ВСЕ, что тебе нужно.. а если лень то надо было покупать не arduino, a готовое решение - Start Engine button kit..
я выбрал ардуино потому что его можно заточить под любые нужды, я также собираюсь дистанционно заводить двигатель с помощью его. может в будущем мне захочется как то поменять программу управления. нет, готовое решение не для меня )))
Готового решения по твоей проблеме тоже нет)))
Вам все же следует определиться. Или
мне нужны конкретные примеры да я и не собираюсь в будущем программировать контроллеры, мне просто нужно запихнуть в машину эту кнопку, и все дела!
или
может в будущем мне захочется как то поменять программу управления. нет, готовое решение не для меня )))
Или готовое решение, или все же учить основы.
Еще вариант - заказывать доработку программы специалисту. Но это решение, видимо, тоже не для вас...
blink977, прочитав последние сообщения темы я так понимаю, что у вас нечетко обрабатывается сигнал с кнопки? Если да, то взгляните в сторону использования прерывания: arduino.ru/Reference/AttachInterrupt. Это именно то,что вам нужно
Diemon, зачем? Не проще ли правильно написать программу? С этим прерыванием у него еще больше вопросов возникнет, его лучше оставить на будущее для внешних сигналов
blink977, кнопка у вас одна - значит и обработка должна быть также одна. То есть проверка на нажатие - одна! А уже в ней меняйте переменные типа boolean в зависимости от условий.
Например, если A and B то A = !A, B=!B. Если A и B==false то B=!B. То есть оперируйте переменными, а впоследствии вставьте блок обработки оных в рамках того же условия по проверке кнопки.
привожу один из блоков моей программы, нажатие кнопки и включение ignition и start.
проблема в следующем: после включения ignition у меня пауза в 1000мск, затем включается start и должен остатся включенным пока не 3-я нога не разомкнется с массой, тоесть после размыкания 3-й ноги с массой, start должен отключится, что и не происходит, он все равно остается включенным. что не так? сигнал с генератора коротит 3-ю ногу на массу, так что я подключаю провод безо всяких резисторов.
сигнал с генератора коротит 3-ю ногу на массу, так что я подключаю провод безо всяких резисторов.
Вот это поясните пожалуйста - получается, что на этом выводе у вас всегда LOW?
не всегда, только в начале. на 3-ей ноге будет LOW пока не погаснет лампа зарядки, как только она погаснет start сразу же должен отрубится. вот этого то он не делает ((
кто нибудь?
кто нибудь?
это потому что у тебя неправильно подключен сигнал генератора, да и сам код фигня..
начинай с этого : http://www.ladyada.net/learn/arduino/starterpack.html
пройдя все уроки поймешь как правильно подключить и код нормальный написать
итак, условия изменились. буду делать по заводскому:
1. вставил ключ в замок - включается ACC
2. нажимаем кнопку старт - включается только зажигание, двигатель не заводится
3. удерживаем педаль тормоза, нажимаем кнопку старт - включается зажигание и двигатель заводится
для этой цели я немного переделал код Mastino, надо его еще до ума довести.
вопрос вот в чем: имитацию сигнала с генератора и педали тормоза я делаю с помощью кнопок в ключенных таким образом:
когда я буду ставить все это добро на машину, каким образом подключить допустим сигнал с генератора на ардуину?
еще одно: нужна пауза в 1000мск между digitalWrite(ignition, HIGH) и digitalWrite(starter, HIGH) в процедуре motoron()
не могу понять куда вставить delay(1000); ?
когда я буду ставить все это добро на машину, каким образом подключить допустим сигнал с генератора на ардуину?
делай через 12V реле, реле работает с "задержкой" - тебе именно это и нужно.
еще одно: нужна пауза в 1000мск между digitalWrite(ignition, HIGH) и digitalWrite(starter, HIGH) в процедуре motoron()
не могу понять куда вставить delay(1000); ?
millis вставляй, delay блокирует весь код
я так и думал что через реле, только вот все это громоздкое получается! я уже не знаю куда мне от этих проводов и кнопок дется ))
щас работаю над процедурой дистанционного запуска двигателя, с использованием выхода сигналки на соленоид багажника. скорее всего в этом тоже помощь понадобится.
спасибо
я так и думал что через реле, только вот все это громоздкое получается! я уже не знаю куда мне от этих проводов и кнопок дется ))
щас работаю над процедурой дистанционного запуска двигателя, с использованием выхода сигналки на соленоид багажника. скорее всего в этом тоже помощь понадобится.
спасибо
реле есть разного размера..
дистанционный запуск я тоже делал на свой гольф..:) все работало хорошо, только датчик нейтральной скорости не как не мог придумать куда и как поставить...
с нейтралкой я не буду парится, тем более что у меня механика, там просто некуда этот дачик ставить. если не будет поднят ручник, удаленный запуск не сработает и все!
еще один ламерский вопрос, получится ли так:
допустим закончил я эту программу, жаль мне потом ардуину в машине оставлять! короче, снять с платы атмегу, засунуть в програматор, вычитать из атмеги бинарник с прошивкой, собрать плату на такой же атмеге, залить туда прошивку вычитанную из ардуины, и получить готовый девайс с реле, оптронами и так далее. получится?
если осилишь то можно..
подскажите, как все таки millis() использовать?
http://arduino.ru/Reference/Millis
это я уже смотрел, но не разобрался как использовать в моем случае ((