Помогите доработать скеч
- Войдите на сайт для отправки комментариев
Чт, 24/11/2016 - 11:54
Пожалуйста помогите добавить одну функцию. Принцып работы: 1. Программа ждет пока не появится любое изменение на 14 пине. 2. При наличии импульсов на 14 пине, начинается отсчет 20 секунд. 3.После отсчета подается команда на 2 пин (запуск исполнительного устройства). 4. Программа ожидает 15 секунд и ставит 14 пин в режим ожидания (цикл повторяется). Вот тут и не хватает мозга добавить чтобы после 15 секунд ожидания произошла проверка в течении 10 секунд на наличие любых изменений на 14 пине, если таковы есть - включалась пищалка, если нет - в режим ожидания (цикл повторяется).
const int buttonPin = 14; // назначаем пин A0 для кнопки
const int ledPin = 2; // назначаем пин 2 для сигнального светодиода
const int buzzerPin = 12; // назначаем PWM-пин 12 для пищалки, кроме 3 и 11!!!
const int highLevelPin = 15; // назначаем пин 15 для дублирущего светодиода (кнопка исполнения)
boolean buttonState = false; // логическая переменная для состояния кнопки
void setup()
{
// инициализация пинов
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); //включаем внутренний подтягивающий резистор на 20К, чтобы не закоротить пины при нажатии кнопки без обвязки
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW); // гасим светодиод
pinMode(buzzerPin, OUTPUT);
// digitalWrite(buzzerPin, LOW); // затыкаем пищалку
pinMode(highLevelPin, OUTPUT);
digitalWrite(highLevelPin, LOW); // обнуляем выход на устройство
Serial.begin(9600); // вывод отладочной информации
Serial.println("Ready...");
}
void loop()
{
buttonState = !digitalRead(buttonPin); // читаем состояние кнопки и инвертируем его, т.к. у нас включен подтягивающий резистор
// Serial.println(buttonState);
if (buttonState == true)
{ // дeйствия при нажатии кнопки
Serial.println("Button pressed!");
mainStart(); // выполняем условия старта
sendSignal(); // подаем сигнал на устройство
finish(); // выполняем условия финиша
Serial.println("THE END");
}
else
{ // действия, если кнопка не нажата
// digitalWrite(ledPin, LOW);
}
}
void mainStart()
{
Serial.println("Main Start!");
digitalWrite(ledPin, HIGH); // включаем светодиод
for (int i = 0; i <= 20; i++) // время первого отсчета 20 сек
{
Serial.println(i); // выводим в порт показания отсчета
delay(1000); // ждем 1 сек
}
digitalWrite(ledPin, LOW);// гасим светодиод
Serial.println("Done.");
}
void sendSignal()
{
Serial.println("Send HI to device");
digitalWrite(highLevelPin, HIGH); // подаем высокий уровень на устройство
delay(250); // ждем 250 мсек (задержка свечения светодиода (нажатие кнопки)
digitalWrite(highLevelPin, LOW);
Serial.println("Send LOW to device");
}
void finish()
{
Serial.println("Finish...");
noTone(buzzerPin); // затыкаем пищалку
Serial.println("Wait 15 seconds...");
delay(15000); // ничего не делаем 15 сек
for (int i = 0; i <= 10; i++) // пищим финальный аккорд
{
tone(buzzerPin, 3000, 100);
delay(500); // частота включения пищалки
}
noTone(buzzerPin); // затыкаем пищалку
// display.show("--"); // закончили задачу, выводим режим готовности к следующему этапу
buttonState = false; // устанавливаем исходное состояние кнопки
Serial.println("Done.");
}