W czeluściach swojego NASA znalazłem mały kod prostej gry którą można odpalić na Arduino.To co będzie nam potrzebne oprócz Arduino Uno to wyświetlacz LCD 16×2 z modułem I2C, 2 przyciski i możemy grać.
Potrzebne elementy:
– Arduino UNO (lub odpowiednik)
– Wyświetlacz LCD 16×2 z modułem I2C
– 2 przyciski
– kabelkologia do połączenia całości
Opis połączenia:
Moduł LCD | Arduino Uno | |
GND | GND | |
VCC | 5V | |
SDA | SDA | |
SCL | SCL |
Sterowanie odbywa się jednym przyciskiem w tym celu podłączamy przycisk między masę układu a pinem 4 Arduino. Zalecam jednak zastosowanie 2 przycisku do resetu zawłaszcza jak już upchniemy całość w schludną obudowę, wówczas przycisk łączymy między GND a pinem „Reset”.
Wstępnie zmontowany układ
Jest to wersja zmontowana na szybko, dziecku już paliło się, aby zamęczyć przyciski 😉
Kod gry:
//pobrano z www.tranzystor.pl
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2); // Adres i wymiar LCD,
#define buttonPin 4 // przycisk funkcyjny
byte stone[8] = {
0b00100,
0b01110,
0b11111,
0b11111,
0b01110,
0b00100,
0b00100,
0b01110
};
byte armsDown[8] = {
0b00100,
0b01010,
0b00100,
0b00100,
0b01110,
0b10101,
0b00100,
0b01010
};
byte armsUp[8] = {
0b00100,
0b01010,
0b00100,
0b10101,
0b01110,
0b00100,
0b00100,
0b01010
};
byte explosion[8] = {
0b10001,
0b01010,
0b01010,
0b00100,
0b01010,
0b01010,
0b10001,
0b00000
};
byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};
int stones[16];
int heroY = 2;
int heroX = 7;
int score = 0;
int level=350;
int life = 5; //życia
void setup() {
lcd.init();
lcd.backlight();
Serial.begin (9600);
randomSeed(analogRead(0));
pinMode(buttonPin, INPUT_PULLUP);
int i = 0;
for (i = 0; i<16; i++) {
stones[i] = 0;
}
lcd.begin(16, 4);
lcd.createChar(0, stone);
lcd.createChar(1, armsUp);
lcd.createChar(2, armsDown);
lcd.createChar(3, explosion);
lcd.createChar(4, heart);
}
void hero() {
int buttonValue = digitalRead(buttonPin);
int charId = 0;
if (buttonValue == LOW) {
heroY = 0;
charId = 1;
} else {
heroY = 1;
charId = 2;
if (stones[heroX] == 1) {
charId = 3;
life--;
score--;
}
}
lcd.setCursor(heroX, heroY);
lcd.write((byte)charId);
}
void moveStones() {
int randS = random(0, 2);
// shift the stones
int i;
for (i=1; i<16; i++) {
stones[i-1] = stones[i];
}
if (randS == 1 && (stones[14] == 1 || stones[13] == 1)) {
stones[15] = 0;
} else {
stones[15] = randS;
}
for (i = 0; i<16; i++) {
if (stones[i] != 0) {
lcd.setCursor(i, 1);
lcd.write((byte)0);
}
}
}
void showLife() {
int i;
for (i=0; i<life; i++) {
lcd.setCursor(i, 0);
lcd.write((byte)4);
}
}
void loop() {
lcd.clear();
if (life > 0) {
moveStones();
hero();
showLife();
score++;
level--;
} else {
lcd.setCursor(1, 0);
lcd.print("Tranzystor.pl");
lcd.setCursor(3, 1);
lcd.print("Wynik:");
lcd.print(score);
//lcd.setCursor(-2, 2);
//lcd.print("Tranzystor.pl");
}
delay(level);
}
Można zrobić to na wyświetlaczu Wyświetlacz LCD 16×2 ???
Przecie to na taki jest 😉
this project dont working!
Check the ino file attached at the end of the entry