//#include <PCD8544.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 nokia = Adafruit_PCD8544(3, 4, 5, 6, 7); // Nazwa wyświetlacza, piny: SCLK, MOSI, D/C, CE, RST
#include <Fonts/TomThumb.h> // Niestandardowy zestaw czcionek
const byte potencjometr = A1; // Port, który będzie czytać położenie potencjometru
const byte podswietlenie = 2; // Port, który będzie sterował podświetleniem
byte punkty = 50; // Licznik punktów
byte pozycjaPoziom; // Pozycja spadającej kropli - poziom
byte pozycjaPion; // Pozycja spadającej kropli - pion
byte pozycjaKubka; // Pozycja kubka zbierającego krople
// Tablica z obrazkiem tła
const byte tlo[] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xa4, 0x8d, 0x04, 0xb4, 0x18, 0x92, 0x49, 0xa3, 0x21, 0xa3,
0x50, 0x91, 0x10, 0xc8, 0x08, 0xc4, 0x49, 0x32, 0x44, 0x1a, 0x54, 0x50, 0xa2, 0x21, 0x21, 0x61,
0x24, 0x90, 0x44, 0x90, 0xc4, 0x08, 0x90, 0x91, 0x52, 0x24, 0x92, 0x22, 0x88, 0xa1, 0x11, 0x2a,
0x45, 0x10, 0x92, 0x94, 0x12, 0x14, 0x11, 0x09, 0x16, 0x08, 0x91, 0x2a, 0x50, 0x8c, 0x08, 0x14,
0x08, 0x0a, 0x05, 0x08, 0x05, 0x01, 0x51, 0x50, 0x82, 0x00, 0x08, 0x00, 0x04, 0x02, 0x00, 0x02,
0x00, 0x80, 0x90, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00,
0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x10, 0x84, 0x00, 0x04, 0x0a, 0x02, 0x02, 0x00, 0x0a,
0x01, 0x00, 0x10, 0x8a, 0x00, 0x0a, 0x12, 0x05, 0x05, 0x02, 0x11, 0x02, 0x80, 0x10, 0x92, 0x80,
0x11, 0x29, 0x09, 0x09, 0x45, 0x10, 0x84, 0xa0, 0x10, 0x91, 0x42, 0x20, 0xc4, 0x88, 0xd0, 0xa8,
0x64, 0x88, 0x51, 0x10, 0xa9, 0x35, 0x4c, 0x20, 0xb4, 0x02, 0x92, 0x82, 0x52, 0x0a, 0x90, 0xa4,
0x88, 0x93, 0x0d, 0x49, 0x8c, 0x4c, 0x4c, 0x24, 0xd4, 0x50, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0
};
// Tablica z grafiką kropli
const byte kropla[] PROGMEM = {
B00100000,
B01110000,
B11111000,
B01110000,
};
// Tablica z grafiką kubka
const byte kubek[] PROGMEM = {
B11111110,
B01111100,
B01111100,
B00111000,
};
void setup() {
// Inicjuj wyświetlacz
nokia.begin();
// Ustaw kontrast
nokia.setContrast(60);
// Wyczyść wyświetlacz
nokia.clearDisplay();
// Rysuj tło
nokia.drawBitmap(0, 0, tlo, 84, 48, 1);
// Wybierz zestaw czcionek
nokia.setFont(&TomThumb);
// Zadeklaruj port podświetlenia jako wyjście
pinMode(podswietlenie, OUTPUT);
// Włącz podświetlenie
digitalWrite(podswietlenie, LOW);
//nokia.display();
}
void loop() {
// Losuj początkową pozycję kropli w poziomie
pozycjaPoziom = random(8, 75);
// Procedurę będziemy powtarzać dla kolejnych wierszy ekranu wyznaczonego tymi wartościami
// Procedura będzie przyspieszać powyżej i poniżej wyznaczonej granicy punktów
for (pozycjaPion = 10; pozycjaPion < 37; pozycjaPion = pozycjaPion + 1 + (punkty < 41 || punkty > 59)) {
// Wyczyść część ekranu, w której będzie rysowany stan punktów
nokia.fillRect(73, 0, 9, 6, 0);
// Ustaw kursor
nokia.setCursor(74, 5);
// Rysuj stan punktów
nokia.print(punkty);
// Przegrałeś!
if (punkty < 1) {
// Wyczyść aktywną część ekranu
nokia.fillRect(1, 10, 82, 30, 0);
// Ustaw kursor
nokia.setCursor(23, 27);
// Rysuj komunikat
nokia.print(F("PRZEGRALES!"));
// Wyświetl załadowane grafiki
nokia.display();
// Włącz podświetlenie
digitalWrite(podswietlenie, LOW);
// Zaczekaj chwilę
delay(3000);
// Resetuj stan punktów
punkty = 50;
}
// Wygrałeś!
if (punkty > 99) {
// Wyczyść aktywną część ekranu
nokia.fillRect(1, 10, 82, 30, 0);
// Ustaw kursor
nokia.setCursor(27, 27);
// Rysuj komunikat
nokia.print(F("WYGRALES!"));
// Wyświetl załadowane grafiki
nokia.display();
// Zaczekaj chwilę
delay(3000);
// Resetuj stan punktów
punkty = 50;
}
// Odczytaj wartość potencjometru sterującego pozycją kubka, dodając zakłócenia po przekroczeniu wyznaczonej granicy punktów
pozycjaKubka = map(analogRead(potencjometr), 0, 1023, 6, 80) + (punkty < 21 || punkty > 79) * random(-3, 3);
// Wyczyść aktywną część ekranu
nokia.fillRect(1, 10, 82, 30, 0);
// Włącz podświetlenie (na wypadek, gdyby został wyłączony stratą punktu)
digitalWrite(podswietlenie, LOW);
// Rysuj kubek w pozycji określonej poterncjometrem
nokia.drawBitmap(pozycjaKubka - 5, 35, kubek, 7, 4, 1);
// Rysuj grafikę kropli
nokia.drawBitmap(pozycjaPoziom, pozycjaPion, kropla, 5, 4, 1);
// Wyświetl załadowane grafiki
nokia.display();
// Wykryj interakcję między kroplą, a kubkiem
if (pozycjaKubka > pozycjaPoziom + 2 && pozycjaKubka < pozycjaPoziom + 6 && pozycjaPion > 33) {
// Kropla została złapana, Zwiększ liczbę punktów
punkty = punkty + 1;
// Zwiększ liczbę przebiegów pętli do wartości ostatniej, by przerwać jej działanie i zaliczyć tylko jeden punkt
pozycjaPion = 36;
// Kropla nie została złapana
} else if (pozycjaPion == 36) {
// Zmniejsz liczbę punktów
punkty = punkty - 1;
// Wyłącz podświetlenie
digitalWrite(podswietlenie, HIGH);
}
}
}
Loading
nokia-5110
nokia-5110