roboforum.ru

Технический форум по робототехнике.

Меню с помощью библиотеки m2tklib

Меню с помощью библиотеки m2tklib

past0r » 07 апр 2012, 15:13

Доброго времени суток!
Появилась задача: создание меню для Arduino. За основу взял Arduino, экранчик ks0108 ну и "блок" кнопочек сделанных на разнице сопротивления.
Для программной реализации меню решил взять библиотеку m2tklib
Но все застопорилось на том, что данная библиотека заточена на работу с кнопки подключенными к разным входам на МК.
Была некая доработка библиотеки, после чего библиотека стала работать с событиями Arduino. Но как заставить библиотеку вопринимать эти события я не понимаю. помогите пожалуйста разобраться с примером!

За основу возьмем пример идущий в составе самой библиотеки под названием Combo.pde
Код: Выделить всёРазвернуть
#include <glcd.h>      // inform Arduino IDE that we will use GLCD library
#include "M2tk.h"
#include "utility/m2ghglcd.h"

uint8_t uiKeySelectPin = 3;
uint8_t uiKeyDownPin = 2;
uint8_t uiKeyUpPin = 1;
uint8_t uiKeyExitPin = 0;

uint8_t select_color = 0;
uint8_t select_priority = 0;

void fn_ok(m2_el_fnarg_p fnarg) {
  /* accept selection */
}

void fn_cancel(m2_el_fnarg_p fnarg) {
  /* discard selection */
}

const char *fn_idx_to_color(uint8_t idx)
{
  if ( idx == 0 )
    return "red";
  else if (idx == 1 )
    return "green";
  return "blue";
}

const char *fn_idx_to_priority(uint8_t idx)
{
  switch(idx)
  {
    case 0: return "lowest";
    case 1: return "low";
    case 2: return "medium";
    case 3: return "high";
    case 4: return "highest";
  }
  return "";
}


M2_LABEL(el_label1, NULL, "Color:");
M2_COMBO(el_combo1, NULL, &select_color, 3, fn_idx_to_color);

M2_LABEL(el_label2, NULL, "Priority: ");
M2_COMBO(el_combo2, "v1", &select_priority, 5, fn_idx_to_priority);

M2_BUTTON(el_cancel, NULL, "cancel", fn_cancel);
M2_BUTTON(el_ok, NULL, " ok ", fn_ok);

M2_LIST(list) = {
    &el_label1, &el_combo1,
    &el_label2, &el_combo2, 
    &el_cancel, &el_ok
};
M2_GRIDLIST(list_element, "c2",list);
M2tk m2(&list_element, m2_es_arduino, m2_eh_2bs, m2_gh_glcd_ffs);

void setup() {
  m2.setPin(M2_KEY_SELECT, uiKeySelectPin);
  m2.setPin(M2_KEY_NEXT, uiKeyDownPin);
  m2.setPin(M2_KEY_PREV, uiKeyUpPin);
  m2.setPin(M2_KEY_EXIT, uiKeyExitPin); 
}

void loop() {
  m2.checkKey();
  if ( m2.handleKey() ) {
      m2.draw();
  }
}

Кусок скетча отвечающего за распознование нажатия определенной кнопки:
Код: Выделить всёРазвернуть
uint8_t readButtons() 
{
  int b,c = 0;
  c=analogRead (A0);
  if (c == 0)
  {
    //Serial.println("KeyNone");
    return M2_KEY_NONE;

  }
  else
    if  (c>615 && c<630)
    {
      // Serial.println("KeySelect");
      return M2_KEY_EVENT(M2_KEY_SELECT);

    }
    else
      if (c>685 && c<700)
      {
        //  Serial.println("KeyExit");
        return M2_KEY_EVENT(M2_KEY_EXIT);
      }
      else
        if (c>765 && c<785)
        {
          //  Serial.println("KeyNext");
          return M2_KEY_EVENT(M2_KEY_NEXT);
        }
        else
          if (c>875 && c<893)
          {
            //   Serial.println("KeyPrev");
            return M2_KEY_EVENT(M2_KEY_PREV);
          }
          else
            if (c==1023)
            {
              //   Serial.println("KeyDataUp");
              return M2_KEY_EVENT(M2_KEY_DATA_UP);
            }
}

Как их связать, подскажите пожалуйста, заранее благодарен!!!

зы Примеров у автора библиотеки я не нашел, кроме этого (m2esarduinoir.c).


Rambler\'s Top100 Mail.ru counter