Повторение морзянки кнопкой

avovana
Offline
Зарегистрирован: 08.04.2014

Здравствуйте, уважаемые форумчане!

Задача:

Человек услышал стук. Сам должен так простучать. Arduino должна проверить корректность стука.

--------------------------------------------

Примерное решение

Там контакты будут на железной штуки, как знаете, на старых дверях.

Т.е., я так понял нужно использовать прерывание.

Т.е. вход, к примеру, Arduino Uno, подтянут к 5V, а прикасаясь контактами мы будем сбрасывать вход в 0.

А прерывание будет фиксировать переход от 5V к 0V.

----------------------------------------------

Примерный код

1) К примеру, звуковой рисунок морзянки:

СТУКИ:        СТУК               СТУК    СТУК    СТУК

СЕКУНДЫ:   1ая--------------2ая-------------3яя

2) Примерный код:

а) Обработка прерывания по стуку:

переменная += 1;

б) Основная программа:

loop() {

   if (переменная == 1) {
   //------------------1ый стук - начало программы-----------------------
     текущееВремя = millis();
      
       //------------------Отработка 2ого стука--------------------
      do {
      пустая команда; 
     while(текущееВремя + 900 <= millis())  //ожидаем в течение 900 мс
     
     if (переменная != 1)                   //Если был стук - неверно 
        break;                              //Слишком рано! Выходим.

     delay(200);                            //Даём 200 мс,
                                            //ожидая 2ого стука.
      if (переменная != 2)                  //Если сткнули не 1 раз,
        break;                              //не то - выходим.

     //----------------Отработка 3го стука--------------------
     текущееВремя = millis();

      do {
      пустая команда;
     while(текущееВремя + 300 <= millis())

     if (переменная != 2)
        break;

     delay(200);

      if (переменная != 3)
        break;   

     //----------------Отработка 4го стука--------------------
     текущееВремя = millis();

      do {
      пустая команда;
     while(текущееВремя + 300 <= millis())

     if (переменная != 3)
        break;

     delay(200);

      if (переменная != 4)
        break;   

      НУЖНОЕ ДЕЙСТВИЕ;
    }
     переменная == 0;

}

Обратная связь

Прошу обратную связь по такой реализации.

Logik
Offline
Зарегистрирован: 05.08.2014

По Вашей просьбе для приведеной реализации

 Обратная связь

ПС. приборы?! - 90!

;)

avovana
Offline
Зарегистрирован: 08.04.2014

Logik пишет:

По Вашей просьбе для приведеной реализации

 Обратная связь

ПС. приборы?! - 90!

;)

Если имеется ввиду Arduino, то Arduino Nano. Там прерывания есть

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Лоджик как бы намекает что никто писать за Вас код не собирается, если вы попросите помочь найти ошибку или расписать алгоритм то пожалуйста, если хотите рабочий код используйте раздел форума http://arduino.ru/forumy/ishchu-ispolnitelya

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Был проект где ардуина открывает замок если стук в дверь совпадает с сохраненным. Поищите...

avovana
Offline
Зарегистрирован: 08.04.2014

Mr.Privet пишет:

Лоджик как бы намекает что никто писать за Вас код не собирается, если вы попросите помочь найти ошибку или расписать алгоритм то пожалуйста, если хотите рабочий код используйте раздел форума http://arduino.ru/forumy/ishchu-ispolnitelya

Написал же код. Это, по-моему, моё первое сообщение здесь. Может не активизировал его видимость?

Я как-раз по нему и прошу дать комментарии.

avovana
Offline
Зарегистрирован: 08.04.2014

Mr.Privet пишет:

Был проект где ардуина открывает замок если стук в дверь совпадает с сохраненным. Поищите...

Спасибо, уже что-то нахожу