помогите новичку...

Dj Aleks
Offline
Зарегистрирован: 28.10.2011

вот собственно программа сама...
отладку веду в 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); //глушим блок питания бука

}

}

Dj Aleks
Offline
Зарегистрирован: 28.10.2011

и не могу еще понять как сделать чтобы при появлении на входе int CamPin=2; HIGH нажималась кнопка для переключения AV. Когда появляется сигнал на int CamPin=2; то программа выполняется

int Vhod=2; //вход
int Vihod=13 //выход

void setup()
{
pinMode(VhodPin, INPUT);
pinMode(VihodPin,OUTPUT);

}


if (digitalRead(VhodPin) == HIGH)
{
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
}

 

Но если на входе постоянно HIGH, то программа тормозится на

if (digitalRead(VhodPin) == HIGH)
{
digitalWrite(VihodPin, HIGH);

 

и не выполняется дальше :(

 

От модератора: для вставки кода пользуйтесь пожалуйста соответствующей кнопкой - "красные фигурные скобки с надписью code". В этом комментарии я исправил.

leshak
Offline
Зарегистрирован: 29.09.2011

Ну если на входе постоянно hight, а этот if находится внутри loop (которого кстати что-то не видно в скетче), то естественно это условие проверяется раз-за разом, при каждом проходе loop , каждый раз оказывается истинным и начинает выполнятся снова и снова.

Dj Aleks
Offline
Зарегистрирован: 28.10.2011

спасибо, уже разобрался :)

leshak
Offline
Зарегистрирован: 29.09.2011

Кстати будте готовы к тому, что в отличае от протеуса, реальная кнопка может давать "дребезг контактов". Может сразу, а может когда немного подвыработает ресурс. Так что, по хорошему, еще про "антидребезг" погуглить прийдется.

P.S. И темы бы называть как-то более информативно. "Помогите новичку", "вопросы новичка".... все тут новички, в той или иной степени, а вопросы разные :)

Dj Aleks
Offline
Зарегистрирован: 28.10.2011

за название простите))) первый раз тут... про дребезг уже думаю... а что если от входа резистор на 1К ко входу атмеги и от входа на 10К и на массу))) не то!?