помогите со скетчем

Абдулкутузов
Offline
Зарегистрирован: 19.04.2017

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

Абдулкутузов
Offline
Зарегистрирован: 19.04.2017

#define LED_FLASH 6 // мигалка

#define MOTOR_OPEN 8 // выход на драйвер управления мотором

#define MOTOR_CLOSE 7 // выход на драйвер управления мотором

#define BUTTON 11 // кнопка или сигнал с пульта

#define SWITCH_OPENED 12 // концевик полностью открытых ворот

#define SWITCH_CLOSED 10 // концевик полностью закрытых ворот

#define BLINK_TIME 250 // скорость моргания мигалки

#define DEBOUNCE 150 // задержка для антидребезга кнопки

enum {STOP, OPEN, CLOSE}; // возможные состояния системы

byte state; // текущее состояние системы

byte lastDir; // предыдущее направление открытия ворот



void checkSwitches(void);

void ledsManager(void);

void motor(void);

void readButton(void);



void setup()

{

pinMode(LED_FLASH, OUTPUT);

pinMode(MOTOR_OPEN, OUTPUT);

pinMode(MOTOR_CLOSE, OUTPUT);

pinMode(BUTTON, INPUT);

pinMode(SWITCH_OPENED, INPUT);

pinMode(SWITCH_CLOSED, INPUT);

state = STOP; // исходное состояние после включения питания

lastDir = CLOSE;

}



void loop()

{

readButton(); // проверка кнопок

checkSwitches(); // проверка концевиков, при коллизиях подавляет команду от кнопки

ledsManager(); // световая индикация

motor(); // управление двигателем

}



void readButton()

{

if (digitalRead(BUTTON)) // если нажата кнопка

{

if (state == STOP && lastDir == CLOSE) // даем команду на открытите

{

// lastDir = state;

state = OPEN;

}

else if (state == STOP && lastDir == OPEN) // даем команду на закрытите

{

// lastDir = state;

state = CLOSE;

}

else if (state == OPEN || state == CLOSE) // даем команду на остановку

{

lastDir = state;

state = STOP;

}

}

}



void checkSwitches()

{

if (digitalRead(SWITCH_OPENED) && state == OPEN) // отмена команды Открыть при полностью открытой двери

{

lastDir = state;

state = STOP;

}

else if (digitalRead(SWITCH_CLOSED) && state == CLOSE) // отмена команды Закрыть при полностью закрытой двери

{

lastDir = state;

state = STOP;

}

}



void motor()

{

switch (state)

{

case STOP:

digitalWrite(MOTOR_OPEN, LOW);

digitalWrite(MOTOR_CLOSE, LOW);

break;



case OPEN:

digitalWrite(MOTOR_OPEN, HIGH);

digitalWrite(MOTOR_CLOSE, LOW);

break;



case CLOSE:

digitalWrite(MOTOR_OPEN, LOW);

digitalWrite(MOTOR_CLOSE, HIGH);

break;

}

delay(DEBOUNCE); // простейший антидребезг кнопки

}



void ledsManager()

{

boolean ledState;

static unsigned long timestamp = millis();

if (state == STOP)

{

digitalWrite(LED_FLASH, LOW);

}

else

{

if (millis() - timestamp > BLINK_TIME)

{

ledState = LOW;

timestamp = millis();

}

else ledState = HIGH;

digitalWrite(LED_FLASH, ledState);

}

}

Абдулкутузов
Offline
Зарегистрирован: 19.04.2017

этот тупит маленьку 

Green
Offline
Зарегистрирован: 01.10.2015
pcb
Offline
Зарегистрирован: 02.04.2015

pcbadm на маил ру.

Абдулкутузов
Offline
Зарегистрирован: 19.04.2017

не понял

 

Green
Offline
Зарегистрирован: 01.10.2015

"этот тупит маленьку"?
 Пишите на htpicc@gmail.com

Абдулкутузов
Offline
Зарегистрирован: 19.04.2017

не знаю как писать на почту