PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Разработка программ (http://pccar.ru/forumdisplay.php?f=27)
-   -   HELP!! Arduino (http://pccar.ru/showthread.php?t=16136)

Dj Aleks 28.10.2011 17:52

HELP!! Arduino
 
Подскажите пожалуйста как зациклить программу, чтобы она читалась постоянно по кругу?

Dj Aleks 28.10.2011 17:54

перерыл все...
void loop()
{
тело программы
}
вроде это, но программа доходит до конца и не стартует заново :(

Dj Aleks 28.10.2011 17:57

Другой вопрос, когда на входе появляется HIGH, на выходе тоже HIGH и программа не идет дальше... как только вход переходит в LOW программа начинает выполнятся дальше... что не правильно делаю?


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);
}

Hamster 28.10.2011 20:23

Цитата:

Сообщение от Dj Aleks (Сообщение 200124)
что не правильно делаю?

Добавил жирным косяки:

// Неудачное название переменных. Отличаются одной буквой, да она еще в середине и не особо видна.
// Код становится хреново читаемый, появляется большая вероятность ошибки
// Обычно вход именуют от слова input, выход от output. Типа inPin и outPin будет much better :)

int VhodPin=2; //вход
int VihodPin=13 //выход

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

}

void loop() //эта функция нужна, она собственно и вызывается в цикле
{
up_dn();
}


// Этот код надо оформлять в функцию и вызывать из loop()
// правда я не уверен, что ее нужно вызывать в цикле :)
// к примеру:
void up_dn()
{

if (digitalRead(VhodPin) == HIGH) // насколько я понимаю интересует переход из LOW в HIGH, для этого есть функция PulseIn()
{
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
digitalWrite(VihodPin, HIGH);
delay(100);
digitalWrite(VihodPin, LOW);
delay(100);
}
}

Вообщем для начала читать:
http://www.freeduino.ru/arduino/lang.html
и
http://arduino.cc/en/Reference/HomePage

Dj Aleks 28.10.2011 20:47

это скинул пример... void loop() забыл поставить...
вот собственно программа сама... за ссылки спасибо, но уже все давно распечатано и по 1000000 раз штудировано :)
отладку веду в 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 28.10.2011 20:48

if (digitalRead(VhodPin) == HIGH) // насколько я понимаю интересует переход из LOW в HIGH, для этого есть функция PulseIn()

если честно интересует немного другое... а именно авто переключение на камеру заднего вида... но как заставить выполняться программу когда она стопорится пока на входе HIGH, как писал выше...

Hamster 28.10.2011 21:36

Цитата:

Сообщение от Dj Aleks (Сообщение 200134)
если честно интересует немного другое... а именно авто переключение на камеру заднего вида... но как заставить выполняться программу когда она стопорится пока на входе HIGH, как писал выше...

можно использовать прерывание. т.е. можно указать, что при переходе из состояния X в состояние Y вызывается определенная процедура.
Пример можно посмотреть тут. И вообще, на компкаре по ардуино много интерестного, целый раздел с подразделами.

BlkDem 28.10.2011 21:36

Попробуй вот так:

PHP код:

void loop()
{
if ((
digitalRead(StartPin) == HIGH) && (digitalRead(TormPin) == HIGH)) //сравнение 2 входов
{
digitalWrite(ACCPinHIGH); //включаем зажигание
delay(150);
digitalWrite(StPinHIGH); //включаем стартер
delay(200); 
digitalWrite(StPinLOW); //выключаем стартер через 10 сек
delay(50); 
digitalWrite(MBPinHIGH); //Подаем напряжение на блок питания ноутбука 
delay(40); 
digitalWrite(RSPinHIGH); //нажатие кнопки ноутбука
delay(20); 
digitalWrite(RSPinLOW); //отпускаем кнопку
delay(1200); 
digitalWrite(RemPinHIGH); //remote усилителя

}

if ((
digitalRead(StartPin) == HIGH) && (digitalRead(TormPin) == LOW)) //сравниваем значение кнопки
{
digitalWrite(ACCPinLOW); //выключаем АСС
delay(100);
digitalWrite(RemPinLOW); //Усилители 
digitalWrite(RSPinHIGH); //кнопка ноутбука
delay(100); 
digitalWrite(RSPinLOW); //отпускаем
delay(1200);
digitalWrite(MBPinLOW); //глушим блок питания бука

}



Код сознательно не оптимизирован ;)

Dj Aleks 28.10.2011 21:37

Цитата:

Сообщение от Hamster (Сообщение 200135)
можно использовать прерывание. т.е. можно указать, что при переходе из состояния X в состояние Y вызывается определенная процедура.
Пример можно посмотреть тут. И вообще, на компкаре по ардуино много интерестного, целый раздел с подразделами.

спасибо громадное за наводку... а что с основной прогой?

Hamster 28.10.2011 21:38

Цитата:

Сообщение от Dj Aleks (Сообщение 200134)
но как заставить выполняться программу когда она стопорится

Программа не может взять и остановиться :)
Она может зациклится или тупо стоять и ждать определенного события (считай тот же цикл).


Часовой пояс GMT +4, время: 14:42.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot