int data = 2;
int clock = 3;
int latch = 4;
int v;
int lights = 0;
unsigned long startMillis = 0;
unsigned long currentMillis;
int fallDelay = 75;
void setup(){
Serial.begin(9600);
pinMode(latch, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(data, OUTPUT);
}
void loop(){
v = getVolume();
// v = getSerial();
lights = calculate(v);
Serial.println(v);
light(lights);
lights = 0;
barFall();
}
int getSerial(){
if (Serial.available()) {
v = int(Serial.read()-'0');
}
return v;
}
int getVolume(){
v=analogRead(0);
v=constrain(v,0,100);
v=map(v,0,100,1,8);
return v;
}
int calculate(int v){
lights = (1 << v) -1;
return(lights);
}
void light(int lights){
digitalWrite(latch, LOW);
shiftOut(data, clock, MSBFIRST, lights);
digitalWrite(latch, HIGH);
delay(10);
}
unsigned long barFall(){
startMillis=millis();
for (int i = v; i > 0; i--){
int f = ((1<<i) -1) ;
if (millis()-startMillis < fallDelay){
light(f);
delay(40);
}
else{
loop();
}
}
}