2. Измеряет время нажатия на кнопку (кнопка без фиксации)
Из описания функции pulseIn():
Цитата:
Например, если задано считывание HIGH функцией pulseIn(), функция ожидает пока на заданном порту не появиться HIGH. Когда HIGH получен, включается таймер, который будет остановлен когда на порту вход/выхода будет LOW. Функция pulseIn() возвращает длину сигнала в микросекундах.
Вы вызываете эту функцию с аргументом HIGH, когда у вас кнопка уже нажата, т.е. на линии присутствует состояние HIGH. Как вы думаете, что будет делать функция в этом случае?
А делать она будет следующее:
- ждать, пока закончится текущее состояние HIGH
- ждать пока наступит новое состояние HIGH
- наконец-то примется считать продолжительность импульса.
Для пущей убедительности привожу выдержку из кода функции:
[...]
// ждем:
// wait for any previous pulse to end
while ((*portInputRegister(port) & bit) == stateMask)
if (numloops++ == maxloops)
return 0;
// опять ждем:
// wait for the pulse to start
while ((*portInputRegister(port) & bit) != stateMask)
if (numloops++ == maxloops)
return 0;
// наконец-то считаем длительность:
// wait for the pulse to stop
[...]
Итог: в вашей ситуации вызов функции pulseIn() лишь блокирует исполнение программы до повторного нажатия клавиши (ну или до отработки на дребезге кнопки при ее отпускании). То есто абсолютно бесполезен или даже вреден.
2. Измеряет время нажатия на кнопку (кнопка без фиксации)
Из описания функции pulseIn():
Цитата:
Например, если задано считывание HIGH функцией pulseIn(), функция ожидает пока на заданном порту не появиться HIGH. Когда HIGH получен, включается таймер, который будет остановлен когда на порту вход/выхода будет LOW. Функция pulseIn() возвращает длину сигнала в микросекундах.
Вы вызываете эту функцию с аргументом HIGH, когда у вас кнопка уже нажата, т.е. на линии присутствует состояние HIGH. Как вы думаете, что будет делать функция в этом случае?
А делать она будет следующее:
- ждать, пока закончится текущее состояние HIGH
- ждать пока наступит новое состояние HIGH
- наконец-то примется считать продолжительность импульса.
Для пущей убедительности привожу выдержку из кода функции:
[...]
// ждем:
// wait for any previous pulse to end
while ((*portInputRegister(port) & bit) == stateMask)
if (numloops++ == maxloops)
return 0;
// опять ждем:
// wait for the pulse to start
while ((*portInputRegister(port) & bit) != stateMask)
if (numloops++ == maxloops)
return 0;
// наконец-то считаем длительность:
// wait for the pulse to stop
[...]
Итог: в вашей ситуации вызов функции pulseIn() лишь блокирует исполнение программы до повторного нажатия клавиши (ну или до отработки на дребезге кнопки при ее отпускании). То есто абсолютно бесполезен или даже вреден.
после изменений стр 22 и 25 работает надёжно, но некорректно когда при сработавшем реле1, запускаешь реле2 (происходит сброс)
Коректно, так и было задумано, я так понял когда у вас был дребезг, в 22 строке у вас вообще задержки не было, если так, то оставьте ее 50 - этого должно хватить.
после изменений стр 22 и 25 работает надёжно, но некорректно когда при сработавшем реле1, запускаешь реле2 (происходит сброс)
Коректно, так и было задумано, я так понял когда у вас был дребезг, в 22 строке у вас вообще задержки не было, если так, то оставьте ее 50 - этого должно хватить.
чёрт... по задумке цепь реле2 должна обрыватся внешним сигналом (запуск двигателя -- сигнал от генератора -- стартер отключается). Но если сигнал пропадёт(при движении оборвётся ремень генератора), реле2 опять сработает!!!! Попробую устранить недоделку, подавая внешний сигнал на цировой пин4, например..
1.Короткое нажатие на кнопку включает зажигание и стартер, до тех пор пока двигатель не заведется или не пройдет 5 секунд, при выполнении одного из условий выключается стартер и включается АСС(если есть), зажигание естественно остается включенным.
2.Следующее нажатие (можно сделать длинное нажатие) - OFF, выключает АСС(если есть) и зажигание, двигатель глохнет.
При этом уберается блокировка руля, ставится блок обхода штатного иммобилайзера(если он есть) и кнопка работает, только либо когда машина снята с сигналки или когда используется дополнительный иммо.
1.Короткое нажатие на кнопку включает зажигание и стартер, до тех пор пока двигатель не заведется или не пройдет 5 секунд, при выполнении одного из условий выключается стартер и включается АСС(если есть), зажигание естественно остается включенным.
2.Следующее нажатие (можно сделать длинное нажатие) - OFF, выключает АСС(если есть) и зажигание, двигатель глохнет.
При этом уберается блокировка руля, ставится блок обхода штатного иммобилайзера(если он есть) и кнопка работает, только либо когда машина снята с сигналки или когда используется дополнительный иммо.
Примерно так я и представляю это себе. Без АСС, вместо тормоза - педаль сцепления. Стартер откл. либо по генератору, либо 5 сек макс. Плюс выдержка времени перед вкл. стартера для нагрева свечей накала( в зависимости от температуры двигателя).
Хотя нет, не так, лампочка гены тухнет, когда двигатель заводится, тогда вот:
-----
тут ваще... при желании можно удерживая кнопку крутить до посинения( 2 в 1, или автоматически, или в режиме ключа)
В смысле?
В хорошем, теперь поллучается 3 варианта развития событий:
1. держишь кнопку время х -- вкл. стартер, лампа гены тухнет, стартер откл.
2. держишь кнопку время х -- вкл. стартер, если лампа гены не тухнет через время xstarter, стартер откл.
3. держишь кнопку ссколь угодно долго, если лампа генератора не тухнет, стартер будет крутить пока лампа не потухнет, или не отпустишь кнопку( как будто ключами заводишь!)
2. Измеряет время нажатия на кнопку (кнопка без фиксации)
Из описания функции pulseIn():
Например, если задано считывание HIGH функцией pulseIn(), функция ожидает пока на заданном порту не появиться HIGH. Когда HIGH получен, включается таймер, который будет остановлен когда на порту вход/выхода будет LOW. Функция pulseIn() возвращает длину сигнала в микросекундах.
Вы вызываете эту функцию с аргументом HIGH, когда у вас кнопка уже нажата, т.е. на линии присутствует состояние HIGH. Как вы думаете, что будет делать функция в этом случае?
А делать она будет следующее:
- ждать, пока закончится текущее состояние HIGH
- ждать пока наступит новое состояние HIGH
- наконец-то примется считать продолжительность импульса.
Для пущей убедительности привожу выдержку из кода функции:
Итог: в вашей ситуации вызов функции pulseIn() лишь блокирует исполнение программы до повторного нажатия клавиши (ну или до отработки на дребезге кнопки при ее отпускании). То есто абсолютно бесполезен или даже вреден.
Что не помогло?
после изменений стр 22 и 25 работает надёжно, но некорректно когда при сработавшем реле1, запускаешь реле2 (происходит сброс)
2. Измеряет время нажатия на кнопку (кнопка без фиксации)
Из описания функции pulseIn():
Например, если задано считывание HIGH функцией pulseIn(), функция ожидает пока на заданном порту не появиться HIGH. Когда HIGH получен, включается таймер, который будет остановлен когда на порту вход/выхода будет LOW. Функция pulseIn() возвращает длину сигнала в микросекундах.
Вы вызываете эту функцию с аргументом HIGH, когда у вас кнопка уже нажата, т.е. на линии присутствует состояние HIGH. Как вы думаете, что будет делать функция в этом случае?
А делать она будет следующее:
- ждать, пока закончится текущее состояние HIGH
- ждать пока наступит новое состояние HIGH
- наконец-то примется считать продолжительность импульса.
Для пущей убедительности привожу выдержку из кода функции:
Итог: в вашей ситуации вызов функции pulseIn() лишь блокирует исполнение программы до повторного нажатия клавиши (ну или до отработки на дребезге кнопки при ее отпускании). То есто абсолютно бесполезен или даже вреден.
Ну вот.. а казалось такая хорошая функция...
Что не помогло?
после изменений стр 22 и 25 работает надёжно, но некорректно когда при сработавшем реле1, запускаешь реле2 (происходит сброс)
Коректно, так и было задумано, я так понял когда у вас был дребезг, в 22 строке у вас вообще задержки не было, если так, то оставьте ее 50 - этого должно хватить.
Ну вот.. а казалось такая хорошая функция...
Функция вполне себе нормальная. Ею, как и любым инструментом, надо научиться пользоваться. И применять для тех задач, которые она умеет решать.
И будет "щясте".
Что не помогло?
после изменений стр 22 и 25 работает надёжно, но некорректно когда при сработавшем реле1, запускаешь реле2 (происходит сброс)
Коректно, так и было задумано, я так понял когда у вас был дребезг, в 22 строке у вас вообще задержки не было, если так, то оставьте ее 50 - этого должно хватить.
хм.. без изменений
Ну вот.. а казалось такая хорошая функция...
Функция вполне себе нормальная. Ею, как и любым инструментом, надо научиться пользоваться. И применять для тех задач, которые она умеет решать.
И будет "щясте".
тяжело в учении, легко в бою :) а учится ещё дооолго...
Что именно без изменений?
Что именно без изменений?
при сработавшем реле1, включая реле2 происходит сброс
Так я же написал, что так и задумано, а задержку в 22стр. оставить 50 для того, чтобы не было дребезга.
Я так понимаю вы хотите, что бы при сработавшем реле1 долгим нажатием включалось реле2 не изменяя состояния реле1.
Я так понимаю вы хотите, что бы при сработавшем реле1 долгим нажатием включалось реле2 не изменяя состояния реле1.
точно! но это не критично, я смотрю так даже логичнее
чёрт... по задумке цепь реле2 должна обрыватся внешним сигналом (запуск двигателя -- сигнал от генератора -- стартер отключается). Но если сигнал пропадёт(при движении оборвётся ремень генератора), реле2 опять сработает!!!! Попробую устранить недоделку, подавая внешний сигнал на цировой пин4, например..
Нет можно сделать так, чтобы внешний сигнал только отключал реле2
Нет можно сделать так, чтобы внешний сигнал только отключал реле2
это я и имею ввиду, цикл реле2 не должен повторятся если оно уже отработало своё
Вот вы сейчас не понятно, что делаете.... изобретаете кривой велосипед, а если у вас пассажир на кнопку нажмет когда вас нет, а машина на скорости?
Хотите старт-кнопку с "интеллектуальным" заводом двигателя, то вот алгоритм:
Нажимаем только на кнопку:
1.Первое нажатие кнопки engine start - включается режим АСС(работает, например, только магнитола и прикуриватель). Можно вообще убрать АСС.
2.Второе нажатие - дополнительно включается зажигание (если нет АСС, то это будет первое нажатие).
3.Третие нажатие - OFF, выключает АСС(если есть) и зажигание.
Удерживая педаль тормоза, нажимаем кнопку engine start:
1.Короткое нажатие на кнопку включает зажигание и стартер, до тех пор пока двигатель не заведется или не пройдет 5 секунд, при выполнении одного из условий выключается стартер и включается АСС(если есть), зажигание естественно остается включенным.
2.Следующее нажатие (можно сделать длинное нажатие) - OFF, выключает АСС(если есть) и зажигание, двигатель глохнет.
При этом уберается блокировка руля, ставится блок обхода штатного иммобилайзера(если он есть) и кнопка работает, только либо когда машина снята с сигналки или когда используется дополнительный иммо.
Вот вы сейчас не понятно, что делаете.... изобретаете кривой велосипед, а если у вас пассажир на кнопку нажмет когда вас нет, а машина на скорости?
Хотите старт-кнопку с "интеллектуальным" заводом двигателя, то вот алгоритм:
Нажимаем только на кнопку:
1.Первое нажатие кнопки engine start - включается режим АСС(работает, например, только магнитола и прикуриватель). Можно вообще убрать АСС.
2.Второе нажатие - дополнительно включается зажигание (если нет АСС, то это будет первое нажатие).
3.Третие нажатие - OFF, выключает АСС(если есть) и зажигание.
Удерживая педаль тормоза, нажимаем кнопку engine start:
1.Короткое нажатие на кнопку включает зажигание и стартер, до тех пор пока двигатель не заведется или не пройдет 5 секунд, при выполнении одного из условий выключается стартер и включается АСС(если есть), зажигание естественно остается включенным.
2.Следующее нажатие (можно сделать длинное нажатие) - OFF, выключает АСС(если есть) и зажигание, двигатель глохнет.
При этом уберается блокировка руля, ставится блок обхода штатного иммобилайзера(если он есть) и кнопка работает, только либо когда машина снята с сигналки или когда используется дополнительный иммо.
Примерно так я и представляю это себе. Без АСС, вместо тормоза - педаль сцепления. Стартер откл. либо по генератору, либо 5 сек макс. Плюс выдержка времени перед вкл. стартера для нагрева свечей накала( в зависимости от температуры двигателя).
Хотя нет, не так, лампочка гены тухнет, когда двигатель заводится, тогда вот:
Максим, вы Гений!! Работает!!! Реле 2 выкл. либо по выдержке времени, либо при +5 вольт пин4!!!
Хотя нет, не так, лампочка гены тухнет, когда двигатель заводится, тогда вот:
-----
тут ваще... при желании можно удерживая кнопку крутить до посинения( 2 в 1, или автоматически, или в режиме ключа)
Хотя нет, не так, лампочка гены тухнет, когда двигатель заводится, тогда вот:
-----
тут ваще... при желании можно удерживая кнопку крутить до посинения( 2 в 1, или автоматически, или в режиме ключа)
В смысле?
Хотя нет, не так, лампочка гены тухнет, когда двигатель заводится, тогда вот:
-----
тут ваще... при желании можно удерживая кнопку крутить до посинения( 2 в 1, или автоматически, или в режиме ключа)
В смысле?
В хорошем, теперь поллучается 3 варианта развития событий:
1. держишь кнопку время х -- вкл. стартер, лампа гены тухнет, стартер откл.
2. держишь кнопку время х -- вкл. стартер, если лампа гены не тухнет через время xstarter, стартер откл.
3. держишь кнопку ссколь угодно долго, если лампа генератора не тухнет, стартер будет крутить пока лампа не потухнет, или не отпустишь кнопку( как будто ключами заводишь!)