#1 2015-08-17 15:03:26

teezy
Учасник
Зареєстрований: 2015-08-17
Повідомлень: 3

Реле, концевой выключатель.

Добрый день!
Помогите, пожалуйста, с программированием. Вроде бы все просто, но никак не могу сделать правильно.
Есть 2 реле и 2 концевика.

Включается реле №1, потом через концевик №1 реле №1 выключается. Ждем 2 сек. включается реле №2, а потом через концевик №2 выключается. Программно набросал так, но это не правильно:(
Разбирался с прерываниями, но ничего толком не сообразил.


[== Undefined ==]
int button1 = 4; // концевик №1
int button2 = 5; // концевик №2
int relay1 = 6; // реле №1
int relay2 = 7 // реле №2
void setup() {
   pinMode(button1, INPUT);
   pinMode(button2, INPUT);
   pinMode(relay1, OUTPUT);
   pinMode(relay2, OUTOUT);
}
void loop(){
   digitalWrite(relay1, HIGH);
   if (digitalRead(button1) == HIGH)    //если концевик сработал, то реле выключается, до его повторного запуска по кругу.
     {
        digitalWrite(relay1, LOW);
     }
   delay(2000);                                //2 сек. задержки между переключениями реле.
   digitalWrite(relay2, HIGH);
   if (digitalRead(button2) == HIGH)
     {
        digitalWrite(relay2, LOW);
     }
   delay(2000);
}

Спасибо большое! smile

Неактивний

#2 2015-08-17 16:59:52

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Реле, концевой выключатель.

ваши делеи постоянно тормозят программу.
используйте millis()
при срабатывании концевика 1 запускаете таймер.
через 2 сек срабатывает реле 2 и таймер обнуляете.
делеи вообще лучше не применяйте.

Неактивний

#3 2015-08-17 17:15:11

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Реле, концевой выключатель.

int button1 = 4; // концевик №1
int button2 = 5; // концевик №2
int relay1 = 6; // реле №1
int relay2 = 7 // реле №2
int  state;

void setup() {
   pinMode(button1, INPUT);
   pinMode(button2, INPUT);
   pinMode(relay1, OUTPUT);
   pinMode(relay2, OUTOUT);

state = 0;
}
void loop()
{
	
  switch ( state )
  {
	default:
	case 0: 
		digitalWrite(relay1, HIGH);
	    state = 1;
		break;
		
	case 1:
   if (digitalRead(button1) == HIGH)    //если концевик сработал, то реле выключается, до его повторного запуска по кругу.
    {
        digitalWrite(relay1, LOW);
		delay(2000);                                //2 сек. задержки между переключениями реле.
		digitalWrite(relay2, HIGH);
	    state = 2;
	}
	break;
	
	case 2:
    if (digitalRead(button2) == HIGH)
     {
        digitalWrite(relay2, LOW);
		delay(2000);
	    state = 0;
	 }
	break;
  }
}
   
}

алгоритм линейный

насчет delay не согласен, в данном случае задержка не участвуют в анализе, и имеет право на жизнь
хотя да, не очень хороший тон )

Остання редакція NoName (2015-08-17 17:15:51)

Неактивний

#4 2015-08-17 17:22:57

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Реле, концевой выключатель.

я полностью согласен что в данном примере можно и с делеями работать.
но нужно двигаться дальше и изначально делать в "хорошем тоне" smile
да и о дребезге неплохо подумать

Неактивний

#5 2015-08-17 17:50:30

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Реле, концевой выключатель.

тут главное не увлечься и не подвинуть с рынка 
SIEMENS-PLC-SIEMENS-LOGO.jpg

немцам тоже кушать  нужно )

Неактивний

#6 2015-08-17 18:05:01

teezy
Учасник
Зареєстрований: 2015-08-17
Повідомлень: 3

Re: Реле, концевой выключатель.

NoName, спасибо большое, Вам! Все работает! Скажите, пожалуйста, что мне почитать чтобы лучше разобраться в вашем коде (много незнакомого), а еще лучше объясните, если не сложно smile

Неактивний

#7 2015-08-17 18:13:56

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Реле, концевой выключатель.

Бьярне Страуструп. Программирование: принципы и практика использования C++

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

а что непонятно?

Неактивний

#8 2015-08-17 18:33:10

teezy
Учасник
Зареєстрований: 2015-08-17
Повідомлень: 3

Re: Реле, концевой выключатель.

state и case для чего служит... neutral

Неактивний

#9 2015-08-20 09:38:26

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Реле, концевой выключатель.

state  переменная
teezy, базовый синтаксис, вы уж сами изучайте.

http://natalia.appmat.ru/c&c++/lezione1.php
http://younglinux.info/book/export/html/358
и  т.д.

Неактивний

#10 2015-09-24 12:32:47

Mold0vanin
Учасник
Зареєстрований: 2015-09-24
Повідомлень: 2

Re: Реле, концевой выключатель.

NoName пише:

тут главное не увлечься и не подвинуть с рынка 
http://www.aotewell.com/wp-content/uplo … S-LOGO.jpg

немцам тоже кушать  нужно )

не стоит так запугивать...немцев....В серьезных  организациях,  надзор не примет,  всякую самопальщину.  А дома лепить. можно все что угодно.

а по существу, найти язык лестничных  диаграмм, где то  болтался в сети, не знаю для ардуино есть,  думаю должен быть и собрать схему на нем(ней)

Остання редакція Mold0vanin (2015-09-24 12:36:23)

Неактивний

#11 2020-07-28 21:38:07

ян
Гість

Re: Реле, концевой выключатель.

no name можно ли в ваш код за место реле воткнуть драйвер шаговика ну соответствеено сам шаговик

#12 2020-07-28 22:30:03

г0сть
Гість

Re: Реле, концевой выключатель.

ян пише:

можно ли в  код за место реле воткнуть драйвер шаговика ну соответствеено сам шаговик

Это в смысле вместо relay написать shagovik? Можно, втыкайте.

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму