aiuto per sequenza su funzione

Ciao a tutti, vi chiedo un aiutino ……
Immaginate di avere una funzione Suonosirena () che dovrebbe passare high una porta per 4 minuti, metterla in LOW per 2 minuti, il tutto ripetuto 4 volte.
Ovviamente se una variabile passa da 0 a 1 la sequenza si blocca.
Dovrei utilizzare la funzione millis ma sinceramente dopo giorni di prova non sono riuscito ancora a scrivere una qualcosa che mi funzioni…….
Se qualcuno mi può dare una aiutino……..
grazie

Prova a vedere se funziona:

#define pinSirena xxx

unsigned long lastChangeState;
bool state;
short contatore;
/*
Nella variabile contatore memorizzo quanti cicli ON-OFF
ho già eseguito. Se invece c'è scritto -1 vuol dire che
è il primo ciclo.
Dopo che contatore è diventato 5 la funzione non funziona
più e per far ripartire il processo devi riportare contatore a -1.
*/

/*
La funzione torna true quando è stata completata la sequenza
*/
bool suonoSirena() {
  if (contatore == -1) {
    contatore = 0;
    lastChangeState = millis();
    state = true;
    return false;
  }
  else if (contatore <= 4) {
    if (state == false) {
      if (millis() - lastChangeState >= (2*60*1000)) {
        lastChangeState = millis();
        state = true;
        digitalWrite(pinSirena,HIGH);
      }
    }
    else {
      if (millis() - lastChangeState >= (4*60*1000)) {
        lastChangeState = millis();
        state = false;
        digitalWrite(pinSirena,LOW);
        contatore++;
      }
    }
    return false;
  }
  else {
    return true;
  }
}

void setup() {
  contatore = -1;
}

bool sirenaAttivata;

void loop() {
  //La tua condizione per attivare la sirena
  if (.......) {
    sirenaAttivata = true;
  }
  
  //Se devo attivare la sirena
  if (sirenaAttivata == true) {
    if (suonoSirena() == true) {
      sirenaAttivata = false;
    }
  }
  //Se non devo disattivare la sirena resetto la variabile contatore
  //e giusto per sicurezza disattivo il pin della sirena
  else {
    contatore = -1;
    digitalWrite(pinSirena,LOW);
  }
}

bhe ci metto 3 settimana per capire bene il codice !!! :stuck_out_tongue:
grazie

una prima domanda …..
in pratica mi sembra di vedere che una funzione nello specifico bool suonosirena () possa essere trou o false ??? e poi nel loop posso mettere condizioni a questo stato?????
ovviamente bool prima al nome funzione indica due possibilità, vero e falso…. giusto?

No, non funziona così :wink:

ema_72:
in pratica mi sembra di vedere che una funzione nello specifico bool suonosirena () possa essere trou o false ???

Quelli sono i valori che la funzione restituisce, non che assume. Una variabile può assumere dei valori, una funzione no.

e poi nel loop posso mettere condizioni a questo stato?????

Con il risultato di una funzione puoi farci ciò che vuoi.
Immagina che hai una funzione sum() che fa la somma di 2 parametri. Ovviamente il valore restituito, la somma, dovrai utilizzarla per qualcosa, altrimenti è inutile chiamare la funzione :stuck_out_tongue:

ovviamente bool prima al nome funzione indica due possibilità, vero e falso…. giusto?

No, indica il tipo di valore restituito dalla funzione.

Qui però sono basi del linguaggio C/C++, se ti mancano devi studiartele sennò è un problema anche a capire gli sketch. :wink:

ti consiglio di studiarti il corso C su html.it come sto facendo io. Così capisci le basi, poi se hai bisogno di aiuto ho visto che su questo forum sono molto disponibili.

un paio di mesi fa no sapevo nemmeno cosa fosse arduino (vedere i miei post per credere !!!! :wink: ) piano piano studiando qua e la e approfondendo gli spunti che ho anche in questo forum ho scritto parte del codice che volevo, ora mi interessava proprio questa parte e in pratica studiandomi il codice che gentilmente mi hanno passato progredirò ancora…… se per capirlo faccio qualche domanda mi sembra lecito….. :stuck_out_tongue:

Le domande sono lecite, ma PRIMA di iniziare devi studiare bene il linguaggio, altrimenti non puoi capire neanche il codice degli sketch di esempio allegati all'IDE, e se acquisisci fondamentali sbagliati, poi fai errori su errori. Tutto qui, nessuno "nasce imparato" è ovvio. Buono studio :wink:

va bhe va bhe… mi avete cicchettato !!! ora basta ! :slight_smile: :slight_smile: (scherzo).