# Kod do Memory (lekkie zmiany)
25.07 - dodano komentarze
```c++
#include "SevSeg.h"
SevSeg ekr;
// Definiujemy piny diod i przycisków
// Dio -> Dioda, Prz -> Przycisk
#define DioA A5
#define DioB A4
#define DioC A3
#define PrzA 2
#define PrzB 3
#define PrzC 4
int buttons(){ // funkcja czekająca na kliknięcie przycisku, zwraca któy został kliknięty
bool pastA = 0, pastB = 0, pastC = 0;
while(true){
bool newA = !digitalRead(PrzA), newB = !digitalRead(PrzB), newC = !digitalRead(PrzC);
digitalWrite(DioA, newA); digitalWrite(DioB, newB); digitalWrite(DioC, newC);
if(pastA == 1 && newA == 0)
return 0;
if(pastB == 1 && newB == 0)
return 1;
if(pastC == 1 && newC == 0)
return 2;
pastA = newA; pastB = newB; pastC = newC;
}
}
// jedna funkcja, zeby nie pisac 5 razy tego samego - włącza lub wyłącza wszystkie światła
void swiatla(bool stan){
digitalWrite(DioA, stan);
digitalWrite(DioB, stan);
digitalWrite(DioC, stan);
}
int lvl = 1; //poziom gry
void setup() {
//konfiguracja pinow
pinMode(DioA, OUTPUT);
pinMode(DioB, OUTPUT);
pinMode(DioC, OUTPUT);
pinMode(PrzA, INPUT_PULLUP);
pinMode(PrzB, INPUT_PULLUP);
pinMode(PrzC, INPUT_PULLUP);
//konfiguracja ekranu
byte digitPins[] = {13};
byte segmentPins[] = {5, 6, 7, 8, 9 ,10, 11, 12};
ekr.begin(COMMON_ANODE, 1, digitPins, segmentPins, true, false, false, false);
ekr.blank();
ekr.setBrightness(90);
//ziarno liczb losowych
randomSeed(digitalRead(A0)); // uwaga żeby na tym pinie nie był podpięty przycisk
Serial.begin(9600);
}
void loop() {
//ekran startowy
//migajaca na ekranie liczba - poziom
long start = millis();
ekr.setNumber(lvl, 1);
ekr.refreshDisplay();
while(true){
ekr.refreshDisplay(); //zostawic, dziala, nie wiem czemu
if (millis()-start < 300){
swiatla(HIGH);
}
else{
swiatla(LOW);
}
if(millis()-start > 600)
start = millis();
if(!digitalRead(PrzA) || !digitalRead(PrzB) || !digitalRead(PrzC))
break;
}
//wylosuj i wyswietl sekwencje
int sequence[lvl];
delay(500);
for(int i=0; i<lvl; i++){
int ktora_dioda = random(0, 3);
sequence[i] = ktora_dioda;
swiatla(LOW);
delay(200);
switch (ktora_dioda){
case 0:
digitalWrite(DioA, HIGH);
break;
case 1:
digitalWrite(DioB, HIGH);
break;
case 2:
digitalWrite(DioC, HIGH);
break;
}
delay(1000);
}
ekr.setNumber(1000, 1);
ekr.refreshDisplay();
swiatla(LOW);
//czekaj na input
bool sukces = 1; // sukces jeżeli nie został popełniony błąd
for(int i=0; i<lvl; i++){
int odczyt = buttons(); // czekaj na klikniecie
if(sequence[i] != odczyt){ // sprawdz czy popełnion błąd
sukces = 0;
break;
}
}
if (sukces)
lvl++;
else{
lvl = 1;
ekr.blank();
ekr.setChars("L");
ekr.refreshDisplay();
delay(3000);
}
}
```