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