Non so se ho capito bene, ma il problema mi sembra, che da una parte decidi con un pulsante se accendere o spegnere una fila di led, dall'altra vuoi regolare la luminosità con un potenziometro, e sorge il problema, TU SPEGNI una fila di led col pulsante, e il potenziometro agisce ugualmente perché "non sa" che tu li hai voluti spegnere...
Io ho pensato di memorizzare all'interno di un array, i led che vuoi spegnere e quelli che vuoi accendere, poi quando agisci col potenziometro, tramite if() verifichi, se devono essere accesi oppure restare spenti.
Ti posto una modifica del tuo codice, NON so se funziona, perché non ho il circuito da provarli
però dovresti capire almeno la logica, e se fa a caso tuo, modificarlo e correggerlo, mi farebbe piacere una tua risposta sul forum comunque vada...
Esempio:
//componente selezione luci (switch)
const int verde1 = 11;
const int verde2 = 9;
const int rosso1 = 10;
const int rosso2 = 3;
//------------
const int pinpotenz = A0;
int potenzval;
int verdeval;
int rossoval;
const int pulsant=2;
const int debaunceDelay=250;
byte stato=1;
int LedAccesoSpento[4]={0};// [0]=verde1 [1]=verde2 [2]=rosso1 [3]=rosso2
void setup() {
pinMode(verde1, OUTPUT);
pinMode(verde2, OUTPUT);
pinMode(rosso1, OUTPUT);
pinMode(rosso2, OUTPUT);
pinMode(pulsant, INPUT);
}
void loop() {
/* Gestione potenziometro */
potenzval = analogRead(pinpotenz);
if (potenzval > 511)
{
verdeval = map (potenzval,0,511,0,255);
if(LedAccesoSpento[0]==1)//Solo se il led è acceso dal pulsante ne cambia valore
analogWrite (verde1, verdeval);
if(LedAccesoSpento[1]==1) //Solo se il led è acceso dal pulsante ne cambia valore
analogWrite (verde2, verdeval);
analogWrite (rosso1, 0);// Qui è sempre consentito, se il se il led è acceso spegne se è spento resta spento
analogWrite (rosso2, 0);
}
if (potenzval < 512)
{
rossoval = map (potenzval,512,1023,255,0);
analogWrite (verde1, 0);
analogWrite (verde2, 0);
if(LedAccesoSpento[2]==1)
analogWrite (rosso1, rossoval);
if(LedAccesoSpento[3]==1)
analogWrite (rosso2, rossoval);
}
/* Gestione pulsante*/
if(digitalRead(pulsant)==HIGH)
{
if(stato<4)
stato=stato+1;
else
stato=1;
switch(stato)//Questo switch deve essere eseguito solo se si preme il pulsante
{
case 1:
digitalWrite(verde1,LOW);
LedAccesoSpento[0]=0;
digitalWrite(verde2,LOW);
LedAccesoSpento[1]=0
digitalWrite(rosso1,LOW);
LedAccesoSpento[2]=0;
digitalWrite(rosso2,LOW);
LedAccesoSpento[3]=0;
break;
case 2:
digitalWrite(verde1,HIGH);
LedAccesoSpento[0]=1;
digitalWrite(verde2,HIGH);
LedAccesoSpento[1]=1
digitalWrite(rosso1,LOW);
LedAccesoSpento[2]=0;
digitalWrite(rosso2,LOW);
LedAccesoSpento[3]=0;
break;
case 3:
digitalWrite(verde1,LOW);
LedAccesoSpento[0]=0;
digitalWrite(verde2,LOW);
LedAccesoSpento[1]=0
digitalWrite(rosso1,HIGH);
LedAccesoSpento[2]=1;
digitalWrite(rosso2,HIGH);
LedAccesoSpento[3]=1;
break;
case 4:
digitalWrite(verde1,HIGH);
LedAccesoSpento[0]=1;
digitalWrite(verde2,HIGH);
LedAccesoSpento[1]=1
digitalWrite(rosso1,HIGH);
LedAccesoSpento[2]=1;
digitalWrite(rosso2,HIGH);
LedAccesoSpento[3]=1;
break;
}
}
delay(25);
delay(debaunceDelay);
}