Hi, After searching for a bit, I found there is no helpful answer for if you can nest min() functions. I've seen that min(a+3, 2)
math inside a min() function does not yield the right results, but would nesting work? I can't test this yet though, and I am curious. If it doesn't work what would be another solution beside ten different variables. Here is my nest: minvoldif = min(voldif[0], min(voldif[1], min(voldif[2], min(voldif[3], min(voldif[4], min(voldif[5], min(voldif[6], min(voldif[7], min(voldif[8], voldif[9])))))))));
Don't mind the weird variable names. It is volume lest difference. For reference here is the rest of the code. Thanks for any help on this.
//LED OUTPUT
#define DATA 6
#define LATCH 8
#define CLOCK 10
int valarray[] = {102, 204, 306, 409, 511, 613, 716, 818, 920, 1023};
int shiftbin[] = {B01000000, B01100000, B01110000, B01111000, B01111100, B01111110, B01111111, B11111111, B11111111, B11111111};
int voldif[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int binary = 0;
int minvoldif = 0;
//volume
int setvolume = 0;
int volume = 0;
//in
int button = 0;
int pot = 0;
int beforepot = 0;
int rep = 0;
//relay
bool latch = false;
void setup() {
pinMode(9, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLOCK, OUTPUT);
Serial.begin(9600);
}
void queryout() {
voldif[0] = abs(valarray[0] - volume);
voldif[1] = abs(valarray[1] - volume);
voldif[2] = abs(valarray[2] - volume);
voldif[3] = abs(valarray[3] - volume);
voldif[4] = abs(valarray[4] - volume);
voldif[5] = abs(valarray[5] - volume);
voldif[6] = abs(valarray[6] - volume);
voldif[7] = abs(valarray[7] - volume);
voldif[8] = abs(valarray[8] - volume);
voldif[9] = abs(valarray[9] - volume);
minvoldif = min(voldif[0], min(voldif[1], min(voldif[2], min(voldif[3], min(voldif[4], min(voldif[5], min(voldif[6], min(voldif[7], min(voldif[8], voldif[9])))))))));
Serial.print("Min: " + minvoldif); //Logging
binary = valarray[voldif[minvoldif]];
binary = shiftbin[binary];
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, binary);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
if (valarray[voldif[minvoldif]] == 9) {
digitalWrite(9, HIGH);
}
if (valarray[voldif[minvoldif]] == 10) {
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
}
digitalWrite(LATCH, HIGH);
if (latch == true) {
digitalWrite(12, HIGH);
}
else {
digitalWrite(12, LOW);
}
}
void relay() {
if (latch == false) {
if (volume > setvolume) {
digitalWrite(13, HIGH);
Serial.println("Engaged Drop"); //Logging
}
else {
digitalWrite(13, LOW);
}
}
else {
digitalWrite(13, LOW);
}
}
void queryin() {
volume = analogRead(0);
button = analogRead(1);
if (button > 100) {
if (latch == false) {
latch == true;
Serial.println("Latch on"); //Logging
}
else {
latch = false;
}
digitalWrite(12, HIGH);
delay(250);
digitalWrite(12, LOW);
delay(250);
digitalWrite(12, HIGH);
delay(250);
digitalWrite(12, LOW);
delay(250);
}
pot = analogRead(3);
if (pot != beforepot) {
do {
pot = analogRead(3);
setvolume = pot;
if (pot != beforepot) {
beforepot = pot;
rep = 0;
}
else {
rep = rep + 1;
}
voldif[0] = abs(valarray[0] - setvolume);
voldif[1] = abs(valarray[1] - setvolume);
voldif[2] = abs(valarray[2] - setvolume);
voldif[3] = abs(valarray[3] - setvolume);
voldif[4] = abs(valarray[4] - setvolume);
voldif[5] = abs(valarray[5] - setvolume);
voldif[6] = abs(valarray[6] - setvolume);
voldif[7] = abs(valarray[7] - setvolume);
voldif[8] = abs(valarray[8] - setvolume);
voldif[9] = abs(valarray[9] - setvolume);
minvoldif = min(voldif[0], min(voldif[1], min(voldif[2], min(voldif[3], min(voldif[4], min(voldif[5], min(voldif[6], min(voldif[7], min(voldif[8], voldif[9])))))))));
Serial.print("Min: " + minvoldif); //Logging
binary = valarray[voldif[minvoldif]];
binary = shiftbin[binary];
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, binary);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
if (valarray[voldif[minvoldif]] == 9) {
digitalWrite(9, HIGH);
}
if (valarray[voldif[minvoldif]] == 10) {
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
}
} while (rep < 100);
}
}
void loop() {
queryin();
queryout();
relay();
}