0
Offline
Faraday Member
Karma: 17
Posts: 3925
Arduino rocks
|
 |
« on: September 24, 2011, 09:29:39 am » |
Mi chiarite quando si usa l'uno o l'altro ? spesso vedo che si passa dall'uso dell'uno all'altro, quindi sembra che entrambi possano fare le stesse cose. Ci sono cose che l'uno puo' fare e l'altro no ? Ad esempio in questo progetto che sto' facendo voglio visualizzare per 5sec l'orario, per 5sec, la data, per 5sec la temperatura. Voi lo fareste con IF o Switch ? Ringrazio anticipatamente per le sicure illuminazioni che mi perverranno 
|
|
|
|
« Last Edit: November 12, 2011, 01:51:21 pm by Testato »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16499
Don't know what I do
|
 |
« Reply #1 on: September 24, 2011, 09:34:59 am » |
Lo switch serve per semplificare il codice se devi fare molti controlli uno dietro l'altro che, usando if-then-else, verrebbe fuori una sequenza illeggibile di tali costrutti.
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4915
фон Крыса
|
 |
« Reply #2 on: September 24, 2011, 09:36:18 am » |
Serve per evitere di fare un controllo dietro l'altro... invece di mettere molti if usi il CASE
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
0
Offline
Faraday Member
Karma: 17
Posts: 3925
Arduino rocks
|
 |
« Reply #3 on: September 24, 2011, 10:08:04 am » |
quindi e' piu' un discorso stilistico e cmq con entrambi si fa tutto.
ma sul mio caso specifico come ragionare ?
stavo pensando di creare una variabile con millis che conta fino a 15sec, e poi i 3 case settati su 5-10-15
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4915
фон Крыса
|
 |
« Reply #4 on: September 24, 2011, 10:17:37 am » |
Certo ad una variabile assegni il valore di millis e poi nel case a seconda del valore esegui quello che vuoi...
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8241
:(){:|:&};:
|
 |
« Reply #5 on: September 24, 2011, 10:21:22 am » |
il case non può lavorare con range di valori, ma solo con uguaglianze. dal punto di vista assembly in oltre è leggermente più efficiente, soprattutto se non si usa il break.
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4915
фон Крыса
|
 |
« Reply #6 on: September 24, 2011, 10:25:21 am » |
Beh prima del case fà un controllo... ed assegna alle variabili un valore 0-1-2 ma a questo punto diventerebbe stupido, è verò me ne ero scordato... usa gli If consecutivi 
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
0
Offline
Faraday Member
Karma: 17
Posts: 3925
Arduino rocks
|
 |
« Reply #7 on: September 24, 2011, 03:59:28 pm » |
grazie, delle risposte, sto' lavorando sulla creazione della data, giorno mese anno mi potete tradurre in italiano questo comando: long minutes = time / MINS; time -= minutes * MINS; nella variabile time ci sono i secondi, ma il resto e' una lingua che non parlo 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 17
Posts: 3925
Arduino rocks
|
 |
« Reply #8 on: September 24, 2011, 04:11:15 pm » |
credevo fosse stato facile aggiungere la data ad un orologio  ho iniziato a fare questo discorso: 1 ora = 60min 1 giorno = 24 ore 1 mese = ???????? se i mesi erano tutti di 30 giorni sarebbe stato facile, come si risolve ? c'e' una libreria per la gestione della data ? tipo calendario ?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16499
Don't know what I do
|
 |
« Reply #9 on: September 24, 2011, 04:17:08 pm » |
Intanto mettila così: long minutes = time / MINS; time = time - (minutes * MINS); Dichiara minutes di tipo long che contiene i minuti come risultato di time/MINS Poi da time sottrae il valore di minutes*MINS, che equivale a lasciare in time la parte decimale. Cioè, mi spiego: siccome minutes è un intero di tipo lungo, conterrà solo la parte intera della divisione. Dopodiché da time verrà levata la parte intera, per lasciare solo i decimali. Come? Togliendo minutes*MINS. E' una forma di conversione dalle date o dagli orari in formato decimale verso il formato temporale oo:mm:ss
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 17
Posts: 3925
Arduino rocks
|
 |
« Reply #10 on: September 24, 2011, 04:32:11 pm » |
ora e' molto piu' chiaro  per il resto che fo ? mi compro un RTC ? non ci sono librerie che fungono da calendario ?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16499
Don't know what I do
|
 |
« Reply #11 on: September 24, 2011, 04:37:43 pm » |
credevo fosse stato facile aggiungere la data ad un orologio  ho iniziato a fare questo discorso: 1 ora = 60min 1 giorno = 24 ore 1 mese = ???????? se i mesi erano tutti di 30 giorni sarebbe stato facile, come si risolve ? c'e' una libreria per la gestione della data ? tipo calendario ? Semplicemente ti fai un array con i giorni dei mesi: mesi={31,28,31... ecc..} Per i bisestili, li calcoli semplicemente ed aggiungi 1 giorno a febbraio nel caso di anno bisestile. boolean bistestile(int anno) { if (((anno % 4) ==0) && ((anno % 100) != 0) or ((anno % 400) ==0)) { return true; } else { return false; } }
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15746
+39 349 2158303
|
 |
« Reply #12 on: September 24, 2011, 05:00:23 pm » |
La differenza tra IF e Switch case é anche che nelle IF puoi controllare piú condizioni e concatenarle in modo AND oppure OR. Percui puoi usare Switch-case solo in particolari casi e non al posto del IF. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 17
Posts: 3925
Arduino rocks
|
 |
« Reply #13 on: September 25, 2011, 02:36:47 am » |
quante cose da imparare  il mio bell'orologio usa un array per passare avanti l'orario, io ne ho aggiunto un altro per la data, funziona, bravo mi sono detto. prima di affrontare la questione dei mesi usando la strada spianata da Leo volevo creare l'IF per mandare a video 3 sec l'orario e 3 sec la data. Debbo usare il blink without delay mi sono detto, lo modifico ed all'aspetto sembra gradevole. Col cavolo che funziona, Come si fa la copia di un array ? // IF senza delay per alternare Ora/Data if (millis() - previousMillis > interval) { previousMillis = millis(); if (alterna == ClockArray) alterna = DateArray; else alterna = ClockArray; // Display. DisplayNumberString( alterna ); }
|
|
|
|
« Last Edit: September 25, 2011, 04:38:47 am by Testato »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16499
Don't know what I do
|
 |
« Reply #14 on: September 25, 2011, 05:05:38 am » |
Gli array non puoi copiarli assegnando un array ad un altro array (credo non esistano metodi). Devi copiare i suoi elementi nell'array contenitore.
|
|
|
|
|
Logged
|
|
|
|
|
|