"congelare" il micro nel setup con pulsante premuto

non mi viene facile trovare un sistema per per fermare il il micro nel setup finché ho un pulsante premuto :frowning:

Dove è la difficoltà? :o

Nel setup() usa una while e rimanici dentro fino a quando il tasto è premuto :slight_smile:

Guglielmo

ma che istruzione si mette al posto del … resta nel setup…

ho provato con queste righe ripetute molte volte

ma non sembrano un gran che a vederle

if (digitalRead (7) == LOW)
conta_impulsi_pulsante = 0,
delay (600) ;
if (digitalRead (7) == LOW)
conta_impulsi_pulsante = 0,
delay (600) ;

Supponendo che il tuo pulsante legga HIGH quando premuto (e che quindi ci sia una resistenza tra il pin in questione e massa):

pinMode (7, INPUT);
while (!digitalRead (7))
  ;

Cosa non ti è chiaro?

elrospo:
ma che istruzione si mette al posto del ..... resta nel setup.......

... ma l'hai almeno letta la mia risposta ? ? ? :o :o :o

E ti sei preso la briga di andare a vedere come funziona l'istruzione "while" che ti avevo indicato ? ? ?... perché non la vedo nel tuo codice ... :smiling_imp:

Guglielmo

SukkoPera:
Supponendo che il tuo pulsante legga HIGH quando premuto (e che quindi ci sia una resistenza tra il pin in questione e massa):

pinMode (7, INPUT);

while (!digitalRead (7))
  ;




Cosa non ti è chiaro?

quindi ! :o "scrivendo" nulla nelle graffe il micro si blocca ? :confused:
(tenedo a mente che siamo nel setup)
while (digitalRead (7) == LOW) // pulsante premuto
{ }; //nulla nelle graffe

Non è che si blocca, semplicemente esegue quel che c'è nel corpo del while, se non ci metti niente non esegue niente, ma continua a ciclare comunque finché la condizione non è più vera.

Io le graffe manco le ho messe, visto che ho usato un puntoevirgola come istruzione che non fa niente. Se vuoi metterle allora il puntoevirgola non è più necessario, ma la sostanza non cambia.

ok non ero sicuro che nel setup si potesse mettere una cosa del genere, visto che nel setup viene eseguito tutto "una sola volta"
oggi pomeriggio provo
tanks... 8)

setup() è una funzione come un’altra, né più, né meno.

elrospo:
ok non ero sicuro che nel setup si potesse mettere una cosa del genere, visto che nel setup viene eseguito tutto “una sola volta”

Forse non ti è chiara la struttura di un programma in ‘C’ e cosa Arduino IDE ti nasconde …
… in un programma ‘C’ c’è sempre la funzione main() che, nel caso di Arduino è una :

int main(void) { .... }

… essa ti viene nascosta dall’IDE, ma c’è. Al suo interno vengono chiamate alcune funzioni … che sono quelle che tu sei abituato a credere essere tutto il tuo programma, ma che in verità sono solo la parte che tu vedi. In realtà si ha:

int main(void)
{
  init();
  initVariant();
  #if defined(USBCON)
    USBDevice.attach();
  #endif

  setup();
   
  for (;;) {
    loop();
    if (serialEventRun) serialEventRun();
  }
       
  return 0;
}

Come puoi ben vedere, tralasciando altre funzioni che, come detto, tu neanche vedi e/o sai che vengono chiamate, l’unica differenza tra setup() e loop() è che la funzione loop() è racchiusa all’interno di un ciclo “for” dal quale non si esce MAI e quindi … viene chiamata all’infinito.

Ecco, molto semplicemente, perché la setup() viene eseguita una volta e la loop() in continuazione :slight_smile:

Guglielmo

ok funziona benissimo grazie a tutti per la collaborazione, :sunglasses:

nel while() {} puoi anche inserire un confronto fra millis() e il tempo che hai memorizzato precedentemente in una variabile. In questo modo puoi rilevare una pressione prolungata e saltare altrove.