Ho inserito le modalità strobo e beacon alle quali si accede mediante pressione prolungata del cursore (1sec).
In più ho inserito un potenziometro che permette di regolare l'intensità luminosa nelle modalità strobo e beacon.
Adesso la UI è un pò piu completa.
Di seguito riporto tutto il codice di programmazione, scritto da me, utilizzato su Arduino per gestiere l' interfaccia
Spoiler: show
/*UI-LOCK-CPFv1.5.ino
ULTIMO AGGIORNAMENTO 08/01/2017 ORE 19.22
-AGGIUNTI LIVELLI STROBO E BEACON
-AGGIUNTO POTENZIOMETRO PER REGOLARE L'INTENSITA
DI STROBO E BEACON
-OTTIMIZZAZIONE CODICE
-MODIFICATA SELEZIONE ED APERTURA LIVELLI CON PULSANTE "UP"*/
int xPin = A1;
int yPin = A0;
int pot = A3;
int buttonPin = 2;
int aperto=9;
int flagentratablink=0;
int flaguscitablink=0;
unsigned long int timer;
int strobomem=0;
int contsx=0;
int contbutton=0;
int contfirefly=0;
int contsottolivelli=0;
int sottolivello=0;
int contpress=0;
int turbo=0;
int xPosition = 0;
int yPosition = 0;
int potPosition = 0;
int buttonState = 0;
void setup() {
Serial.begin(9600);
delay(500);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(pot, INPUT);
pinMode (9,OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); //activate pull-up resistor on the push-button pin
Serial.println("DRIVER LED - USER INTERFACE - v1.3 - LOCK - CPFITALIA");
Serial.println("");}
void loop() {
xPosition = analogRead(xPin);
yPosition = analogRead(yPin);
potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
buttonState = digitalRead(buttonPin);
if ((analogRead(yPin)>923)&&(contsx==0)&&(contsottolivelli==0)){//SCHIACCO SU E NON HO SOTTOLIVELLI SELEZIONATI VADO IN TURBO
digitalWrite(9, HIGH);
contsx=8;
Serial.println("LIVELLO TURBO - DIRECT DRIVE");
Serial.println("");}
if ((analogRead(yPin)<100)&&(contsx==0)&&(contsottolivelli==0)&&(contfirefly==0)){//SCHIACCO GIU E NON HO SOTTOLIVELLI SELEZIONATI VADO IN FIREFLY
analogWrite(9, 8);
delay(500);
contsx=1;
contfirefly=1;
contsottolivelli=1;
Serial.println("LIVELLO FIREFLY");
Serial.println("");}
if ((analogRead(yPin)<100)&&(contsx==0)&&(contfirefly==0)&&(contsottolivelli==1)){//SCHIACCO GIU E NON HO SOTTOLIVELLI SELEZIONATI VADO IN FIREFLY
analogWrite(9, 8);
delay(500);
contsx=1; //apro i sottolivelli
contfirefly=1; //sono entrato da firefly
contsottolivelli=1;
Serial.println("LIVELLO FIREFLY");
Serial.println("");}
if ((analogRead(yPin)<100)&&(contsx!=0)){delay(50); //SCHIACCIO GIU E DECREMENTO I SOTTOLIVELLI FINO ALLO SPEGNIMENTO
if(contsx==1){analogWrite(9, LOW);contsx=0;contpress=0;Serial.println("---> POWER OFF <--- ");Serial.println("");contfirefly=0;contsottolivelli=1;}//Serial.println("POWER OFF");Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");
if(contsx==2){analogWrite(9, 8);contsx=1;contpress=1;Serial.println("---> FIREFLY <--- ");Serial.println("");} //Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==3){analogWrite(9, 40);contsx=2;contpress=2;Serial.println("---> LIVELLO LOW-1 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==4){analogWrite(9, 80);contsx=3;contpress=3;Serial.println("---> LIVELLO LOW-2 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==5){analogWrite(9, 120);contsx=4;contpress=4;Serial.println("---> LIVELLO MID-1 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==6){analogWrite(9, 160);contsx=5;contpress=5;Serial.println("---> LIVELLO MID-2 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==7){analogWrite(9, 200);contsx=6;contpress=6;Serial.println("---> LIVELLO HIGH-1 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==8){analogWrite(9, 200);contsx=7;contpress=7;Serial.println("---> LIVELLO HIGH-2 <---");Serial.println("");}}
if (analogRead(xPin)<100){//SCHIACCIO A DESTRA - MODO MEMORIA + POWER OFF
delay(50);digitalWrite(9, LOW);
Serial.println( "POWER OFF - MEMORY MODE");
Serial.println( "");}
if (analogRead(xPin)>923){//SCHIACCIO A SINISTRA - POWER OFF - RESET UI
delay(50);digitalWrite(9, LOW);
Serial.println( "POWER OFF - RESET UI");
Serial.println( "");
contsx=0;
contsottolivelli=0;
contfirefly=0;}
if(digitalRead(buttonPin)==HIGH){//SE IL BOTTONE NN E' PREMUTO
timer = millis();//MEMORIZZO MILLIS
for(int i=2;i<=6;i++) digitalWrite(i,HIGH);}
if (digitalRead(buttonPin)==LOW){ //SE PREMO IL BOTTONE
if((millis()-timer <500)&&(contsx<7)){ //SCELTA DEI LIVELLI(PRESSIONE BREVE) - QUANTE VOLTE SCHIACCIO IL PULSANTE?=LIVELLO SCELTO
delay(100);
contbutton=1;
contsottolivelli=1;
contpress++;
Serial.print("........SELEZIONATO LIVELLO:");
if(contpress==1){Serial.println( " FIREFLY........");Serial.println( " ");contsx=0;}
if(contpress==2){Serial.println( " LOW-1........");Serial.println( " ");contsx=1;}
if(contpress==3){Serial.println( " LOW-2........");Serial.println( " ");contsx=2;}
if(contpress==4){Serial.println( " MID-1........");Serial.println( " ");contsx=3;}
if(contpress==5){Serial.println( " MID-2........");Serial.println( " ");contsx=4;}
if(contpress==6){Serial.println( " HIGH-1........");Serial.println( " ");contsx=5;}
if(contpress==7){Serial.println( " HIGH-2........");Serial.println( " ");contsx=6;}
delay(20);}
if((millis()-timer >501)&&(millis()-timer <1000)){//TENENDO SCHIACCIATO UN SECONDO ENTRO IN STROBO
if(strobomem==0)
for(;;){
Serial.println("STROBO HIGH SPEED");potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
analogWrite(9,potPosition);delay(30);analogWrite(9,LOW);delay(30);
if(analogRead(xPin)>923)break;//CHIUDO E VADO IN MEMORY MODE
if(analogRead(xPin)<100)break;//CHIUDO E RESETTO LA UI
if(analogRead(yPin)<100){//SCHIACCIANDO DOWN PASSO ALLO STROBO LENTO
strobomem=1;break;}}}
if(strobomem==1){
for(;;){
Serial.println("STROBO LOW SPEED");potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
analogWrite(9,potPosition);delay(150);analogWrite(9,LOW);delay(150);
if(analogRead(xPin)>923)break;//CHIUDO E VADO IN MEMORY MODE
if(analogRead(xPin)<100)break;//CHIUDO E RESETTO LA UI
if(analogRead(yPin)<100){//SCHIACCIANDO DOWN PASSO AL BEACON
strobomem=2;break;}}}
if(strobomem==2){
for(;;){
Serial.println("BEACON");potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
analogWrite(9,potPosition);delay(50);analogWrite(9,LOW);delay(1000);
if(analogRead(xPin)>923)break;//CHIUDO E VADO IN MEMORY MODE
if(analogRead(xPin)<100)break;//CHIUDO E RESETTO LA UI
if(analogRead(yPin)<100){//SCHIACCIANDO DOWN SPENGO TUTTO
strobomem=3;analogWrite(9,LOW);delay(50);break;}}}
if(strobomem==3){
delay(200);
Serial.println("CHIUSO STROBO");
analogWrite(9,LOW);
strobomem=0;//ALL'USCITA DAL BEACON SPENGO TUTTO E RESETTO LA UI
contsx=0;
contsottolivelli=0;
contfirefly=0;}}
if ((analogRead(yPin)>923)&&(contsottolivelli!=0)&&(contbutton=1)){//SCHIACCIO UP E INCREMENTO I SOTTOLIVELLI O ACCEDO AL LIVELLO SELEZIONATO
delay(50);
if(contsx==6){analogWrite(9, 250);contsx=7;contpress=7;Serial.println("<--- LIVELLO HIGH-2 ---> ");Serial.println("");}//Serial.println("POWER OFF");Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");
if(contsx==5){analogWrite(9, 200);contsx=6;contpress=6;Serial.println("<--- LIVELLO HIGH-1 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==4){analogWrite(9, 160);contsx=5;contpress=5;Serial.println("<--- LIVELLO MID-2 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==3){analogWrite(9, 120);contsx=4;contpress=4;Serial.println("<--- LIVELLO MID-1 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==2){analogWrite(9, 80);contsx=3;contpress=3;Serial.println("<--- LIVELLO LOW-2 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==1){analogWrite(9, 40);contsx=2;contpress=2;Serial.println("<--- LIVELLO LOW-1 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==0){analogWrite(9, 8);contsx=1;contpress=1;Serial.println("<--- LIVELLO FIREFLY --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
}
delay(150);
}
ULTIMO AGGIORNAMENTO 08/01/2017 ORE 19.22
-AGGIUNTI LIVELLI STROBO E BEACON
-AGGIUNTO POTENZIOMETRO PER REGOLARE L'INTENSITA
DI STROBO E BEACON
-OTTIMIZZAZIONE CODICE
-MODIFICATA SELEZIONE ED APERTURA LIVELLI CON PULSANTE "UP"*/
int xPin = A1;
int yPin = A0;
int pot = A3;
int buttonPin = 2;
int aperto=9;
int flagentratablink=0;
int flaguscitablink=0;
unsigned long int timer;
int strobomem=0;
int contsx=0;
int contbutton=0;
int contfirefly=0;
int contsottolivelli=0;
int sottolivello=0;
int contpress=0;
int turbo=0;
int xPosition = 0;
int yPosition = 0;
int potPosition = 0;
int buttonState = 0;
void setup() {
Serial.begin(9600);
delay(500);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(pot, INPUT);
pinMode (9,OUTPUT);
pinMode(buttonPin, INPUT_PULLUP); //activate pull-up resistor on the push-button pin
Serial.println("DRIVER LED - USER INTERFACE - v1.3 - LOCK - CPFITALIA");
Serial.println("");}
void loop() {
xPosition = analogRead(xPin);
yPosition = analogRead(yPin);
potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
buttonState = digitalRead(buttonPin);
if ((analogRead(yPin)>923)&&(contsx==0)&&(contsottolivelli==0)){//SCHIACCO SU E NON HO SOTTOLIVELLI SELEZIONATI VADO IN TURBO
digitalWrite(9, HIGH);
contsx=8;
Serial.println("LIVELLO TURBO - DIRECT DRIVE");
Serial.println("");}
if ((analogRead(yPin)<100)&&(contsx==0)&&(contsottolivelli==0)&&(contfirefly==0)){//SCHIACCO GIU E NON HO SOTTOLIVELLI SELEZIONATI VADO IN FIREFLY
analogWrite(9, 8);
delay(500);
contsx=1;
contfirefly=1;
contsottolivelli=1;
Serial.println("LIVELLO FIREFLY");
Serial.println("");}
if ((analogRead(yPin)<100)&&(contsx==0)&&(contfirefly==0)&&(contsottolivelli==1)){//SCHIACCO GIU E NON HO SOTTOLIVELLI SELEZIONATI VADO IN FIREFLY
analogWrite(9, 8);
delay(500);
contsx=1; //apro i sottolivelli
contfirefly=1; //sono entrato da firefly
contsottolivelli=1;
Serial.println("LIVELLO FIREFLY");
Serial.println("");}
if ((analogRead(yPin)<100)&&(contsx!=0)){delay(50); //SCHIACCIO GIU E DECREMENTO I SOTTOLIVELLI FINO ALLO SPEGNIMENTO
if(contsx==1){analogWrite(9, LOW);contsx=0;contpress=0;Serial.println("---> POWER OFF <--- ");Serial.println("");contfirefly=0;contsottolivelli=1;}//Serial.println("POWER OFF");Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");
if(contsx==2){analogWrite(9, 8);contsx=1;contpress=1;Serial.println("---> FIREFLY <--- ");Serial.println("");} //Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==3){analogWrite(9, 40);contsx=2;contpress=2;Serial.println("---> LIVELLO LOW-1 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==4){analogWrite(9, 80);contsx=3;contpress=3;Serial.println("---> LIVELLO LOW-2 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==5){analogWrite(9, 120);contsx=4;contpress=4;Serial.println("---> LIVELLO MID-1 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==6){analogWrite(9, 160);contsx=5;contpress=5;Serial.println("---> LIVELLO MID-2 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==7){analogWrite(9, 200);contsx=6;contpress=6;Serial.println("---> LIVELLO HIGH-1 <---");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==8){analogWrite(9, 200);contsx=7;contpress=7;Serial.println("---> LIVELLO HIGH-2 <---");Serial.println("");}}
if (analogRead(xPin)<100){//SCHIACCIO A DESTRA - MODO MEMORIA + POWER OFF
delay(50);digitalWrite(9, LOW);
Serial.println( "POWER OFF - MEMORY MODE");
Serial.println( "");}
if (analogRead(xPin)>923){//SCHIACCIO A SINISTRA - POWER OFF - RESET UI
delay(50);digitalWrite(9, LOW);
Serial.println( "POWER OFF - RESET UI");
Serial.println( "");
contsx=0;
contsottolivelli=0;
contfirefly=0;}
if(digitalRead(buttonPin)==HIGH){//SE IL BOTTONE NN E' PREMUTO
timer = millis();//MEMORIZZO MILLIS
for(int i=2;i<=6;i++) digitalWrite(i,HIGH);}
if (digitalRead(buttonPin)==LOW){ //SE PREMO IL BOTTONE
if((millis()-timer <500)&&(contsx<7)){ //SCELTA DEI LIVELLI(PRESSIONE BREVE) - QUANTE VOLTE SCHIACCIO IL PULSANTE?=LIVELLO SCELTO
delay(100);
contbutton=1;
contsottolivelli=1;
contpress++;
Serial.print("........SELEZIONATO LIVELLO:");
if(contpress==1){Serial.println( " FIREFLY........");Serial.println( " ");contsx=0;}
if(contpress==2){Serial.println( " LOW-1........");Serial.println( " ");contsx=1;}
if(contpress==3){Serial.println( " LOW-2........");Serial.println( " ");contsx=2;}
if(contpress==4){Serial.println( " MID-1........");Serial.println( " ");contsx=3;}
if(contpress==5){Serial.println( " MID-2........");Serial.println( " ");contsx=4;}
if(contpress==6){Serial.println( " HIGH-1........");Serial.println( " ");contsx=5;}
if(contpress==7){Serial.println( " HIGH-2........");Serial.println( " ");contsx=6;}
delay(20);}
if((millis()-timer >501)&&(millis()-timer <1000)){//TENENDO SCHIACCIATO UN SECONDO ENTRO IN STROBO
if(strobomem==0)
for(;;){
Serial.println("STROBO HIGH SPEED");potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
analogWrite(9,potPosition);delay(30);analogWrite(9,LOW);delay(30);
if(analogRead(xPin)>923)break;//CHIUDO E VADO IN MEMORY MODE
if(analogRead(xPin)<100)break;//CHIUDO E RESETTO LA UI
if(analogRead(yPin)<100){//SCHIACCIANDO DOWN PASSO ALLO STROBO LENTO
strobomem=1;break;}}}
if(strobomem==1){
for(;;){
Serial.println("STROBO LOW SPEED");potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
analogWrite(9,potPosition);delay(150);analogWrite(9,LOW);delay(150);
if(analogRead(xPin)>923)break;//CHIUDO E VADO IN MEMORY MODE
if(analogRead(xPin)<100)break;//CHIUDO E RESETTO LA UI
if(analogRead(yPin)<100){//SCHIACCIANDO DOWN PASSO AL BEACON
strobomem=2;break;}}}
if(strobomem==2){
for(;;){
Serial.println("BEACON");potPosition = analogRead(pot);
potPosition =map (potPosition, 0, 1023, 0, 255);
analogWrite(9,potPosition);delay(50);analogWrite(9,LOW);delay(1000);
if(analogRead(xPin)>923)break;//CHIUDO E VADO IN MEMORY MODE
if(analogRead(xPin)<100)break;//CHIUDO E RESETTO LA UI
if(analogRead(yPin)<100){//SCHIACCIANDO DOWN SPENGO TUTTO
strobomem=3;analogWrite(9,LOW);delay(50);break;}}}
if(strobomem==3){
delay(200);
Serial.println("CHIUSO STROBO");
analogWrite(9,LOW);
strobomem=0;//ALL'USCITA DAL BEACON SPENGO TUTTO E RESETTO LA UI
contsx=0;
contsottolivelli=0;
contfirefly=0;}}
if ((analogRead(yPin)>923)&&(contsottolivelli!=0)&&(contbutton=1)){//SCHIACCIO UP E INCREMENTO I SOTTOLIVELLI O ACCEDO AL LIVELLO SELEZIONATO
delay(50);
if(contsx==6){analogWrite(9, 250);contsx=7;contpress=7;Serial.println("<--- LIVELLO HIGH-2 ---> ");Serial.println("");}//Serial.println("POWER OFF");Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");
if(contsx==5){analogWrite(9, 200);contsx=6;contpress=6;Serial.println("<--- LIVELLO HIGH-1 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==4){analogWrite(9, 160);contsx=5;contpress=5;Serial.println("<--- LIVELLO MID-2 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==3){analogWrite(9, 120);contsx=4;contpress=4;Serial.println("<--- LIVELLO MID-1 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==2){analogWrite(9, 80);contsx=3;contpress=3;Serial.println("<--- LIVELLO LOW-2 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==1){analogWrite(9, 40);contsx=2;contpress=2;Serial.println("<--- LIVELLO LOW-1 --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
if(contsx==0){analogWrite(9, 8);contsx=1;contpress=1;Serial.println("<--- LIVELLO FIREFLY --->");Serial.println("");}//Serial.print("cont=");Serial.println(cont);Serial.print("contsx=");Serial.println(contsx);Serial.println("");}
}
delay(150);
}
e questo è lo schema completo del funzionamento dell'interfaccia.
A breve metterò anche il video di quest ultimo aggiornamento.
Per qualsiasi dubbio, chiarimento, suggerimenti o altro non esitate a chiedere
ciaoo!!