#include #include #define W 128 #define H 64 #define B 4 #define MX (W/B) #define MY (H/B) Adafruit_SSD1306 d(W, H, &Wire, -1); #define X 26 #define Y 27 #define BTN 15 int sx[50], sy[50]; int len = 3; int dx = 1, dy = 0; int fx, fy; unsigned long t = 0; void food() { fx = random(MX); fy = random(MY); } void resetGame() { len = 3; dx = 1; dy = 0; sx[0]=10; sy[0]=10; sx[1]=9; sy[1]=10; sx[2]=8; sy[2]=10; food(); } void setup() { pinMode(BTN, INPUT_PULLUP); Wire.begin(); d.begin(SSD1306_SWITCHCAPVCC, 0x3C); randomSeed(analogRead(0)); resetGame(); } void loop() { if (!digitalRead(BTN)) resetGame(); int vx = analogRead(X); int vy = analogRead(Y); if (vx < 1000 && dx == 0) { dx=-1; dy=0; } if (vx > 3000 && dx == 0) { dx=1; dy=0; } if (vy < 1000 && dy == 0) { dx=0; dy=1; } if (vy > 3000 && dy == 0) { dx=0; dy=-1; } if (millis() - t > 160) { t = millis(); for (int i=len-1;i>0;i--) { sx[i]=sx[i-1]; sy[i]=sy[i-1]; } sx[0]+=dx; sy[0]+=dy; if (sx[0]<0||sx[0]>=MX||sy[0]<0||sy[0]>=MY) { resetGame(); return; } for (int i=1;i