помогите новичку...
- Войдите на сайт для отправки комментариев
Пт, 28/10/2011 - 19:56
вот собственно программа сама...
отладку веду в Proteus... когда нажимаю 2 кнопки StartPin и TormPin программа отрабатывает на ура весь цикл до (выделенного красным) потом если нажать кнопку StartPin, то программа все правильно тушит, если нажать сначала TormPin а потом StartPin, то ничего больше не происходит! если корректно все выполнить то она через раз возвращается в начало программы...
int StartPin=0; //вход для кнопки start stop engine int TormPin=1; //вход для лягушки педали тормоза int CamPin=2; //вход для камеры заднего вида int ACCPin=8; //выход на реле зажигания АСС int StPin=9; //выход на реле стартера int MBPin=10; //выход на Блок питания ноутбука int RemPin=11; //выход на включение усилителя (remote) int CmPin=12; //выход кнопки переключения камеры заднего вида int RSPin=13; //Выход кнопки для старта ноутбука void setup() { /*Объявляем входы и выходы*/ pinMode(StartPin, INPUT); pinMode(TormPin, INPUT); pinMode(CamPin, INPUT); pinMode(ACCPin, OUTPUT); pinMode(StPin, OUTPUT); pinMode(MBPin, OUTPUT); pinMode(RemPin, OUTPUT); pinMode(CmPin, OUTPUT); pinMode(RSPin, OUTPUT); } void loop() { if (digitalRead(StartPin) == HIGH && digitalRead(TormPin) == HIGH) //сравнение 2 входов { digitalWrite(ACCPin, HIGH); //включаем зажигание delay(150); digitalWrite(StPin, HIGH); //включаем стартер delay(200); digitalWrite(StPin, LOW); //выключаем стартер через 10 сек delay(50); digitalWrite(MBPin, HIGH); //Подаем напряжение на блок питания ноутбука delay(40); digitalWrite(RSPin, HIGH); //нажатие кнопки ноутбука delay(20); digitalWrite(RSPin, LOW); //отпускаем кнопку delay(1200); digitalWrite(RemPin, HIGH); //remote усилителя } if (digitalRead(StartPin) == HIGH) //сравниваем значение кнопки { digitalWrite(ACCPin, LOW); //выключаем АСС delay(100); digitalWrite(RemPin, LOW); //Усилители digitalWrite(RSPin, HIGH); //кнопка ноутбука delay(100); digitalWrite(RSPin, LOW); //отпускаем delay(1200); digitalWrite(MBPin, LOW); //глушим блок питания бука } }
и не могу еще понять как сделать чтобы при появлении на входе int CamPin=2; HIGH нажималась кнопка для переключения AV. Когда появляется сигнал на int CamPin=2; то программа выполняется
Но если на входе постоянно HIGH, то программа тормозится на
и не выполняется дальше :(
От модератора: для вставки кода пользуйтесь пожалуйста соответствующей кнопкой - "красные фигурные скобки с надписью code". В этом комментарии я исправил.
Ну если на входе постоянно hight, а этот if находится внутри loop (которого кстати что-то не видно в скетче), то естественно это условие проверяется раз-за разом, при каждом проходе loop , каждый раз оказывается истинным и начинает выполнятся снова и снова.
спасибо, уже разобрался :)
Кстати будте готовы к тому, что в отличае от протеуса, реальная кнопка может давать "дребезг контактов". Может сразу, а может когда немного подвыработает ресурс. Так что, по хорошему, еще про "антидребезг" погуглить прийдется.
P.S. И темы бы называть как-то более информативно. "Помогите новичку", "вопросы новичка".... все тут новички, в той или иной степени, а вопросы разные :)
за название простите))) первый раз тут... про дребезг уже думаю... а что если от входа резистор на 1К ко входу атмеги и от входа на 10К и на массу))) не то!?