Go Down

Topic: "congelare" il micro nel setup con pulsante premuto (Read 1 time) previous topic - next topic

elrospo

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

gpb01

Dove è la difficoltà? :o

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

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

elrospo

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) ;

SukkoPera

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

Code: [Select]
pinMode (7, INPUT);
while (!digitalRead (7))
  ;


Cosa non ti è chiaro?
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

gpb01

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 ...  :smiley-evil:

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

elrospo

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

Code: [Select]
pinMode (7, INPUT);
while (!digitalRead (7))
  ;


Cosa non ti è chiaro?
quindi ! :o   "scrivendo" nulla nelle graffe il micro si blocca ?  :smiley-confuse:   
(tenedo a mente che siamo nel setup)
 while (digitalRead (7) == LOW)   //  pulsante premuto
{ };  //nulla nelle graffe

SukkoPera

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.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

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"
oggi pomeriggio provo
tanks...     8)

SukkoPera

setup() è una funzione come un'altra, né più, né meno.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

gpb01

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 :

Code: [Select]
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:

Code: [Select]
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 :)

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

elrospo

ok   funziona  benissimo  grazie a tutti per la collaborazione,    :smiley-cool:

 

Datman

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.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Go Up