#define buttonPin 2
#define ledPin 3
bool prevState = false;
bool ledState = false;
int arrToCheck[8];
int arrChecker[] = {1,1,1,1,1,1,1,1};
const int levels = 10;
int counter = 0;
bool countChecker = true;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
int len(int arr[]) {
return (sizeof(arr) / sizeof(arr[0]));
}
void arrAdd(int arr[], int toAdd) {
for (int i = 0; i < len(arr); i++) {
arr[i] = arr[i+1];
}
arr[len(arr)] = toAdd;
}
bool arrEquals(int arr[], int arr2[]) {
for (int i = 0; i < len(arr); i++){
if (arr[i] != arr2[i]) {
return false;
}
}
return true;
}
int levelOfBrightness(int levelsPull, int currentLevel) {
if (currentLevel == 0 ) {
return 0;
} else {
return (255.0 / (levelsPull -1)) * currentLevel;
}
}
void loop() {
bool buttonState = digitalRead(buttonPin);
if (buttonState != prevState) {
prevState = buttonState;
while (prevState == buttonState) {
arrAdd(arrToCheck, !digitalRead(buttonPin));
if (arrEquals(arrToCheck, arrChecker)) {
if (countChecker) {
counter ++;
if (counter == levels - 1) {
countChecker = !countChecker;
}
} else {
counter --;
if (counter == 0) {
countChecker = !countChecker;
}
}
}
break;
}
}
analogWrite(ledPin, levelOfBrightness(levels, counter));
}