joytest.ino 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <SPI.h>
  2. #include <GD.h>
  3. void setup()
  4. {
  5. #if 0
  6. pinMode(9, OUTPUT);
  7. pinMode(12, INPUT);
  8. digitalWrite(12, HIGH);
  9. for (;;) {
  10. digitalWrite(9, HIGH);
  11. delay(1000);
  12. digitalWrite(9, LOW);
  13. delay(1000);
  14. }
  15. #endif
  16. // Configure input pins with internal pullups
  17. byte i;
  18. for (i = 2; i < 7; i++) {
  19. pinMode(i, INPUT);
  20. digitalWrite(i, HIGH);
  21. }
  22. GD.begin();
  23. GD.ascii();
  24. GD.wr16(RAM_SPRPAL + 2 * 255, TRANSPARENT);
  25. // draw 32 circles into 32 sprite images
  26. for (i = 0; i < 32; i++) {
  27. GD.wr16(RAM_SPRPAL + 2 * i, RGB(8 * i, 64, 255 - 8 * i));
  28. int dst = RAM_SPRIMG + 256 * i;
  29. GD.__wstart(dst);
  30. byte x, y;
  31. int r2 = min(i * i, 256);
  32. for (y = 0; y < 16; y++) {
  33. for (x = 0; x < 16; x++) {
  34. byte pixel;
  35. if ((x * x + y * y) <= r2)
  36. pixel = i; // use color above
  37. else
  38. pixel = 0xff; // transparent
  39. SPI.transfer(pixel);
  40. }
  41. }
  42. GD.__end();
  43. }
  44. }
  45. void circle(int x, int y, byte a)
  46. {
  47. byte sprnum = 0;
  48. GD.sprite(sprnum++, x + 16, y + 16, a, 0, 0);
  49. GD.sprite(sprnum++, x + 0, y + 16, a, 0, 2);
  50. GD.sprite(sprnum++, x + 16, y + 0, a, 0, 4);
  51. GD.sprite(sprnum++, x + 0, y + 0, a, 0, 6);
  52. }
  53. static byte bbits()
  54. {
  55. byte r;
  56. r |= (digitalRead(3) << 0);
  57. r |= (digitalRead(4) << 1);
  58. r |= (digitalRead(5) << 2);
  59. r |= (digitalRead(6) << 3);
  60. r |= (digitalRead(2) << 4);
  61. return r;
  62. }
  63. static byte ands = 0x1f, ors = 0x00;
  64. void loop()
  65. {
  66. GD.putstr(40, 10, digitalRead(4) ? "-" : "U");
  67. GD.putstr(40, 20, digitalRead(5) ? "-" : "D");
  68. GD.putstr(35, 15, digitalRead(6) ? "-" : "L");
  69. GD.putstr(45, 15, digitalRead(3) ? "-" : "R");
  70. GD.putstr(17, 24, digitalRead(2) ? "-" : "S");
  71. int x = analogRead(0);
  72. int y = analogRead(1);
  73. byte bb = bbits();
  74. ands &= bb;
  75. ors |= bb;
  76. if (ands == 0 && ors == 0x1f)
  77. GD.putstr(35, 24, "BUTTONS OK");
  78. char msg[20];
  79. sprintf(msg, "X=%4d, Y=%4d", x, y);
  80. GD.putstr(0, 36, msg);
  81. circle(x / 4, 255 - y / 4, digitalRead(2) ? 15 : 31);
  82. }