====== Матричная клавиатура 4х1 ======
===== Описание =====
Матричная клавиатура на 4 кнопки. Отличается своей малой толщиной (1-2мм) и высокой надежностью в работе. Обратная сторона снабжена клейкой поверхностью. Габаритные размеры: 20х70мм

==== Технические характеристики ====
  * Количество кнопок: 4

==== Физические размеры ====
  * Клавиатура (Д х Ш х В): 20 х 69 х 1 мм
  * Соединение (Д х Ш х В): 89 х 14 х 3 мм

==== Плюсы использования ====
  * Простое и недорогое решение
  * Прост в подключении

==== Минусы использования ====
  * Малое количество кнопок

===== Примеры подключения и использования =====
**Пример 1:** В примере иллюстрируется подключение модуля к контроллеру и получение данных с кнопки с последующим выводом данных в Serial-порт.(Примеры тестировались на контроллере Smart UNO)

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/matrichnaya-klaviatura-4h1|Матричная клавиатура 4х1]]               |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-papa|Провода папа-папа]]  |  5           |


**Схема подключения:**
{{ :главная:модули:matrix41.jpg |}}

**Скетч для загрузки:**
<file Arduino>
int PinOut = 8; // пин-выход
int PinIn[4] {10, 9, 12, 11}; // пины входа

//массив значений кнопок
const char value[4] {'1','2','3','4'};


void setup()
{
  //установить выходной пин на вывод
  pinMode (PinOut, OUTPUT);

  //установить входные пины на ввод
  //и подать на них ток
  for (int i=0; i < 4; i++)
  {
   pinMode (PinIn[i], INPUT);
   digitalWrite(PinIn[i], HIGH);
  }

  Serial.begin(9600); // инициализация Serial - порта
}

void loop()
{
  
    digitalWrite(PinOut, LOW); //подать 0 на выходной пин
    for (int i = 1; i <= 4; i++) // обойти цикл по кнопкам (колнкам кнопок)
    {
      if (digitalRead(PinIn[i - 1]) == LOW) // если один из указанных портов входа равен 0, то..
      { 

        Serial.println(value[i - 1]); // получить значение нажатой кнопки из массива
         
        delay(175);
      }
      
    }
    digitalWrite(PinOut, HIGH); //вернуть ток на выходной пин
  
 
}
</file>

**Пример 2:** В примере иллюстрируется подключение модуля к контроллеру и проверка ввода пользователем пин-кода из 4 цифр. После ввода пинкода, в Serial - порт выводится результат сравнения с эталонным пинкодом (после чего делается вывод о корректности введенного пин-кода).(Примеры тестировались на контроллере Smart UNO)

^ Что нужно                                                                                                               ^  Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                            |  1           |
| [[http://smartelements.ru/collection/moduli/product/matrichnaya-klaviatura-4h1|Матричная клавиатура 4х1]]               |  1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-papa|Провода папа-папа]]  |  5           |


**Схема подключения:**
{{ :главная:модули:matrix41.jpg |}}


**Скетч для загрузки:**
<file Arduino>
int PinOut = 8; // пин-выход
int PinIn[4] {10, 9, 12, 11}; // пины входа

//массив значений кнопок
const char value[4] {'1','2','3','4'};

//верный пин-код
const char correctPin[4] {'3','3','4','1'};

//массив для ввода пин-кода
char inputPin[4];

//позиция введенного с клавиатуры символа
int pinPosition = 0;


void setup()
{
  //установить выходной пин на вывод
  pinMode (PinOut, OUTPUT);

  //установить входные пины на ввод
  //и подать на них ток
  for (int i=0; i < 4; i++)
  {
   pinMode (PinIn[i], INPUT);
   digitalWrite(PinIn[i], HIGH);
  }

  Serial.begin(9600); // инициализация Serial - порта
}

void loop()
{
  
    digitalWrite(PinOut, LOW); //подать 0 на выходной пин
    for (int i = 1; i <= 4; i++) // обойти цикл по кнопкам (колнкам кнопок)
    {
      if (digitalRead(PinIn[i - 1]) == LOW) // если один из указанных портов входа равен 0, то..
      { 

        Serial.print("*"); // вывести на экран *
        inputPin[pinPosition] = value[i-1]; //записать введенный символ в массив вводимого пин-кода

        if (pinPosition == 3) { //если уже введено 4 символа
          boolean isCorrectPin = checkIsPinCorrect(); //проверить корректность введенного пин-кода
          pinPosition = 0; //сбросить позицию в 0

          Serial.print(" pin is "); //вывод сообщения
          if (!isCorrectPin) Serial.println("NOT correct! Please, try one more time!"); //если пин не верен, сообщить об ошибке
          else Serial.println("correct!"); //если верен сообщить о корректности
          
          
        }
        else pinPosition = pinPosition + 1; //увеличить позицию вводимых значений

        delay(175); //задержка
      }
      
    }
    digitalWrite(PinOut, HIGH); //вернуть ток на выходной пин
   
}

//функция проверки корректности введенного пин-кода
boolean checkIsPinCorrect() {

  boolean isCorrect = true; //переменная - результат проверки

  for(int i=0; i < 4; i++){ //обход массивов пин-кодов

    //если хоть один символ введен неверно, принимаем решение о неверном вводе всего пин-кода
    if (inputPin[i] != correctPin[i]) isCorrect = false; 
  }

  return isCorrect; //вернуть результат
   
}
</file>