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;
}