Всем привет!!!Суть такая необходимо сделать кодовый замок на Ардуино причем кодом будет азбука морзе.
спасибо........я не силен во всем этом(((но в проекте будет использоваться реальный телеграфный ключ,как его прикрутить к ардуино
Как кнопку. Но отслеживание длительности нажатия ключа, да еще в последовательности - геморройно, но реализуемо.
За ядро можно взять этот код Код (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(); } Здесь уже процентов 90 написано. понадобится эта библиотека. https://yadi.sk/d/hGQy8xu1fZNks класс DI считывает входы клавиш и фильтрует дребезг. Кнопки должны быть подключены как здесь: http://wiki.amperka.ru/конспект-arduino:миксер класс Timer_P - для контроля коротких и длинных нажатий, и общего времени ввода (два таймера). Должен появиться еще один, для формирования импульса открытия.
ханджяняв (спасибо по калмыцки), большое большое спасибо ....... хоть сдвинусьсмертвой точки......да вы здесь все красавцы.......сваяю отпишусь