Go Down

Topic: Mi serve una mano  (Read 219 times) previous topic - next topic

vova98

No, NON ci capiamo ... tocca che rifai il flowchart e invece di PULSANTE premuto o non premuto, metti il NOME del pulsante coinvolto perché così non è chiaro !

Guglielmo
Purtroppo è un esercizio che mi sono messo a fare, non ho fatto io il flow chart, comunque amdando dall'alto verso il basso:

-NO, IL PULSANTE NON è STATO PREMUTO (si intende il primo)
-SI, IL PULSANTE è STATO PREMUTO (si intende il primo)
-SI, IL PULSANTE è STATO PREMUTO (si intende il secondo)
-NO, IL PULSANTE NON è STATO PREMUTO (si intende il secondo)

gpb01

#16
Feb 02, 2016, 10:34 pm Last Edit: Feb 02, 2016, 10:34 pm by gpb01
Quindi il diagramma dovrebbe essere così ?



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

gpb01

#17
Feb 02, 2016, 10:35 pm Last Edit: Feb 02, 2016, 10:36 pm by gpb01
... ma il LED non si spegne mai ?  Perché se lampeggia con pulsante_2 lo accendi fisso e con pulsante_1 lo rifai lampeggiare ... e spegnere ?

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

vova98

Esattamente, comunque no, non si spegne

gpb01

Ok, quindi hai da gestire semplicemente DUE "stati" di una "macchina a stati finiti" ... e la pressione dei pulsanti, in funzione dello "stato" in cui si trova il sistema, commuta di "stato".

Hai già letto quest'esempio di "macchina a stati finiti" con Arduino ? ;)

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

vova98

Ora l'ho letto ma purtroppo più della metà dei codici non li capisco.
Io ho provato a fare questo esercizio ma così premendo i pulsanti non avviene ciò che voglio

Code: [Select]
void loop (){
 
  if (digitalRead(START)==LOW);
{
      while (digitalRead(STOP)== HIGH);{
digitalWrite (USCITA, HIGH);
delay(1000);
digitalWrite (USCITA, LOW);
delay(1000);
}
}
  if (digitalRead(STOP)==LOW);
  {
       (digitalWrite(USCITA, HIGH));
      }
}

Etemenanki

A parte tutto il resto ... se il lampeggio lo fai con i delay, il programma non funzionera' mai, perche' in quel secondo di acceso e di spento dati dai due "delay(1000)", tutto il programma e' fermo ad aspettare facendo assolutamente nulla (il delay BLOCCA l'intero sketch pr tutto il tempo in cui e' attivo, quindi ne legge pulsanti ne attiva uscite ne fa alcuna altra cosa, sta solo li fermo ad aspettare che il tempo sia passato)

Quindi prima di tutto fai un ciclo a parte (una funzione ad esempio), che richiami nel loop solo quando un flag (una qualsiasi variabile byte che usi per controllare lo stato, puoi dargli il nome che preferisci) e' HIGH , mentre invece se e' LOW fai accendere il led fisso (o viceversa, come preferisci) ... poi potrai fare il resto ... in questo modo il programma continuera' a funzionare e leggere gli ingressi anche mentre il led lampeggia ... ;)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy