Buongiorno, ho provato a semplificare il problema: basta che solo un cavo di un colore sia posizionato sulla vite di quel colore. Ho posto una resistenza fissa e 10 resistenze diverse per ogni cavo e ho provato a usare il partitore. Quando tutte le viti toccano con almeno un cavo di quel colore, si preme un bottone e si accendono 3 led.
Girando un pò su internet ho scritto questo codice(ben oltre le 16/17 righe che proponete voi):
int pin_Blu=0; //pin blu A0
int pin_Giallo=1; //pin giallo A1
int pin_Rosso=2; //pin rosso A2
int pin_Verde=3; //pin verde A3
int pin_Nero=4; //pin negro A4
double Vin=4.77000; //tensione in ingresso
double V1,V2,V3,V4,V5; //tensione rilevata
double Vblu,Vgiallo,Vrosso,Vverde,Vnero; //tensione per ogni colore
double R=2200.000; //resistenza fissa
double R1,R2,R3,R4,R5,R6,R7,R8,R9,R10; //resistenza per ogni cavo
int val=0;
char Z1,Z2,Z3,Z4,Z5;
void setup() {
pinMode(pin_Blu,INPUT);
pinMode(pin_Giallo,INPUT);
pinMode(pin_Rosso,INPUT);
pinMode(pin_Verde,INPUT);
pinMode(pin_Nero,INPUT);
pinMode(3,INPUT);
pinMode(2,OUTPUT); //led1
pinMode(1,OUTPUT); //led2
pinMode(0,OUTPUT); //led3
}
void loop() {
V1=analogRead(pin_Blu);
V2=analogRead(pin_Giallo);
V3=analogRead(pin_Rosso);
V4=analogRead(pin_Verde);
V5=analogRead(pin_Nero);
Vblu=(V1/1023)*Vin;
Vgiallo=(V2/1023)*Vin;
Vrosso=(V3/1023)*Vin;
Vverde=(V4/1023)*Vin;
Vnero=(V5/1023)*Vin;
R1=Vblu*R/(Vin-Vblu);
R6=Vblu*R/(Vin-Vblu);
R2=Vgiallo*R/(Vin-Vgiallo);
R7=Vgiallo*R/(Vin-Vgiallo);
R3=Vrosso*R/(Vin-Vrosso);
R8=Vrosso*R/(Vin-Vrosso);
R4=Vverde*R/(Vin-Vverde);
R9=Vverde*R/(Vin-Vverde);
R5=Vnero*R/(Vin-Vnero);
R10=Vnero*R/(Vin-Vnero);
val=digitalRead(3);
if(R1==220.000){ //blu collegato bene
Z1='S';
}
else if(R6==820.000){ //blu collegato bene
Z1='S';
}
else{ //blu collegato male
Z1='N';
}
if(R2==330.000){ //giallo collegato bene
Z2='S';
}
else if(R7==1000.000){ //giallo collegato bene
Z1='S';
}
else{ //giallo collegato male
Z2='N';
}
if(R3==470.000){ //rosso collegato bene
Z3='S';
}
else if(R8==1200.000){ //rosso collegato bene
Z3='S';
}
else{ //rosso collegato male
Z3='N';
}
if(R4==560.000){ //verde collegato bene
Z4='S';
}
else if(R9==1500.000){ //verde collegato bene
Z4='S';
}
else{ //verde collegato male
Z4='N';
}
if(R5==680.000){ //nero collegato bene
Z5='S';
}
else if(R10==1800.000){ //nero collegato bene
Z5='S';
}
else{ //nero collegato male
Z5='N';
}
if((Z1=='S')&&(Z2=='S')&&(Z3=='S')&&(Z4=='S')&&(Z5=='S')&&(val==HIGH)){
digitalWrite(2,HIGH);
digitalWrite(1,HIGH);
digitalWrite(0,HIGH);
}
else{
digitalWrite(2,LOW);
digitalWrite(1,LOW);
digitalWrite(0,LOW);
}
}
Sono sicurissimo che ci sono tantissimi metodi e codici più semplici e migliori di questo, scusate per gli orrori che sicuramente ci saranno.