radarchart.ino 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <EEPROM.h> //' A{
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. void setup()
  5. {
  6. Serial.begin(1000000);
  7. GD.begin(~GD_STORAGE);
  8. }
  9. static void ray(int &x, int &y, int r, int i)
  10. {
  11. uint16_t th = 0x8000 + 65536UL * i / 7;
  12. GD.polar(x, y, r, th);
  13. x += 16 * 240;
  14. y += 16 * 136;
  15. }
  16. static void drawdata(int *data)
  17. {
  18. int x, y;
  19. for (int i = 0; i < 7; i++) {
  20. ray(x, y, data[i], i);
  21. GD.Vertex2f(x, y);
  22. }
  23. }
  24. void loop()
  25. {
  26. GD.ClearColorRGB(0xffffff);
  27. GD.Clear();
  28. int x, y;
  29. GD.Begin(POINTS);
  30. GD.ColorRGB(0x000000);
  31. const char *labels[] = {"Eating","Drinking","Sleeping","Designing","Coding","Partying","Running"};
  32. int align[7] = { OPT_CENTERX, 0, 0, 0, OPT_RIGHTX, OPT_RIGHTX, OPT_RIGHTX };
  33. for (int i = 0; i < 7; i++) {
  34. ray(x, y, 16 * 128, i);
  35. GD.cmd_text(x >> 4, y >> 4, 26, OPT_CENTERY | align[i], labels[i]);
  36. }
  37. GD.ColorRGB(220, 220, 200);
  38. GD.LineWidth(8);
  39. GD.Begin(LINES);
  40. for (int i = 0; i < 7; i++) {
  41. GD.Vertex2ii(240, 136);
  42. ray(x, y, 16 * 114, i);
  43. GD.Vertex2f(x, y);
  44. }
  45. for (int r = 19; r <= 114; r += 19) {
  46. GD.Begin(LINE_STRIP);
  47. for (int i = 0; i < 8; i++) {
  48. ray(x, y, 16 * r, i);
  49. GD.Vertex2f(x, y);
  50. }
  51. }
  52. int data[7];
  53. for (int i = 0; i < 7; i++) {
  54. int speed[] = { 5, 7, 6, 3, 4, 8, 2 };
  55. data[i] = 900 + GD.rsin(700, 2 * speed[i] * millis());
  56. }
  57. GD.ColorRGB(151,187,205);
  58. GD.SaveContext();
  59. GD.ColorA(128);
  60. Poly po;
  61. po.begin();
  62. for (int i = 0; i < 7; i++) {
  63. ray(x, y, data[i], i);
  64. po.v(x, y);
  65. }
  66. po.draw();
  67. GD.RestoreContext();
  68. GD.LineWidth(1 * 16);
  69. GD.Begin(LINE_STRIP);
  70. drawdata(data);
  71. ray(x, y, data[0], 0);
  72. GD.Vertex2f(x, y);
  73. GD.Begin(POINTS);
  74. GD.ColorRGB(0xffffff);
  75. GD.PointSize(3.5 * 16);
  76. drawdata(data);
  77. GD.ColorRGB(151,187,205);
  78. GD.PointSize(2.5 * 16);
  79. drawdata(data);
  80. GD.swap();
  81. } //' }A