Go Down

Topic: Topic permanente di programmazione newbie (Read 128049 times) previous topic - next topic

brainbooster

sicuramente astro mi correggerà, ma ci provo  :. , con "void name()" dichiari una funzione che non ritorna alcun valore (tranne quello passabile dal "return") e non si aspetta nessun parametro in entrata con "void name(void)" dovrebbe essere un pò la stessa cosa.
per riassumere:
"tipo di dato ritornato inuscita" "nome funzione" (lista e tipi di parametri in entrata)
void=vuoto/nullo

astrobeed


il campo mi resta vuoto; non posso dichiarare questa variabile come globale perché si riempie di sporcizia; come faccio a portarla nella void? Ho usato una void in quanto devo solo visualizzare valori e non deve restituirmi nulla.


Qui tocca fare un vero e proprio corso di programmazione in C  :smiley-mr-green:
Se non dichiari "char modello[20]" come variabile globale non puoi vederla all'interno delle altre funzioni, i casi sono due o è una variabile globale, e non esiste che si sporca se non ci scrivi sopra, oppure la passi alla funzione sotto forma di puntatore.
Personalmente preferisco sempre l'uso di variabili globali di servizio, cioè la stessa variabile può essere usata per diverse cose, piuttosto che passare puntatori e valori perché a livello assembly il tutto è molto più efficiente dato che l'accesso è diretto alle relative locazioni di memoria, ovviamente non sempre è possibile usare solo variabili globali, ma questo non è il tuo caso.
Scientia potentia est

astrobeed


(tranne quello passabile dal "return")


Se dichiari una funzione come void non ritorna nulla, il return lo puoi usare solo come comando di uscita anticipata, p.e. dopo un confronto, ma non puoi abbinargli nessun valore.
Solo se dichiari la funzione con un ben definito tipo di dato, p.e. int pippo(), con la return ritorni un valore intero, da notare che è possibile ritornare un solo valore, cioè non puoi scrivere una cosa del genere " return A,B;", nel caso servono più valori è indispensabile usare un puntatore ad un array che li contiene.
Scientia potentia est

QuercusPetraea

#138
Mar 10, 2012, 09:36 am Last Edit: Mar 10, 2012, 10:34 am by QuercusPetraea Reason: 1

Dopo questa riga:
for(i=0;i<20;i++) modello = atmel[indice] ;
io mi ritrovo una variabile che chiamo solo "modello" che contiene il nome del micro
che visualizzo con
Serial.println(modello); (ovviamente preceduto da begin…)

se creo una
void data_display(void){
Serial.println(modello); (ovviamente preceduto da begin…)
}
E la richiamo con
data_display();

il campo mi resta vuoto; non posso dichiarare questa variabile come globale perché si riempie di sporcizia; come faccio a portarla nella void? Ho usato una void in quanto devo solo visualizzare valori e non deve restituirmi nulla.


Alla funzione data_display devi passare il parametro modello per la Serial.printnl(modello) cioè
void data_display(tipo_di_dato modello) dove con tipo_di_dato indichi che tipo di parametro è (int, char, byte dipende da come hai dichiarato modello).

Ciao
QP

EDIT: non è obbligatorio che il parametro si chiami modello puoi anche chiamarlo dataout e la funzione diventa
Code: [Select]
void data_display(tipo_di_dato dataout){
Serial.println(dataout);
}


brainbooster

grazie astrobeed, era un pò quello che volevo dire io, anche se avevo dimenticato di mettere in quale caso return ritorna un valore :smiley-mr-green:

menniti

Grazie a tutti, in realtà, come scritto nell'EDIT del mio post precedente, alla fine avevo risolto dichiarandola come variabile globale, la "sporcizia" penso dipendesse dalla seriale aperta, devo farvi presente che i due pin di comunicazione seriale sono anch'essi coinvolti nelle operazioni di read/write della programmazione, quindi devo stare attentissimo a usarli per la comunicazione SOLO quando NON sono in programmazione.
Con queste ultime operazioni, grazie al vostro prezioso aiuto, ho completato la parte di identificazione automatica del micro e di visualizzazione di tutte le sue caratteristiche, quindi ora mi basta inserire un micro nel suo zoccolo, premere un pulsante e istantaneamente esce la maschera che vi posto, figo no? almeno per me che con l'occasione sto muovendo i primi passi nella programmazione e nello studio serio dei datasheet. XD
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

testato

COM75 ??
ci lavori parecchiocon le seriali  :)

cmq bravo per i risultati in cosi' breve tempo
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

astrobeed


la "sporcizia" penso dipendesse dalla seriale aperta, devo farvi presente che i due pin di comunicazione seriale sono anch'essi coinvolti nelle operazioni di read/write della programmazione, quindi devo stare attentissimo a usarli per la comunicazione SOLO quando NON sono in programmazione.


Certamente, se usi Tx e Rx come I/O generici con un qualche flusso dati e tieni aperto il monitor seriale è normale che vedi arrivare cose strane perché l'MCP2200 qualcosa riesce a "carpire" come dato UART valido e lo trasmette verso il pc.

Quote

quindi ora mi basta inserire un micro nel suo zoccolo, premere un pulsante e istantaneamente esce la maschera che vi posto, figo no? almeno per me che con l'occasione sto muovendo i primi passi nella programmazione e nello studio serio dei datasheet. XD


Mi pare stia venendo bene, il prossimo step è una GUI dedicata  :)
Scientia potentia est

menniti


Quote

quindi ora mi basta inserire un micro nel suo zoccolo, premere un pulsante e istantaneamente esce la maschera che vi posto, figo no? almeno per me che con l'occasione sto muovendo i primi passi nella programmazione e nello studio serio dei datasheet. XD


Mi pare stia venendo bene, il prossimo step è una GUI dedicata  :)

Sììììììììììì, buonanotte :smiley-eek-blue: perdo un giorno per ogni variabile che sposto di un cm, figuriamoci se mi metto ad imparare la programmazione delle GUI; tanto per curiosità, con che si dovrebbe fare?
ma poi considera che questa è l'opzione base del mio HW, quella che prevede il master collegato al PC; in realtà l'idea che si proporrà è l'HW completo in stand-alone, con tastiera esadecimale e display 20x4, e lì mi voglio, a far entrare tutta sta roba  :smiley-fat:
Grazie!
ci aggiorniamo a più tardi, ho appena completato la prima voce di menu (lettura dei fuse attuali), ora passo alla scrittura dei valori di default (anti-bricked), e poi alla scrittura dei valori personalizzati; a quel punto avrò finito la "pulizia" del firmware e ci incastono dentro l'operazione di ERASE che mi hai suggerito  XD
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72


programmazione delle GUI; tanto per curiosità, con che si dovrebbe fare?
(...)
ma poi considera che questa è l'opzione base del mio HW, quella che prevede il master collegato al PC; in realtà l'idea che si proporrà è l'HW completo in stand-alone, con tastiera esadecimale e display 20x4, e lì mi voglio, a far entrare tutta sta roba  :smiley-fat:

Infatti a te la GUI non serve, non è un dispositivo che dialogherà col PC ma sarà indipendente.

astrobeed


Figuriamoci se mi metto ad imparare la programmazione delle GUI; tanto per curiosità, con che si dovrebbe fare?


Con quello che ti pare, puoi usare qualunque linguaggio di programmazione per pc che ti permette di creare form con i relativi elementi.
Scientia potentia est

astrobeed


Sììììììììììì, buonanotte :smiley-eek-blue: perdo un giorno per ogni variabile che sposto di un cm, figuriamoci se mi metto ad imparare la programmazione delle GUI; tanto per curiosità, con che si dovrebbe fare?


Mi è appena venuta un'idea simpatica, che ne dici di un display lcd virtuale sul pc, configurabile a piacere con varie geometrie, con il quale dialoghi tramite seriale, in modo trasparente, utilizzando gli stessi comandi della libreria LiquidCrystal ?

Scientia potentia est

menniti



Sììììììììììì, buonanotte :smiley-eek-blue: perdo un giorno per ogni variabile che sposto di un cm, figuriamoci se mi metto ad imparare la programmazione delle GUI; tanto per curiosità, con che si dovrebbe fare?


Mi è appena venuta un'idea simpatica, che ne dici di un display lcd virtuale sul pc, configurabile a piacere con varie geometrie, con il quale dialoghi tramite seriale, in modo trasparente, utilizzando gli stessi comandi della libreria LiquidCrystal ?


Se fa quello che ho capito, sarebbe una manna scesa direttamente dalle alte sfere celesti; considerando la mia fatalgnuranza il micro del master in questi giorni lo avrò programmato 1000 volte; infatti ho il terrore di quando dovrò adeguare lo sketch all'LCD, anche se Leo mi ha dato delle dritte eccellenti so già che dovrò fare altre migliaia di programmazioni, ma mentre ora invio lo sketch e basta, poi mi toccherà ogni volta scollegare i due dispositivi e programmarli singolarmente :smiley-sweat: :smiley-sweat:
Invece questo LCD virtuale mi darebbe un duplice immenso vantaggio: quello di poter risolvere il problema (o almeno quello delle impostazioni video) senza usare inizialmente l'altra scheda, mi basterebbe poi scrivere solo il firmware per il display vero e sarei a posto; inoltre avrei la "stessa" interfaccia sia per la modalità PC che per quella stand-alone. Sarebbe bellissimo XD ma come si tramuta l'idea in realtà? :D

@ Leo: a proposito, ormai ci siamo quasi  ;) quindi dovremo dare una "ripassata" alle nozioni sul colloquio micro-master<->micro-lcd; ho conservato un mezzo sketch, ma non mi ricordo più una beneamata :smiley-mr-green:
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

leo72


@ Leo: a proposito, ormai ci siamo quasi  ;) quindi dovremo dare una "ripassata" alle nozioni sul colloquio micro-master<->micro-lcd; ho conservato un mezzo sketch, ma non mi ricordo più una beneamata :smiley-mr-green:

"Protocollo" è la parola magica  ;)
Sono a tua disposizione  XD

menniti



@ Leo: a proposito, ormai ci siamo quasi  ;) quindi dovremo dare una "ripassata" alle nozioni sul colloquio micro-master<->micro-lcd; ho conservato un mezzo sketch, ma non mi ricordo più una beneamata :smiley-mr-green:

"Protocollo" è la parola magica  ;)
Sono a tua disposizione  XD

Ah, pensavo fosse "SIN SALAMIN" :P

Intanto che Astro mi spiega meglio questa sua bella idea continuo a sistemare il firmware, ci fosse un passaggio che non mi fa buttare sudori :smiley-sweat:
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

Go Up