widgets.ino 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. static uint16_t value = 15000; // every widget is hooked to this value
  5. static char message[41]; // 40 character text entry field
  6. static uint16_t options = OPT_FLAT;
  7. static byte prevkey;
  8. void setup()
  9. {
  10. memset(message, 7, 40);
  11. GD.begin(~GD_STORAGE);
  12. }
  13. #define TAG_DIAL 200
  14. #define TAG_SLIDER 201
  15. #define TAG_TOGGLE 202
  16. #define TAG_BUTTON1 203
  17. #define TAG_BUTTON2 204
  18. void loop()
  19. {
  20. GD.get_inputs();
  21. switch (GD.inputs.track_tag & 0xff) { //' track{
  22. case TAG_DIAL:
  23. case TAG_SLIDER:
  24. case TAG_TOGGLE:
  25. value = GD.inputs.track_val;
  26. } //' }track
  27. switch (GD.inputs.tag) {
  28. case TAG_BUTTON1:
  29. options = OPT_FLAT;
  30. break;
  31. case TAG_BUTTON2:
  32. options = 0;
  33. break;
  34. }
  35. byte key = GD.inputs.tag;
  36. if ((prevkey == 0x00) && (' ' <= key) && (key < 0x7f)) {
  37. memmove(message, message + 1, 39);
  38. message[39] = key;
  39. }
  40. prevkey = key;
  41. GD.cmd_gradient(0, 0, 0x404044,
  42. 480, 480, 0x606068);
  43. GD.ColorRGB(0x707070);
  44. GD.LineWidth(4 * 16);
  45. GD.Begin(RECTS);
  46. GD.Vertex2ii(8, 8);
  47. GD.Vertex2ii(128, 128);
  48. GD.Vertex2ii(8, 136 + 8);
  49. GD.Vertex2ii(128, 136 + 128);
  50. GD.Vertex2ii(144, 136 + 8);
  51. GD.Vertex2ii(472, 136 + 128);
  52. GD.ColorRGB(0xffffff);
  53. GD.Tag(TAG_DIAL); //' dial{
  54. GD.cmd_dial(68, 68, 50, options, value);
  55. GD.cmd_track(68, 68, 1, 1, TAG_DIAL); //' }dial
  56. GD.Tag(TAG_SLIDER); //' linear{
  57. GD.cmd_slider(16, 199, 104, 10, options, value, 65535);
  58. GD.cmd_track(16, 199, 104, 10, TAG_SLIDER);
  59. GD.Tag(TAG_TOGGLE);
  60. GD.cmd_toggle(360, 62, 80, 29, options, value,
  61. "that" "\xff" "this");
  62. GD.cmd_track(360, 62, 80, 20, TAG_TOGGLE); //' }linear
  63. GD.Tag(255);
  64. GD.cmd_number(68, 136, 30, OPT_CENTER | 5, value);
  65. GD.cmd_clock(184, 48, 40, options | OPT_NOSECS, 0, 0, value, 0);
  66. GD.cmd_gauge(280, 48, 40, options, 4, 3, value, 65535);
  67. GD.Tag(TAG_BUTTON1);
  68. GD.cmd_button(352, 12, 40, 30, 28, options, "2D");
  69. GD.Tag(TAG_BUTTON2);
  70. GD.cmd_button(400, 12, 40, 30, 28, options, "3D");
  71. GD.Tag(255);
  72. GD.cmd_progress(144, 100, 320, 10, options, value, 65535);
  73. GD.cmd_scrollbar(144, 120, 320, 10, options, value / 2, 32768, 65535);
  74. GD.cmd_keys(144, 168, 320, 24, 28, options | OPT_CENTER | key, "qwertyuiop");
  75. GD.cmd_keys(144, 168 + 26, 320, 24, 28, options | OPT_CENTER | key, "asdfghjkl");
  76. GD.cmd_keys(144, 168 + 52, 320, 24, 28, options | OPT_CENTER | key, "zxcvbnm,.");
  77. GD.Tag(' ');
  78. GD.cmd_button(308 - 60, 172 + 74, 120, 20, 28, options, "");
  79. GD.BlendFunc(SRC_ALPHA, ZERO);
  80. GD.cmd_text(149, 146, 18, 0, message);
  81. GD.swap();
  82. }