matrix-keyboard

ip111/matrix-keyboard/matrix-keyboard

node for matrix keyboard 4x4 connection.
matrix-keyboard
@/matrix-keyboard
node for matrix keyboard 4x4 connection.
PIN1port
PIN2port
PIN3port
PIN4port
PIN5port
PIN6port
PIN7port
PIN8port
UPDpulse
matrix-keyboard
OUT
PIN1
PIN2
PIN3
PIN4
PIN5
PIN6
PIN7
PIN8
UPD
OUTnumber
To use the node in your project you should have the ip111/matrix-keyboard library installed. Use the “File → Add Library” menu item in XOD IDE if you don’t have it yet. See Using libraries for more info.

C++ implementation

struct State { };

{{ GENERATED_CODE }}
 const int value [4][4]{
        {13, 12, 11, 10},
        {15, 9, 6, 3},
        {0, 8, 5, 2},
        {14, 7, 4, 1}
    };
    int pinsOut[4];
    int pinsIn[4];
int matrix();
void evaluate(Context ctx) {
     pinsOut[3] = getValue<input_PIN1>(ctx);
     pinsOut[2] = getValue<input_PIN2>(ctx);
     pinsOut[1] = getValue<input_PIN3>(ctx);
     pinsOut[0] = getValue<input_PIN4>(ctx);
     pinsIn[3] = getValue<input_PIN5>(ctx);
     pinsIn[2] = getValue<input_PIN6>(ctx);
     pinsIn[1] = getValue<input_PIN7>(ctx);
     pinsIn[0] = getValue<input_PIN8>(ctx);
    for(int i = 0; i < 4; i++){
        :: pinMode(pinsIn[i], INPUT);
        :: digitalWrite(pinsIn[i], HIGH);
    }
    for(int i = 0; i < 4; i++){
        :: pinMode(pinsOut[i], OUTPUT);
    }
    emitValue<output_OUT>(ctx, matrix());
}
int matrix () // создаем функцию для чтения кнопок
{
    int ret = -1;
  for (int i = 1; i <= 4; i++) // цикл, передающий 0 по всем столбцам
  {
    :: digitalWrite(pinsOut[i - 1], LOW); // если i меньше 4 , то отправляем 0 на ножку
    for (int j = 1; j <= 4; j++) // цикл, принимающих 0 по строкам
    {
      if (:: digitalRead(pinsIn[j - 1]) == LOW) // если один из указанных портов входа равен 0, то..
      {
        ret = value[i - 1][j - 1]; // то b равно значению из двойного массива
        delay(175);
      }
    }
    :: digitalWrite(pinsOut[i - 1], HIGH); // подаём обратно высокий уровень
  }
    return ret;
}