1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include <SPI.h>
- #include <GD.h>
- void setup()
- {
- #if 0
- pinMode(9, OUTPUT);
- pinMode(12, INPUT);
- digitalWrite(12, HIGH);
- for (;;) {
- digitalWrite(9, HIGH);
- delay(1000);
- digitalWrite(9, LOW);
- delay(1000);
- }
- #endif
- // Configure input pins with internal pullups
- byte i;
- for (i = 2; i < 7; i++) {
- pinMode(i, INPUT);
- digitalWrite(i, HIGH);
- }
- GD.begin();
- GD.ascii();
- GD.wr16(RAM_SPRPAL + 2 * 255, TRANSPARENT);
- // draw 32 circles into 32 sprite images
- for (i = 0; i < 32; i++) {
- GD.wr16(RAM_SPRPAL + 2 * i, RGB(8 * i, 64, 255 - 8 * i));
- int dst = RAM_SPRIMG + 256 * i;
- GD.__wstart(dst);
- byte x, y;
- int r2 = min(i * i, 256);
- for (y = 0; y < 16; y++) {
- for (x = 0; x < 16; x++) {
- byte pixel;
- if ((x * x + y * y) <= r2)
- pixel = i; // use color above
- else
- pixel = 0xff; // transparent
- SPI.transfer(pixel);
- }
- }
- GD.__end();
- }
- }
- void circle(int x, int y, byte a)
- {
- byte sprnum = 0;
- GD.sprite(sprnum++, x + 16, y + 16, a, 0, 0);
- GD.sprite(sprnum++, x + 0, y + 16, a, 0, 2);
- GD.sprite(sprnum++, x + 16, y + 0, a, 0, 4);
- GD.sprite(sprnum++, x + 0, y + 0, a, 0, 6);
- }
- static byte bbits()
- {
- byte r;
- r |= (digitalRead(3) << 0);
- r |= (digitalRead(4) << 1);
- r |= (digitalRead(5) << 2);
- r |= (digitalRead(6) << 3);
- r |= (digitalRead(2) << 4);
- return r;
- }
- static byte ands = 0x1f, ors = 0x00;
- void loop()
- {
- GD.putstr(40, 10, digitalRead(4) ? "-" : "U");
- GD.putstr(40, 20, digitalRead(5) ? "-" : "D");
- GD.putstr(35, 15, digitalRead(6) ? "-" : "L");
- GD.putstr(45, 15, digitalRead(3) ? "-" : "R");
- GD.putstr(17, 24, digitalRead(2) ? "-" : "S");
- int x = analogRead(0);
- int y = analogRead(1);
- byte bb = bbits();
- ands &= bb;
- ors |= bb;
- if (ands == 0 && ors == 0x1f)
- GD.putstr(35, 24, "BUTTONS OK");
- char msg[20];
- sprintf(msg, "X=%4d, Y=%4d", x, y);
- GD.putstr(0, 36, msg);
- circle(x / 4, 255 - y / 4, digitalRead(2) ? 15 : 31);
- }
|