Ed eccomi ancora, dopo qualche tempo a fare prove ed a cercare di fare il possibile con le mie forze. Sono riuscito ad ottenere più o meno quello che volevo. Usando le funzioni che mi erano state consigliate da Fabpolli.
Il tutto sembra funzionare in via teorica, il problema sorge quando si va a mettere il tutto in pratica.
Allego il codice intanto:
int ValorePot = 0;
int MappaturaUno = 0;
int MappaturaDue = 0;
int MappaturaTre = 0;
int MappaturaUnoD = 0;
int MappaturaDueD = 0;
int MappaturaTreD = 0;
int ledUno = 9;
int ledDue = 10;
int ledTre = 11;
void setup()
{
Serial.begin(9600);
pinMode (ledUno, OUTPUT);
pinMode (ledDue, OUTPUT);
pinMode (ledTre, OUTPUT);
}
void loop()
{
//Lettura del pin analogico zero
ValorePot = analogRead(0);
//Accensione dell primo led, sulla lettura da 0 a 256 ascendente
if (ValorePot <256){
MappaturaUno = map(ValorePot, 0, 256, 0, 256);
analogWrite(ledUno, MappaturaUno);
}
//Accensione del primo led, sulla lettura da 256 a 512 discendente
if (ValorePot >256 && ValorePot <512){
MappaturaUnoD = map(ValorePot, 255, 0, 256, 512);
analogWrite(ledUno, MappaturaUnoD);
}
// Spegnimento del primo led quando si è fuori scala
if (ValorePot >512){analogWrite (ledUno, 0 );}
//Accensione del secondo led, sulla lettua da 256 a 512 ascendente
if (ValorePot >256 && ValorePot <512){
MappaturaDue = map(ValorePot, 0, 255, 256, 512);
analogWrite(ledDue, MappaturaDue);
}
//Accensione del secondo led, sulla lettura da 512 a 768 discendente
if (ValorePot >512 && ValorePot <768){
MappaturaDueD = map(ValorePot, 255, 0, 512, 768);
analogWrite(ledDue, MappaturaDueD);
}
// Spegnimento del secondo led quando si è fuori scala
if (ValorePot <256){analogWrite (ledDue, LOW);}
if (ValorePot >768){analogWrite (ledDue, LOW);}
// Accensione del terzo led, sulla lettura da 512 a 768 ascendente
if (ValorePot >511 && ValorePot <768){
MappaturaTre = map(ValorePot, 0, 255, 512, 767);
analogWrite(ledTre, MappaturaTre);
}
//Accensione terzo primo led, sulla lettura da 768 a 1020 discendente
if (ValorePot >768 && ValorePot <1020){
MappaturaTreD = map(ValorePot, 255, 0, 768, 1020);
analogWrite(ledTre, MappaturaTreD);
}
// Spegnimento del terzo led quando si è fuori scala
if (ValorePot <512){analogWrite (ledTre, 0 );}
if (ValorePot >1020){analogWrite (ledTre, 0 );}
Serial.print("Valore Originale ");
Serial.println(ValorePot);
Serial.print("Valore Uno Positivo ");
Serial.println(MappaturaUno);
Serial.print("Valore Uno Negativo ");
Serial.println(MappaturaUnoD);
Serial.print("Valore Due Positivo ");
Serial.println(MappaturaDue);
Serial.print("Valore Due Negativo ");
Serial.println(MappaturaDueD);
Serial.print("Valore Tre Rimappato ");
Serial.println(MappaturaTre);
Serial.print("Valore Tre Rimappato ");
Serial.println(MappaturaTreD);
Serial.println();
delay(50);
}
Il codice è abbastanza semplice, ora il problema è quando si va nella pratica.
Quando si arriva al punto in cui il Led1 è completamente acceso, mentre il secondo sta iniziando ad accendersi, si notano degli sfarfallii strani. Entrambi i led tendono a spegnersi e riaccendersi poco dopo. Stessa cosa accade quando si passa dal secondo led completamente acceso all'accensione del terzo.
Da cosa potrebbe dipendere questo sfarfallio?
Mie ipotesi:
-Il variatore che ho usato fino ad adesso, ne ha viste davvero tante, forse troppe, quindi risulta essere non proprio lineare nella variazione. Ho avvalorato questa ipotesi con il fatto che sostituendo il variatore, si vedono delle migliorie. In ogni modo il risultato non è propriamente dei migliori.
-Ci sono degli errori nel codice, ma sfortunatamente non sono riuscito a trovare i possibili problemi e quindi sono costretto a rimettermi nelle vostre mani.
In ogni modo grazie per l'aiuto che vorrete darmi.