Pagina 2 di 3

Re: Arduino e UI personalizzata by Lock

Inviato: 08/01/2017, 19:34
da lock
Aggiornamento!!! :)
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);
}
Questo è il circuito con i vari collegamenti (per chi si volesse cimentare nel riprodurla)
Immagine

e questo è lo schema completo del funzionamento dell'interfaccia.
Immagine

A breve metterò anche il video di quest ultimo aggiornamento.

Per qualsiasi dubbio, chiarimento, suggerimenti o altro non esitate a chiedere
ciaoo!!

Re: Arduino e UI personalizzata by Lock

Inviato: 08/01/2017, 19:57
da P.P.
Magari avessi anche solo un'infarinatura di elettrotecnica...

Re: Arduino e UI personalizzata by Lock

Inviato: 09/01/2017, 0:05
da giova80
Complimenti, gran bel lavoro! :goodjob:

Re: Arduino e UI personalizzata by Lock

Inviato: 09/01/2017, 0:29
da lock
P.P. ha scritto:Magari avessi anche solo un'infarinatura di elettrotecnica...
In realtá ti assicuro che sembra piu complicato di quel che é...
Si puo benissimo lavorare con arduino anche senza conoscere bene l'elettronica o elettrotecnica.

Con quel che ho gia postato, (circuito e sketch) chiunque può ricreare la stessa cosa. Basta acquistare quei 4 componenti (spesa totale dalla Cina circa 5-7 dollari) collegarli come in figura , flashare il codice tramite l'apposita ide ed il gioco é fatto...ecco il nostro driver pronto all'uso.

Poi per personalizzare il programma si puo anche mettere mano al codice. Per modificare, ad esempio, i livelli di intensitá basta solo cambiare i parametri in una funzione.

Re: Arduino e UI personalizzata by Lock

Inviato: 09/01/2017, 5:21
da SingWolf
Wow, mi ha sempre affascinato arduino

Re: Arduino e UI personalizzata by Lock

Inviato: 09/01/2017, 10:41
da lock
Aggiornamento!! Oggi metto mano alla regolazione..proverò ad inserire un lm317t per effettuare una regolazione digitale dell'output...ho anche l'idea di creare la predisposizione per un sensore di temperatura che mi generi uno step down per la protezione del led.

Inoltre dalla cina effettuerò un paio di acquisti che mi permetteranno di miniaturizzare tutto, il piu possibile. Non ho intenzione di uscire pazzo in micro saldature smd, nn sono nenache attrezzato per operare sulla microelettronica, pertanto cercherò di creare un driver ed incapsularlo all interno di una scatolina in plastica usando componenti gia semi-preassemblati..ecco cosa mi servirá:

Primo fra tutti l'arduino piu piccolo che ci sia...Arduino Mini...davvero piccolissimo 33x18mm
Immagine

Tastierina a 5 pulsanti...avrei anche potuto costruirmela io...ma trovandola gia assemblata sicuramente il lavoro uscirá molto piu pulito...ne approfitto...il prezzo é irrisorio!!
Immagine

Il mosfet da utilizzare come switch digitale con il pwm di arduino...(gia montato su basetta dará circa un 30x20mm)
Immagine

Lm317t regolatore di tensione
Immagine

Qualche led rgb 5mm come led di stato che gia possiedo

Ed infine (opzionale non necessario ai fini del finzionamento del driver) un mini display che mi permetterá di vedere tutte le informazioni:livello selezionato, tensione celle etc etc
Immagine

Immagine Immagine
Ecco tutto

Re: Arduino e UI personalizzata by Lock

Inviato: 09/01/2017, 13:41
da lock
Ho ritoccato leggermente l'immagine dell'interfaccia e l'ho completata.
Immagine

ho modificato ulteriormente il codice ed inserito i commenti ovunque per renderlo leggibile anche a chi è alle prime armi...Nello spoiler inserisco appunto le immagini prese direttamente dall'ide di Arduino
Spoiler: show
ImmagineImmagine
Immagine
Immagine
Immagine
Immagine

Re: Arduino e UI personalizzata by Lock

Inviato: 10/01/2017, 15:33
da AntoLed
Complimenti Lock! e grazie per la condivisione! ;)
Avevo provato a fare qualche piccolo progetto con arduino uno e mini;
(lampada da scrivania attivabile tramite BT con modulo HC-06; e sensore touch)
attualmente ho un M0 PRO
e un mega2560 che uso nella stampante 3D

Con il codice non vado molto d'accordo; nel senso che crearlo da 0 riesco fin tanto che non sia complesso;
il tuo è pulitissimo e sicuramente ben fatto!

Mi sa che sei anche mio compaesano !

se hai bisogno nel creare un box ad hoc (sia disegnarlo che realizzarlo) rimando a tua disposizione! ;)
Complimenti ancora.

Re: Arduino e UI personalizzata by Lock

Inviato: 10/01/2017, 16:01
da lock
AntoLed ha scritto:Complimenti Lock! e grazie per la condivisione! ;)
Avevo provato a fare qualche piccolo progetto con arduino uno e mini;
(lampada da scrivania attivabile tramite BT con modulo HC-06; e sensore touch)
attualmente ho un M0 PRO
e un mega2560 che uso nella stampante 3D

Con il codice non vado molto d'accordo; nel senso che crearlo da 0 riesco fin tanto che non sia complesso;
il tuo è pulitissimo e sicuramente ben fatto!

Mi sa che sei anche mio compaesano !

se hai bisogno nel creare un box ad hoc (sia disegnarlo che realizzarlo) rimando a tua disposizione! ;)
Complimenti ancora.
Ah grazie..siamo compaesani allora? Sei calabrese di origine?
Cmq per il momento sto inserendo tutto in una cassettina di derivazione...in modo da poter chiudere tutto alla meno peggio e fare un video conclusivo.
Immagine
Immagine

Si il modulino bluethoot lo conosco bene..lho usato anche molto...ho creato anche delle app android per interagirci e gestire apertura e chiusura ad esempio di un relay...probabilmente predisporrò il codice di questa UI anche per un integrazione di questo modulo

Per quanto riguarda il case,in futuro, dopo che arriva tutto il materiale che mi permetterá di ridurre gli ingombri e se nn trovo una solizione carina, ne riparliamoImmagine Immagine

Piuttosto se ti serve qualche dritta per il codice nn esitare a chiedere...nn sono un informatico ma diciamo che me la cavicchio.

Re: Arduino e UI personalizzata by Lock

Inviato: 11/01/2017, 20:14
da lock
Ecco il video completo della UI realizzata mediante Arduino. Ho testato il tutto anche direttamente su una torcetta cinese moddata per l'occasione.

https://youtu.be/_EPk15KM_zI

Domani metto mano alla regolazione digitale della corrente mediante 2xLM317T o 10xAMC7135 . Ho gia fatto qualche prova e tutto sembra funzionare perfettamente.