Go Down

Topic: Aiuto per riduzione linee codice (Read 2798 times) previous topic - next topic

calandra

Carissimi amici di Arduino, ho collegato  SETTE display seven segment a Catodo Comune, alimentati a 5V, con DD,DC,DB,DA in comune e gli EL (Enable liberi).
Ho creato una scheda-pannello, con sette indicatori (Seven Segment Display), del tipo TFK-639 a catodo comune, sono messi uno accanto all'altro. I display sono pilotati dal "driver-decoder HC4511, ed a monte da ARDUINO NANO
Ho attivato tutti e sette i display, con un settaggio ed un programma specifico. Questa  applicazione, l'ho immaginata,per creare un contasecondi.. Nello sketch sono evidenziati le varie fasi di abilitazione e visualizzazione. Il settaggio avviene, ponendo DD= HIGH, DC =HIGH, DB= LOW, DA 0= LOW (Blank).
 Nel medesimo tempo, che ho ridotto a 100 millisecondi, avviene l'abilitazione degli ENABLE, che, nel caso specifico vanno da EL1 A EL7. Dopo tale fase , avviene la visualizzazione vera e propria, che ho stimato in 900 mS, per recuperare il ritardo di settaggio. Quindi avviene il conteggio da 1 a 0 (10) , che cronometro alla mano, corrisponde ad un conteggio di secondi.

DOMANDA: Avete idee su come ridurre le linee di programma, ovvero renderlo più snello?
Grazie
Code: [Select]
void setup()
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT); 
pinMode(5,OUTPUT);
pinMode(6,OUTPUT); 
pinMode(7,OUTPUT);
pinMode(8,OUTPUT); 
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}
void loop()
{
digitalWrite(2,HIGH);//D//BLANKINGH - 1 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
//ABILITAZIONE-EL//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
  //VISUALIZZAZIONE NUMERO 1 //
digitalWrite(2,LOW); //1//D//
digitalWrite(3,LOW);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,HIGH);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);//STOP VISUALIZZAZIONE-1//
digitalWrite(2,HIGH);//D//BLANKINGH - 2 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
//ABILITAZIONE-NUMERO 2//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);//SPENTO//
digitalWrite(2,LOW);//2//VISUALIZZAZIONE-2-//
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);//STOP VISUALIZZAZIONE//
digitalWrite(2,HIGH);//D//BLANKINGH - 3 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZIONE NUMERO 3 //
digitalWrite(2,LOW);//3//
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);
//STOP VISUALIZZAZIONE-3-//
digitalWrite(2,HIGH);//D//BLANKINGH - 4 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZZIONE NUMERO 4//
digitalWrite(2,LOW);//4//
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);
//STOP NUMERO 4 //
digitalWrite(2,HIGH);//D//BLANKINGH - 5 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZAZIONE NUMERO 5 // 
digitalWrite(2,LOW);//5//
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay (900);
//STOP VISUALIZZAZIONE NUMERO 5//
digitalWrite(2,HIGH);//D//BLANKINGH - 6 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZAZIONE 6 //
digitalWrite(2,LOW);//6//
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);
//STOP VISUALIZZAZIONE 6//
digitalWrite(2,HIGH);//D//BLANKINGH - 7 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZAZIONE 7 //
digitalWrite(2,LOW);//7//
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);
//STOP VISUALIZZIONE 7//
digitalWrite(2,HIGH);//D//BLANKINGH - 8 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7// 
delay(100);
//VISUALIZZAZIONE 8 //
digitalWrite(2,HIGH);//8//
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);
//STOP 8 //
digitalWrite(2,HIGH);//D//BLANKINGH - 9 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZIONE 9//
digitalWrite(2,HIGH);//9//
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(900);
//STOP VISUALIZZIONE 9//
digitalWrite(2,HIGH);//D//BLANKINGH - 10 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(100);
//VISUALIZZAZIONE 10//
digitalWrite(2,LOW);//10//
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6, LOW);//EL1//
digitalWrite(7,LOW);//EL2//
digitalWrite(8,LOW);//EL3//
digitalWrite(9,LOW);//EL4//
digitalWrite(10,LOW);//EL5//
digitalWrite(11,LOW);//EL6//
digitalWrite(12,LOW);//EL7//
delay(5000);
}

gpb01

Ciao,
io userei dei vettori (array) con i vari valori e poi dei semplici cicli for per accendere/spegnere i segmenti. ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

paulus1969

Io creerei delle funzioni per visualizzare i vari numeri in modo da snellire il loop, se ne crei una
Code: [Select]
void visualizza(byte n)
poi la richiami con visualizza(1), visualizza(2), visualizza(3) e così via quindi se i numeri da visualizzare sono in sequenza potresti anche usare un semplice ciclo for.
Accoppiando questa idea con l'idea dell'array di Gugliemo, ti verrebbe un codice veramente snello.

calandra

Grazie per l'aiuto, non ho mai usato la funzione Void. Ma ci provo, se aveste un piccolo blocco di codice di esempio forse comprenderei prima. Sempre che abbiate tempo. A priori vi ringrazio

R.

nid69ita

#4
Oct 25, 2016, 09:48 am Last Edit: Oct 25, 2016, 09:50 am by nid69ita
Ad esempio mi pare hai spesso questo pezzo con commento blanking
Code: [Select]
digitalWrite(2,HIGH);//D//BLANKINGH - 2 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//
digitalWrite(5,LOW);//A//

Crei una void Blanking()  e poi la richiami dove serve togliendo quelle 4 righe
Code: [Select]
void Blanking()
{ digitalWrite(2,HIGH);//D//BLANKINGH - 2 //
  digitalWrite(3,HIGH);//C//
  digitalWrite(4,LOW);//B//
  digitalWrite(5,LOW);//A//
}


Naturalmente leggersi un libro di C argomento creazioni di funzioni e passaggio parametri è utile.
my name is IGOR, not AIGOR

nid69ita

#5
Oct 25, 2016, 09:56 am Last Edit: Oct 25, 2016, 10:02 am by nid69ita
Inoltre dal pin 6 al 12 il pezzo di codice è sempre uguale, tutti a low, anche qui fai una sola void con quelle righe ed ovunque ci sono quelle righe le sostituisci con la chiamata alla funzione:

Code: [Select]
void SetElLow()
{ digitalWrite(6,LOW);  //EL1
  digitalWrite(7,LOW);  //EL2
  digitalWrite(8,LOW);  //EL3
  digitalWrite(9,LOW);  //EL4
  digitalWrite(10,LOW); //EL5
  digitalWrite(11,LOW); //EL6
  digitalWrite(12,LOW); //EL7
}



my name is IGOR, not AIGOR

gpb01

... Nid, se devi semplificà, semplifica ... :D :D :D

Code: [Select]
void Blanking() {
   byte i, ledStat[] = {0,0,HIGH,HIGH,LOW,LOW};
   for (i = 2; i < 6; i++) digitalWrite(i, ledStat[i]);
}

Guglielmo
Search is Your friend ... or I am Your enemy !

nid69ita

Un pezzo alla volta.  :smiley-mr-green:
Già sarebbe meglio avere un vettore globale con quali pin usa per fare la setup con un for 
my name is IGOR, not AIGOR

gpb01

#8
Oct 25, 2016, 10:10 am Last Edit: Oct 25, 2016, 10:10 am by gpb01
Già sarebbe meglio avere un vettore globale ...
Non sono mica tanto d'accordo ...
... salvo esigenze di visibilità globale, sempre meglio usare variabili locali, come Atmel stessa suggerisce !

Guglielmo
Search is Your friend ... or I am Your enemy !

SukkoPera

#9
Oct 25, 2016, 12:05 pm Last Edit: Oct 25, 2016, 12:08 pm by SukkoPera
... gbp, se devi semplificà, semplifica ... :D :D :D

Code: [Select]
void Blanking() {
   byte i, ledStat[] = {HIGH,HIGH,LOW,LOW};
   for (i = 2; i < 6; i++) digitalWrite(i, ledStat[i-2]);
}

 :smiley-mr-green:
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

pablos71

#10
Oct 25, 2016, 12:48 pm Last Edit: Oct 25, 2016, 12:51 pm by pablos
Se usi il PORTD che sono i pin 5-6-7-8-9-10-11-12 con questo fai tutti i numeri

   
PORTD=0b11000000; // 0
PORTD=0b11111001; // 1
PORTD=0b10100100; // 2
PORTD=0b10110000; // 3
PORTD=0b10011001; // 4
PORTD=0b10010010; // 5
PORTD=0b10000010; // 6
PORTD=0b11111000; // 7
PORTD=0b10000000; // 8
PORTD=0b10011000; // 9

Iè semplificato?
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

gpb01

#11
Oct 25, 2016, 01:10 pm Last Edit: Oct 25, 2016, 01:11 pm by gpb01
... gbp, se devi semplificà, semplifica ... :D :D :D
... NO, è più lento, fa una sottrazione in più ad ogni ciclo for :D :D :D

Guglielmo
Search is Your friend ... or I am Your enemy !

SukkoPera

Ma occupa ben 2 byte di RAM in meno!
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Etemenanki

... fa una sottrazione in più ad ogni ciclo for ...
Ma occupa ben 2 byte di RAM in meno!
... pignoli ... tutti e due ... (:P :D)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

paulus1969

Ogni tanto ritorna la vecchia questione... risparmiare memoria o migliorare la velocità

Go Up