#include <Shifty.h>
#include <Servo.h>
#define t 7
#define e 10
#define led 1
Shifty shift;
Servo servo;
static int value;
int sound = A1;
int led_fade[3] = { 9, 6, 5 }; //led fade pin settings
int sound_cnt = 0;
int num[22];
void setup() {
// put your setup code here, to run once:
shift.setBitCount(25);
shift.setPins(11, 12, 8);
pinMode(led, OUTPUT);
for (int i = 0; i < 4; i++)
pinMode(led_fade[i], OUTPUT);
pinMode(t, OUTPUT);
pinMode(e, INPUT);
servo.attach(2);
}
void loop() {
randomSeed(analogRead(0));
value = analogRead(A1);
if (value >= 25) {
sound_cnt++;
}
if (sound_cnt == 5)
sound_cnt = 0;
digitalWrite(led, HIGH);
digitalWrite(t, LOW);
delayMicroseconds(2);
digitalWrite(t, HIGH);
delayMicroseconds(2);
digitalWrite(t, LOW);
delayMicroseconds(10);
int dis = pulseIn(e, HIGH) * 340 / 2 / 10000;
for (int i = 0; i < 22; i++) {
num[i] = (random(100) % 22) + 1;
for (int j = 0; j < i; j++) {
if (num[i] == num[j]) {
i--;
break;
}
}
}
if (dis <= 20) {
switch (sound_cnt) {
case 1:
for (int i = 0; i < 22; i++) {
shift.writeBit(i, HIGH);
digitalWrite(led_fade[i], HIGH);
}
delay(100);
break;
case 2:
for (int i = 0; i < 30; i++) {
analogWrite(led_fade[i], i * 8);
shift.writeBit(i, HIGH);
shift.writeBit(i - 7, LOW);
delay(100);
}
break;
case 3:
for (int i = 0; i < 4; i++) {
digitalWrite(led_fade[i], HIGH);
}
for (int i = 0; i < 22; i++) {
shift.writeBit(i, HIGH);
delay(100);
}
for (int i = 45; i < 136; i++) {
servo.write(i);
delay(10);
}
for (int i = 136; i > 45; i--) {
servo.write(i);
delay(10);
}
for (int i = 0; i < 22; i++) {
shift.writeBit(i, LOW);
delay(100);
}
break;
case 4:
for (int i = 0; i < 22; i++) {
if (sound_cnt != 4)
break;
shift.writeBit(i, HIGH);
digitalWrite(led_fade[i], HIGH);
}
for (int i = 0; i < 22; i++) {
shift.writeBit(num[i], LOW);
delay(100);
}
for (int i = 0; i < 4; i++) {
digitalWrite(led_fade[i], LOW);
}
for (int i = 0; i < 255; i++) {
analogWrite(led_fade[0], i);
analogWrite(led_fade[1], i);
analogWrite(led_fade[2], i);
delay(5);
}
for (int i = 255; i > 0; i--) {
analogWrite(led_fade[0], i);
analogWrite(led_fade[1], i);
analogWrite(led_fade[2], i);
delay(5);
}
break;
}
}
}
I'm making a code that makes the led pattern different depending on the value entered by the sound sensor. What I want to make is to get the sound input while each case is running and if that value is greater than 25, stop the code that is going on and move on to the next pattern. I don't know how to programing this.
To achieve this you need get rid all delays from the code.
Now your led cases are blocking, the controller can't do anything else while case is running. Your code need to be completely rewritten. See the "blink without delay" tutorial.
Calling randomSeed(analogRead(0)); from any function (for example, setup() or loop() or myFunction()) will not break your program, but you only need to call it one time to make it work, so it is usually called from setup()
void setup() {
randomSeed(analogRead(0));
}
void loop() {
// your program
}
In the line of code with pulseIn()
pulseIn(e, HIGH) * 340 / 2 / 10000
The timeout (in microseconds) is out of place (pulseIn(e, HIGH, timeout);) and equals 0.017...
Maybe you were looking for a 1.7 seconds timeout =340 / 2 * 10000?