#define buttonPin 8
bool prevState;
unsigned long pressTime;
unsigned int delayTime = 20;
bool buttonFiltered = false;
int counter = 1;
unsigned long timer;
int i = 0;
int animSpeed = 100;
void animator(byte arrOfFrames[], int maxFrames, int speed) {
if (millis() >= timer + speed) {
timer = millis();
// Serial.println(maxFrames);
if (i > maxFrames-1){
// Serial.println(i);
i = 0;
}
if (i <= maxFrames-1){
// Serial.println(arrOfFrames[i]);
PORTD = arrOfFrames[i] ^ 255;
i++;
}
}
}
void animations(int selectedAnim) {
if (selectedAnim == 1) {
byte frames[] = {0b00010010, 0b00100100, 0b10000000, 0b01001000};
animator(frames, sizeof(frames)/ sizeof(frames[0]), animSpeed);
} else if (selectedAnim == 2) {
byte frames[] = {0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b01000000};
animator(frames, sizeof(frames)/ sizeof(frames[0]), animSpeed);
} else if (selectedAnim == 3) {
byte frames[] = {0b00000010,0b01000110,0b10000000,0b00101000,0b00010000,0b01100000,0b10010010,0b00001100};
animator(frames, sizeof(frames)/ sizeof(frames[0]), animSpeed+200);
} else if (selectedAnim == 4) {
byte frames[] = {0b0000010,0b00000110,0b00001110,0b00011110,0b00111110,0b01111110,0b11111110,0b01111110,0b00111110,0b00011110,0b00001110,0b00000110,0b00000010, 0b0000000};
animator(frames, sizeof(frames)/ sizeof(frames[0]), animSpeed);
} else if (selectedAnim == 5) {
byte frames[] = {0b10111000,0b11000111};
animator(frames, sizeof(frames)/ sizeof(frames[0]), 1000);
} else if (selectedAnim == 6) {
byte frames[] = {0b10000010, 0b10000100, 0b10001000, 0b10010000, 0b10100000, 0b10000000, 0b10001010, 0b00011010, 0b00110010, 0b01100010, 0b01000010, 0b00000010};
animator(frames, sizeof(frames)/ sizeof(frames[0]), 1000);
}
}
void setup() {
for (int i = 1; i <= 7; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, 0);
}
pinMode(buttonPin, INPUT_PULLUP);
prevState = !digitalRead(buttonPin);
timer = millis();
// Serial.begin(9600);
}
void loop() {
bool buttonReading = !digitalRead(buttonPin);
if (buttonReading != prevState) {
pressTime = millis();
}
if (millis() - pressTime >= delayTime) {
if (buttonFiltered != buttonReading) {
buttonFiltered = buttonReading;
if (buttonFiltered) {
PORTD = 255;
i=0;
if (counter < 6) {
counter ++;
} else {
counter = 1;
}
}
}
}
animations(counter);
prevState = buttonReading;
}