Go Down

Topic: ciclo while con due pulsanti (Read 772 times) previous topic - next topic

AndreaFra

problema: ho due pulsanti, fintanto che premo (e tengo premuto) il pulsante 1 l'oggetto fa una cosa, se premo (e tengo premuto) il pulsante 2 l'oggetto ne fa un'altra, se non premo alcun pulsante l'oggetto non fa nulla...

con un solo pulsante è sufficiente un semplice ciclo while:
Code: [Select]

while(digitalRead(pulsante1) == HIGH){
    fai qualcosa;
}

come strutturo invece il codice per il problema sopra descritto, bastano due while in serie (purtroppo fino a sabato non ho arduino sotto mano per verificare)? e come evito problemi nel caso premessi entrambi in pulsanti?

Grazie a chiunque volesse aiutarmi...

gingardu

hai dato troppo poche "notizie2 su quello che vuoi fare,  e se al rilascio del pulsante tutto deve tornare allo stato precedente,

es: se fai 
while (digitalRead (1)== HIGH )  digitalWrite (13,HIGH);

in caso che premi il pulsante si accende il led (sull'arduino) ma poi rimane sempre acceso  se non scrivi qualcosa che al rilascio di un pulsante lo fa spegere.
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

AndreaFra

uhmm... quel "fai qualcosa" è riferito ad uno stepper, se premo il pulsante A ruota in senso orario, se premo il pulsante B in senso antiorario, se non premo alcun pulsante (o rilascio quello che sto premendo) si ferma e se ne sta fermo...

gingardu

(per pilotare uno stepper non  basta solo l'arduino ma ci va una scheda aggiuntiva  sperando che non ci confondiamo con un servo)

di solito  qualsiasi schedina che pilota uno stepper  ha minimo due ingressi di comando  STEP e DIR

sullo STEP ci va un impulso che fa girare lo stepper di un poco  (di solito gli stepper con 200 impulsi fanno una rotazione completa)

DIR se viene messo a massa fa girare in un senso se viene messo al piu fa girare nell'altro senso

capisce che se ad ogni premuta di pulsante il motore si muove quasi nulla


una cosa che potresti fare (mi e venuta a mente al volo) è modificare il programmino


Blink without Delay  facendolo lampeggiare velocemente  (e da quio ricavi in treno di impulsi

con 2 if dovrebbe funzionare senza scomodare librerie
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

AndreaFra

lo stepper si muove senza problemi (ho uno shield) avanti ed indietro... vorrei però controllarne i movimenti tramite pulsanti

uwefed

#5
Oct 29, 2012, 05:02 pm Last Edit: Oct 29, 2012, 09:25 pm by uwefed Reason: 1
Basta fare 2 while con ciascuna uno dei 2 pulsanti.

La cosa che non hai considerato é cosa deve fare lo sketch se premi entrambi i pulsanti? Entrambi in questo caso vuol dire anche con mezzo secondo di distanza.

Ciao Uwe

AndreaFra

ok, quindi dici che due while in serie vanno bene...
il discorso dei pulsanti premuti contemporaneamente è più per mania di controllo che non per reali esigenze... immagino che appunto prenda il sopravvento il pulsante premuto per primo, magari per pochi decimi di secondo...

Go Up