spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Arduino

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 07-05-2013, 15.27.14
tanotrane tanotrane non è collegato
Robottaro senior
 
Data registrazione: 17-04-2013
Residenza: Ostia
Età : 29
Messaggi: 33
Potenza reputazione: 30
tanotrane E' per ora ancora un mistero
Post sostituire serie di "if" con un codice più "ordinato"

salve a tutti
il mio nuovo problema è cercare di rendere un codice che presenta svariati "if" più ordinato e possibilmente più snello...

lo stralcio di codice in questione è questo:

if(r>0 && r<=10) digitalWrite(buzzer, HIGH);

if(r>10 && r<=20){
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);}

if(r>20 && r<=50){
digitalWrite(buzzer, HIGH);
delay(400);
digitalWrite(buzzer, LOW);
delay(200);}

if(r>50 && r<=122){
digitalWrite(buzzer, HIGH);
delay(800);
digitalWrite(buzzer, LOW);
delay(200);}

if(r>122){
digitalWrite(buzzer, LOW);
delay(200);}

per capire meglio...arduino deve far "lampeggiare" un buzzer a seconda dei valori assunti da r, compresi tra 1 e 122.
Più piccolo è il valore della variabile (double) e più frequente è il cicalio.

Ho provato a usare uno switch/case (quindi dichiarare la r come int poiché lo switch non permette di lavorare con i double) ma non sono riuscito a immettere una condizione ad ogni case. cioè inserendo singoli valori di r (ovviamente) funziona, ma non inserendo ad esempio "case r>0 && r<=10".

qualcuno può spiegarmi se è possibile stilare un codice equivalente o comunque illuminarmi su come risolvere il mio problema?!

Grazie anticipatamente
tanotrane

Ultima modifica di tanotrane : 07-05-2013 alle ore 15.29.47
Rispondi citando
  #2  
Vecchio 07-05-2013, 16.04.25
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 333
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Else if?

Ciao

Antonio
Rispondi citando
  #3  
Vecchio 07-05-2013, 16.15.44
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Monselice (PD)
Età : 58
Messaggi: 5,458
Potenza reputazione: 423
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

Nel tuo caso specifico il lampeggio è legato al valore della variabile, non ti sarà difficile farne una relazione tipo:
varbuzz=r*k
digitalWrite(buzzer, HIGH);
delay(varbuzz);
digitalWrite(buzzer, LOW);
delay(varbuzz);}
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #4  
Vecchio 07-05-2013, 16.34.45
L'avatar di matty
matty matty non è collegato
Robottaro sostenitore
 
Data registrazione: 15-05-2004
Residenza: Verona Treviso, Italy
Messaggi: 822
Potenza reputazione: 105
matty La sua reputazione è oltre la sua famamatty La sua reputazione è oltre la sua fama
Predefinito

Usare lo "switch"?
Una roba tipo...

switch(r){
case (r>0 && r<=10):
digitalWrite(buzzer, HIGH);
delay(50);
digitalWrite(buzzer, LOW);
delay(50);
break;
....
}

Se non funziona, prova la funzione map per avere dei valori discreti da inserire nello "switch"
__________________
Robot Golem project: www.robot-golem.org

Ultima modifica di matty : 07-05-2013 alle ore 16.46.25 Motivo: Funzione map
Rispondi citando
  #5  
Vecchio 07-05-2013, 16.49.19
L'avatar di matty
matty matty non è collegato
Robottaro sostenitore
 
Data registrazione: 15-05-2004
Residenza: Verona Treviso, Italy
Messaggi: 822
Potenza reputazione: 105
matty La sua reputazione è oltre la sua famamatty La sua reputazione è oltre la sua fama
Predefinito

Magari questo tutorial ti è d'aiuto: http://opensourcehardwarejunkies.com...lute-beginners
__________________
Robot Golem project: www.robot-golem.org
Rispondi citando
  #6  
Vecchio 07-05-2013, 17.29.02
tanotrane tanotrane non è collegato
Robottaro senior
 
Data registrazione: 17-04-2013
Residenza: Ostia
Età : 29
Messaggi: 33
Potenza reputazione: 30
tanotrane E' per ora ancora un mistero
Predefinito

grz per le risp ma....
- l' else if non risolverebbe il mio problema;
- matty quello che ho cercato di fare era paro paro a quello che hai scritto tu...ma mi dava errore alla compilazione...non mi fa mettere delle condizioni dopo case;
- marnic ho la sensazione che potrebbe farmi comodo quello che dici ...ma non riesco a capire che valore ha "k". (anche perchè dare al delay il valore della variabile mi risolverebbe il problema di fare le prove dei tempi! );
Rispondi citando
  #7  
Vecchio 07-05-2013, 17.34.08
tanotrane tanotrane non è collegato
Robottaro senior
 
Data registrazione: 17-04-2013
Residenza: Ostia
Età : 29
Messaggi: 33
Potenza reputazione: 30
tanotrane E' per ora ancora un mistero
Predefinito

no aspettate forse mi è ripartito il cervello....serve per incrementare la r?! cioè renderla più grande = valori compatibili con il delay?!
Rispondi citando
  #8  
Vecchio 07-05-2013, 22.21.11
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Monselice (PD)
Età : 58
Messaggi: 5,458
Potenza reputazione: 423
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

dal tuo listato vedo che il delay aumenta all'aumentare di r (per scelta tua non per quanto scritto nel listato)
provalo...
varbuzz=r*5
digitalWrite(buzzer, HIGH);
delay(varbuzz);
digitalWrite(buzzer, LOW);
delay(200);}

e vedi cosa succede
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #9  
Vecchio 07-05-2013, 22.31.14
tanotrane tanotrane non è collegato
Robottaro senior
 
Data registrazione: 17-04-2013
Residenza: Ostia
Età : 29
Messaggi: 33
Potenza reputazione: 30
tanotrane E' per ora ancora un mistero
Predefinito

si esatto! perchè in sostanza r è il valore in centimetri che restituisce un sensore...più vicino è l ostacolo più la frequenza deve essere alta.

L ultimo delay che hai settato a 200 in realtà posso renderlo uguale a varbuzz così da avere suono e pausa della stessa durata.....

anche se pensandoci così facendo quando l ostacolo è distante il loop impiegherà (relativamente) più tempo a ripartire.

comunque ancora grazie domani proverò il codice e vi farò sapere!
Rispondi citando
  #10  
Vecchio 08-05-2013, 12.40.30
tanotrane tanotrane non è collegato
Robottaro senior
 
Data registrazione: 17-04-2013
Residenza: Ostia
Età : 29
Messaggi: 33
Potenza reputazione: 30
tanotrane E' per ora ancora un mistero
Predefinito

grande marnic
è perfetto grazie per l'aiuto! purtroppo io ancora tendo a usare una programmazione lontana dal linguaggio macchina, vorrei programmare come parlo! (male )

permettetemi di fare un'altra domanda qua senza aprire un nuovo thread visto che si parla dello stesso progetto

tutto questo ambaradan lo devo far girare quando ho un segnale alto proveniente da un pin digitale...questa porta la devo collegare però a un circuito a 12v (alla lampadina della retromarcia dell'auto). usando un LM7805 riuscirei a non avere problemi di alcun tipo?!

P.S. l'integrato che ho intenzione di prendere è questo: http://www.ebay.it/itm/230771344706?...#ht_1341wt_967

ancora grazie
tanotrane
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Nuovo progetto robot "espandibile" (cerco collaboratori eventualmente) salva214 Progettazione 34 07-06-2009 12.00.15
Quali sono le "cose" necessarie per fare un "Laboratorio di Robotica Amatoriale"? AngPri75robotica Forum generale 3 25-10-2007 13.20.35
Quali sono le "cose" necessarie per fare un "Laboratorio di Robotica Amatoriale"? AngPri75robotica Elettronica 2 22-10-2007 21.55.56
Quali sono le "cose" necessarie per fare un "Laboratorio di Robotica Amatoriale"? AngPri75robotica Forum generale 0 22-10-2007 20.43.34
Nuova Funzione "Ricerca" e "Reputazione" R2D2 Suggerimenti 1 26-11-2005 12.29.33


Tutti gli orari sono GMT. Adesso sono le: 17.50.39.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB