Помогите доработать скеч
- Войдите на сайт для отправки комментариев
Чт, 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."); }