---
# System prepended metadata

title: Kod do Memory (lekkie zmiany)

---

# 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);
  }
}
```