Aiuto con Randomdelay

Salve a tutti!
Avrei bisogno di un aiuto con questo sketch per arduino UNO se possibile, vorrei che quando si preme il pulsante il led si spegnesse per um intervallo di tempo randomizzato tipo entro 10 e 30 secondi per poi tornare alla routine......grazie....

const byte ledPin = 13 ;

const byte interruptPin = 2 ;

volatile byte state = LOW ;

void setup ( ) {

   pinMode ( ledPin , OUTPUT ) ;

   pinMode ( interruptPin , INPUT_PULLUP) ;

   attachInterrupt ( digitalPinToInterrupt ( interruptPin ), glow, CHANGE ) ;

} 

void loop ( ) {

   digitalWrite ( ledPin, state ) ;.

}

void glow ( ) 

{

   state = !state ;

}

Buonasera e benvenuto, :slight_smile:

essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del regolamento di detta sezione (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO … Grazie. :slight_smile:

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di farla al più presto.

@fenix1968 In conformità al REGOLAMENTO, fosse anche per una sola riga, il codice va racchiuso negli appositi tag ... :roll_eyes:

... cortesemente, quindi, edita il tuo post più sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice.

Inoltre, così com'è, non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Grazie. :slight_smile:

Grazie per la risposta, scusate l'inesperienza, cercherò di fare più attenzione.....un saluto

Chiarisci meglio, quando c'è il cambio di stato il programma deve restare fermo per un tempo casuale e NON fare nient'altro oppure deve continuare a controllare il pulsante e eventualmente fare altre operazioni?
Nel primo caso ti basta una variabile che contenga il vecchio stato del led, se è cambiato allora con l'istruzione delay() ti fermi per il tempo desiderato (per iniziare parti con un valore fisso di 10000ms tanto per verificare se funziona bene). Quando questo è stato fatto potrai passare al calcolo di un tempo casuale e modificare il programma in modo semplice.
Se invece sei nel caso due allora la cosa si complica ma prima di partire con ipotesi fantasiose aspetto una tua risposta che descriva bene il funzionamento desiderato del sistema

Non ti ho capito bene, ma penso che il seguente codice faccia quello che vuoi.

const byte ledPin = 13 ;
const byte interruptPin = 2 ;
volatile byte state, sta;

void setup ( ) {
  pinMode ( ledPin , OUTPUT ) ;
  pinMode ( interruptPin , INPUT_PULLUP) ;
  attachInterrupt ( digitalPinToInterrupt ( interruptPin ), glow, CHANGE ) ;
}

void loop ( ) {
  digitalWrite ( ledPin, state ) ;
  if (sta == 1) {
    sta = 0;
    del = random (10, 31);
    digitalWrite ( ledPin, LOW ) ;
    delay (del):
    }
  }

  void glow ( ) {
  state = !state ;
  sta =1;
}

Saluti.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.