#include <ArduinoSTL.h>
#include <vector>
#include <cstdlib>
//using namespace std;
const int LEDS[4] = {13,12,11,10};
const int SWITCHES[4] = {7,6,5,4};
int chooseLed(int min ,int max)
{
return random(min,max);
}
void setLeds(int* leds,int size)
{
for(int i = 0;i < size;i++)
{
pinMode(leds[i],OUTPUT);
}
}
void setSwitches(int* switches,int size)
{
for(int i = 0;i < size;i++)
{
pinMode(switches[i],INPUT);
}
}
void playPatterns(std::vector<int> patterns)
{
if(patterns.empty()) return;
for(int pattern : patterns)
{
digitalWrite(LEDS[pattern],HIGH);
delay(500);
digitalWrite(LEDS[pattern],LOW);
delay(500);
}
}
void preparePatterns(int number,std::vector<int>& patterns)
{
int playTime = 0;
while(playTime < number)
{
patterns.push_back(chooseLed(0,4));
playTime++;
}
}
bool GetUserResult(std::vector<int> patterns)
{
int patternPosition = 0;
while(patternPosition < patterns.size())
{
if(digitalRead(SWITCHES[patterns[patternPosition]]) == LOW)
{
return false;
}
digitalWrite(LEDS[patterns[patternPosition]],HIGH);
delay(500);
digitalWrite(LEDS[patterns[patternPosition]],LOW);
delay(500);
patternPosition ++;
}
return true;
}
void setup() {
setLeds((int*)LEDS,4);
setSwitches((int*)SWITCHES,4);
}
void loop() {
std::vector<int> patterns;
int patternsNumber;
bool isSuccess;
if(patterns.empty())
{
patternsNumber = random(1,3);
preparePatterns(patternsNumber,patterns);
}
else
{
patterns.push_back(chooseLed(0,4));
}
playPatterns(patterns);
delay(1000);
isSuccess = GetUserResult(patterns);
if(isSuccess)
{
patternsNumber++;
}
else
{
patterns.clear();
}
delay(1000);
}