Помогите доработать скеч

Нет ответов
vvbelin
Offline
Зарегистрирован: 01.04.2016

Пожалуйста помогите добавить одну функцию. Принцып работы: 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.");  
}