Снова про управление по IR

locker
Offline
Зарегистрирован: 18.11.2014

Здравствуйте коллеги!

Наигрался вволю с пультом "KEYES" и по мере роста над собой воткнулся в такую проблему. Стало интересно вот что - при написании скетча для управления пинами всё понятно. А вот если нужно задействовать все 17 кнопок пульта - как быть? А если кнопок 25 и более?

Использовать switch+case как-то некошерно, слишком много строк получается.

А нельзя ли использовать массив? Тогда по идее программа должна получиться компактнее.

Есть к примеру вот такое:

UP        16736925

DOWN  16754775

LEFT     16720605

RIGHT   16761405

OK        16712445

*          16728765

#          16732845

и т.д.

Можно ли как-нибудь связать команды и коды иначе, чем через case?

 

 

axill
Offline
Зарегистрирован: 05.09.2011

все можно, вопрос в том какая цель

например можно в массив записать связку кода со ссылками на функции и дальше в обработке по циклу пробегаться по массиву и как только нашли нужный код тут же вызываем связанную с ним функцию

примерно как ниже, синтаксис не проверял, но идея рабочая

typedef struct {
    int   ir_code;
    (void*)()    callback;
} t1;
t1 a[] = {
    {11111, func1},
    {22222, func2}
};

void func1() {
......
}

void func2() {
.....
}

locker
Offline
Зарегистрирован: 18.11.2014

Спасибо! Это мысль и я её буду теперь думать.