blobs.ino 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <EEPROM.h>
  2. #include <SPI.h>
  3. #include <GD2.h>
  4. #define NBLOBS 128 //' a{
  5. xy blobs[NBLOBS];
  6. const xy offscreen = {-16384, -16384};
  7. void setup()
  8. {
  9. GD.begin(~GD_STORAGE);
  10. for (int i = 0; i < NBLOBS; i++)
  11. blobs[i] = offscreen;
  12. Serial.begin(1000000); // JCB
  13. } //' }a
  14. void loop() //' b{
  15. {
  16. static byte blob_i;
  17. GD.get_inputs();
  18. if (GD.inputs.x != -32768)
  19. blobs[blob_i] = GD.inputs.xytouch;
  20. else
  21. blobs[blob_i] = offscreen;
  22. blob_i = (blob_i + 1) & (NBLOBS - 1);
  23. GD.ClearColorRGB(0xd0d0c0); // JCB
  24. GD.ClearColorRGB(0xe0e0e0);
  25. GD.Clear();
  26. GD.ColorRGB(0xa0a0a0);
  27. GD.cmd_text(240, 136, 31, OPT_CENTER, "touch to draw");
  28. // GD.Begin(BITMAPS); // JCB
  29. // GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272); // JCB
  30. // GD.Vertex2ii(0, 0); // JCB
  31. // Draw the blobs from oldest to youngest // JCB
  32. GD.Begin(POINTS);
  33. for (int i = 0; i < NBLOBS; i++) {
  34. // Blobs fade away and swell as they age
  35. GD.ColorA(i << 1);
  36. GD.PointSize((1024 + 16) - (i << 3));
  37. // Random color for each blob, keyed from (blob_i + i)
  38. uint8_t j = (blob_i + i) & (NBLOBS - 1);
  39. byte r = j * 17;
  40. byte g = j * 23;
  41. byte b = j * 147;
  42. GD.ColorRGB(r, g, b);
  43. // Draw it!
  44. blobs[j].draw();
  45. }
  46. GD.swap();
  47. } //' }b