Go Down

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

SukkoPera

Beh, è sempre un compromesso, difficilmente si riesce ad avere la botte piena e la moglie ubriaca :).
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

calandra

GRANDI! Tutti!, ma soprattutto generosi. Vi ringrazio per le dritte. Dico un paio di cose : è vero che leggere i manuali è utile, ieri serA HO SCARICATO L'ENNESIMO. Penso di avere talmente tanti tutorial e manuali da far concorrenza ad Arduin CC.  :-)))))
 Il punto è che li ho letti, e tanti. 
Ma è come quando nella vita ti trovi davanti ad un bivio, hai la cartina in mano , anzi ne hai tante, hai viaggiato molto, ma quell'incrocio non te lo aspettavi..
Allora anche se hai imparato a menadito the maps, vai a vedere IL PARTICOLARE e di lì riparti. Avere una dritta non è cercare una scorciatoia, ma capire il punto dal quale ripartire per avere una VISIONE GLOBALE. Il mondo di Arduino è diventato così vasto, che bisognerebbe starci sopra tutti i giorni...CHE BEL SOGNO..sarei l'uomo più felice del mondo se qualcuno, magari di arduino cc, mi dicesse.. Tu lavori per me...Pensare che quattro anni fa ero alle porte logiche. Riprofessionalizzazione.

Intrigante la funzione PORTD, ma forse per me è troppo Ciao vi faccio sapere.

elrospo

Carissimi amici di Arduino, ho collegato  SETTE display

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);  

}
void loop()
{
digitalWrite(2,HIGH);//D//BLANKINGH - 1 //
digitalWrite(3,HIGH);//C//
digitalWrite(4,LOW);//B//

}

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//

}

usare arduino direttamente per pilotare i 7 segmenti mi sembra una caxata pazzesca (rag. Fantozzi  docet)
usa il max 7219  o simili
anche "riuscendo"  l 8 non sarà mai luminoso come l 1

gpb01

#18
Oct 25, 2016, 11:43 pm Last Edit: Oct 25, 2016, 11:45 pm by gpb01
Ma occupa ben 2 byte di RAM in meno!
... in realtà il mio suggerimento usa variabili locali, qundi la memoria è occupata solo fintanto che esiste la funzione  :smiley-razz: :smiley-razz: :smiley-razz:

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

calandra

Cari Amici di Arduino, questo è il punto in cui sono arrivato, tolti i commenti, sono quasi 100 righe di codice in meno. Ho letto la struttura della funzione Void, ma il problema è DOVE Dichiarare tale funzione. Prima del Void Setup , dopo il  Void Loop dopo, durante...insomma in questi giorni mi sono scervellato ma non sono riuscito a capire, dove inserirla e dove richiamarla.
Tornando a noi, grazie al  Vostro aiuto sono riuscito a capire finalmente la srtuttura di For, che usavo ma senza averne una cognizione CHIARA. Il programma lo dimostra. Se adesso mi aiutate con la funzione Void penso che farò un bel programma e farò ulteriori passi in avanti.
Grazie Ancora.
Per rispondere all'amico con la ranocchia, non ricordo il nome, ho preparato un codice con 595, funzionante, ma voglio CAPIRE, NON COPIARE. Poi la  lumminosità è Perfetta. anzi direi fin troppo alta! con un alaimentazione in scambio da 6 V..ho dovuto mettere le lenti filtro per non accecarmi :-)))))))
C..R
Special saluti to my fryend ned, guglie, and other..bye bye
Code: [Select]
byte i,MyPinsStat[]={0,0,1,1,0,0,0,0,0,0,0,};
int MyPins[] ={2,3, 4, 5,6, 7, 8, 9, 10, 11, 12, };
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()
{
for (int i=2;i<12;i++)
//D//BLANKINGH - 1 //
//ABILITAZIONE-EL//
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//
for (int i=2;i<12;i++)
//D//BLANKINGH - 2 //
//ABILITAZIONE-EL//
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-2//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 3 //
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 3//
delay(100);//SPENTO//
//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-//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 4 //
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 4//
delay(100);//SPENTO//
//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 VISUALIZZAZIONE-4-//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 5 //
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 5//
delay(100);//SPENTO//
//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-5-//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 6 //
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 6//
delay(100);//SPENTO//
//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-//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 7 //
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 7//
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//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 8 //
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 8//
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 VISUALIZZIONE 8//
 for (int i=2;i<12;i++)
//D//BLANKINGH - 9//
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 9//
delay(100);
//Spento//
//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);
 for (int i=2;i<12;i++)
//D//BLANKINGH - 10//
//ABILITAZIONE-EL//
//ABILITAZIONE-NUMERO 10(0)//
delay(100);
//Spento//
//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(1000);
}

gpb01

#20
Oct 28, 2016, 04:48 pm Last Edit: Oct 28, 2016, 04:49 pm by gpb01
... vedo che dopo tanto tempo, comunque NON hai seguito il mio consiglio di comprati un libro base relativo al linguaggio 'C' e studiarlo :smiley-evil:

void è il TIPO di dato che ritorna una funzione, NON è una funzione ...
... puoi avere "int miaFunzione()" ed in tal caso la fuzione ritorna un intero, puoi avere "long miaFunzione()" ed in tal caso la funzione ritorna un long o puoi avere "void miaFunzione()" ed in tal caso la funzione NON ritorna nulla.

Una funzione puoi metterla dove vuoi, prima della funzione setup() (che è void setup() perché NON ritorna nulla), puoi metterla dopo la funzione loop() (che è anche essa void perché anche essa non ritorna nulla), o puoi metterla in mezzo tra le due. Ciascuna funzione è un blocco indipendente dalle altre ... quindi ...

Buona cosa sarebbe metterla prima di dove viene richiamata, quindi, nel nostro caso, ad esempio prima del setup() ... se non lo si fa, salvo qui nell'IDE che ti nasconde la creazione dei "prototipi" (la fa lui in background), occorre appunto creare un "prototipo" che dice al compilatore come è fatta la funzione (visto che se la metti DOPO a dove la chiami, lui ancora non la conosce e non sa come è fatta).

Ripeto ... un buon libro di 'C' e tutto diventa più chiaro ;)

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

calandra

#21
Oct 28, 2016, 11:00 pm Last Edit: Oct 28, 2016, 11:24 pm by calandra
Caro Guglielmo, grazie per i consigli, preziosissimi. Ho visto i link che mi hai mandato dei manuali . Alcuni erano free e li ho scaricati, ma son tutti stringati. Ad esempio quello di Simone Maiocchi, Parte dalla storia dei computer passando per i creatori di Arduino e sul Void ci sono 5 rige su 300 pagine. Bellissimo, tanti esempi di shield, ma stringi stringi se vuoi qualcosa di serio, che non occupi 20 capitoli per raccontare come si installa l'IDE di Arduino , DEVI PAGARE!  ...ho 48 anni e non sono ancora riuscito a reinserirmi. Sto postando al freddo..riscaldamento centellinato!
Ho trovato un lavoro a tempo DETERMINATO di UN MESE, come manutentore di una di una palestra. Eppure ho lavorato per una multinazionale elettromeccanica per venti anni.. Se qualcuno qui sopra mi può dare una mano, mi posso permettere di comprare un manuale serio. Posso inviare il mio curriculum.
 Grazie Guglielmo e tutti ,adesso vi Karmo..non volevo buttarla sul patetico, io sono un osso duro...

SukkoPera

Hai provato a vedere se trovi qualcosa in biblioteca?

Cercando un po' ho trovato questo, che pare decente: http://blacklight.gotdns.org/guidac.pdf

Inoltre ti mando un PM.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

calandra

Grazie ai PM siete veramente generosi....qualche problema con la connessione in scadenza e quindi posso scaricare pochissimo, ma poi la rinnovo..tranquilli. Per il momento non riuscireste a farmi un, uno semplice esempio di dove devo inserire Void Blanckingh nel mio listato? Poi appena riesco a scaricare i manuali vado a vedere. Siete molto gentili Grazie. Per rispondere a Succo Pera sulla biblioteca, ci sono stato e ho trovato solo un volume incomprensibile, forse fatto per chi studia matematica....

As_Needed

Vedo che Calandra si impegna sempre di più :D Oltre la varie funzioni che snelliscono e puliscono il codice che già tutti ti hanno suggerito (e se risparmiano memoria pure meglio :D ), vedo che usi delay, che come lo usi tu, va bene, però ti limita se vorrai fare qualche "gioco" in più in futuro ;)
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

vbextreme

Code: [Select]

void Blanking() {
   byte i;
   byte ledStat = 3;

   for (i = 2; i < 6; ++i)
   {
      digitalWrite(i, ledStat & 1);
      ledStat >>= 1;
   }
}


giusto per non usare sram inutilmente e per essere piu performanti.
Easy framework linguaggio C: https://github.com/vbextreme/EasyFramework
Hack your life: http://vbextreme.netai.net/
Unoffical Telegram group: https://telegram.me/joinchat/ALRu8ACkdTdXyz-2P7v13A

calandra

Grazie per il momento..poi vi faccio sapere sviluppi ciao c.r

ExperimentUno

Meglio quello di pablos, ma i numeri in un array.
In molti casi serve ragionare come è fatto il micro, che far ragionare il micro come un umano.

calandra

 Questo è il punto dove sono arrivato, ma metti -togli-troppi errori, poi non funziona, Forse  non mi sono spiegato bene, :(  ma io non devo pilotare LED ma semplici input che vanno ad arduino. Grazie per la pazienza che avete con me! Vi auguro taante cose belle..Sinceramente
Code: [Select]
const int INDICE_PIN = 12; // definisce una costante per il numero di pin
int pinMy[INDICE_PIN] = {2,3,4,5,6,7,8,9,10,11,12}; //Creo un Array per i pin di input//
void setup() 
{
 pinMode ( PinMy[2,3,4,5,6,7,8,9,10,11,12,]OUTPUT);

void loop(){

void Blanking()
{ byte i,pinMyStat[] = (2,HIGH,3,HIGH,4,LOW 5,LOW};

}
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/
//D//BLANKINGH - 1 //
}

SukkoPera

#29
Nov 03, 2016, 03:17 pm Last Edit: Nov 03, 2016, 03:26 pm by SukkoPera
Non prenderla male, ma queste poche righe che hai postato sono zeppe di errori di sintassi e denotano una confusione totale su come si struttura un programma in C. Se vuoi davvero riuscire a concludere qualcosa, non puoi procedere in questo modo. Lascia un attimo perdere questo sketch, prendi il materiale che ti abbiamo fornito, studiatelo e fai tuoi i fondamenti del C. Quindi riparti da uno sketch vuoto ed aggiungi un pezzo alla volta, assicurandoti che funzioni pienamente e che ti sia chiaro il suo funzionamento.

Solo così potrai raggiungere i tuoi obiettivi.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

Go Up