помогите со скетчем
- Войдите на сайт для отправки комментариев
Ср, 19/04/2017 - 12:51
Надо значит чтобы автоматические ворота при нажатии на первую кнопку на пульте начали открываться и включалась мигалка, при еще раз нажатии остановились и мигалка тоже выключилась, еще раз при нажатии начали закрываться опять мигалка включается, закрываются и открываюстя до тех пока не доедут до концевого выключателя, далее по кругу " створка только одна"
#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);
}
}
этот тупит маленьку
htpicc@gmail.com
pcbadm на маил ру.
не понял
"этот тупит маленьку"?
Пишите на htpicc@gmail.com
не знаю как писать на почту