Aiuto parte sketch

Ciao a tutti sto facendo uno sketch con arduino ma non so come fare in modo da premere un pulsante e far lampeggiare un led all'infinito con un intervallo di 1 sec finché non premo un altra volta il pulsante e il led comincia a lampeggiare con un intervallo di 2 secondi.Vi chiedo di aiutarmi in qualche modo facendomi come fare considerando che non sono un esperto.Grazie in anticipo.

Ti serve una variabile che memorizzi lo stato del tuo programma. In quella variabile ci metti la condizione "lampeggio sì" o "lampeggio no". Può essere di tipo bool (false/true) oppure di tipo byte (0/1).

Lo sketch parte assegnando a tale variabile il valore di false o 0, a seconda del tipo scelto. Nel loop devi: - controllare lo stato del pulsante; - se è premuto, invertire lo stato della variabile di stato: da 0 a 1 o da 1 a 0; - poi controlli lo stato della... variabile di stato. - se è true/1, vai alla routine di lampeggio, basata su millis

Per la routine basata su millis, puoi esaminare lo sketch BlinkWithoutDelay presente nell'IDE Per eseguire più di un compito basato su millis, c'è anche questo mio articolo

Puoi scrivere l'ultimo punto cioè "se è true/1, vai alla routine di lampeggio, basata su millis" perché non ho capito molto bene come usare la funzione millis anche se ho lletto varie spiegazioni

puoi prendere un "aiuto" da qui

interval_2 vale 500 millisecondi o quello che desideri

   unsigned long currentMillis_2 = millis();
  if(currentMillis_2 - previousMillis_2 > interval_2) {
 previousMillis_2 = currentMillis_2;   
 if (lampeggio == LOW)
      lampeggio = HIGH;
    else
      lampeggio = LOW;

    }

interval_3 vale 1000 millisecondi o quello che desideri

       unsigned long currentMillis_3 = millis();
  if(currentMillis_3 - previousMillis_3 > interval_3) {
 previousMillis_3 = currentMillis_2;   
 if (acquisizione == LOW)
      acquisizione = HIGH;
    else
      acquisizione = LOW;

    }

acquisizione e lampeggio si trovano in uno stato alto o basso al ritmo dei millisecondi che metti

nel setup va messo

   pinMode (7, INPUT);  //pulsante che premuto mette a massa il pin 7
     digitalWrite (7,HIGH); //pullup

poi questo fa il modo che conta_impulsi_pulsante incrementa di 1 al rilascio del pulsante

    if (digitalRead (7)== LOW) puls_encoder=1;
  
 if (puls_encoder ==1)
 conta_impulsi_pulsante = conta_impulsi_pulsante + 1,
 puls_encoder=0;


if (conta_impulsi_pulsante >2)  conta_impulsi_pulsante = 0; //riporta a zero  conta_impulsi_pulsante

non rimane che sceglière il pin del led es: il 9

e

if (conta_impulsi_pulsante ==1 && interval_2== LOW)  digitalWrite (9,LOW);

if (conta_impulsi_pulsante ==1 && interval_2== HIGH)  digitalWrite (9,HIGH);

if (conta_impulsi_pulsante ==2 && interval_3== LOW)  digitalWrite (9,LOW);

if (conta_impulsi_pulsante ==2 && interval_3== HIGH)  digitalWrite (9,HIGH);

EDIT BY MOD: inseriti tag per codice

Ma la risposta fornita QUI da uwe non era già abbastanza soddisfacente? Il post crossing sarebbe vietato da regolamento ...

Potete usare i tag code? Così da rendere più fruibile la discussione. Grazie.

Grazie

Francesco00: Grazie

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare. Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.