кодовый замок

Тема в разделе "Технологии радиолюбителя", создана пользователем amburelik08, 1 апр 2015.

  1. amburelik08

    amburelik08 Нуб

    Всем привет!!!Суть такая необходимо сделать кодовый замок на Ардуино причем кодом будет азбука морзе.
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    И в чем проблема?
     
  3. amburelik08

    amburelik08 Нуб

    спасибо........я не силен во всем этом(((но в проекте будет использоваться реальный телеграфный ключ,как его прикрутить к ардуино
     
  4. X-Dron

    X-Dron Гик

    Как кнопку. Но отслеживание длительности нажатия ключа, да еще в последовательности - геморройно, но реализуемо.
     
  5. X-Dron

    X-Dron Гик

    За ядро можно взять этот код
    Код (Text):
    #include <DI.h>
    #include <Timer_P.h>

    #define Button    3
    #define MAX_ARR  9
    DI Key(Button, 10);
    Timer_P KeyDelay, ResetSeq;
    boolean Key_old;
    bool KeySeq[MAX_ARR] = {0, 0, 0, 1, 1, 1, 0, 0, 0}; //SOS :)
    bool InpSeq[MAX_ARR] = {};
    int Pointer;

    void setup()
    {
      Serial.begin(9600);
      Pointer = 0;
    }

    void loop()
    {
      Key.DI_Refresh();
      if ((ResetSeq.Timer(!Key.DI_Read(), 0, 2, 1500)) || Pointer == MAX_ARR) {
        //Добавить сравнение массивов и если они равны установить признак подачи импульса
        Pointer = 0; // Если пауза больше 1.5сек, то начинаем сначала.
        for (int i = 0; i < MAX_ARR; i++) InpSeq[i] =0; // обнуляем массив
      }
      if (!Key.DI_Read() && Key_old)
      {
        if (Pointer < MAX_ARR){
          if (!KeyDelay.Q0()) {InpSeq[Pointer] =0; Serial.println("S");}// Было короткое нажатие
          if ( KeyDelay.Q0()) {InpSeq[Pointer] =1; Serial.println("L");}// Было длинное нажатие
          Pointer++;
        }
        for (int i = 0; i < MAX_ARR; i++) Serial.print(InpSeq[i]);
        Serial.println();
      }
      //сформировать импульс открытия
      //сбросить признак подачи импульса
      KeyDelay.TimerV(Key.DI_Read(), 0, 2, 200);                  // 200мс для длительного нажатия
      Key_old = Key.DI_Read();
    }
    01-04-2015 22-56-28.png
    Здесь уже процентов 90 написано.
    понадобится эта библиотека.
    https://yadi.sk/d/hGQy8xu1fZNks
    класс DI считывает входы клавиш и фильтрует дребезг. Кнопки должны быть подключены как здесь:
    http://wiki.amperka.ru/конспект-arduino:миксер
    класс Timer_P - для контроля коротких и длинных нажатий, и общего времени ввода (два таймера). Должен появиться еще один, для формирования импульса открытия.
     
  6. amburelik08

    amburelik08 Нуб

    ханджяняв (спасибо по калмыцки), большое большое спасибо ....... хоть сдвинусьсмертвой точки......да вы здесь все красавцы.......сваяю отпишусь