96 lines
2.0 KiB
Plaintext
96 lines
2.0 KiB
Plaintext
#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);
|
|
}
|