Tutorial Arduino ITA 3: utilizzare il pulsante come interruttore e la tecnica del debouncing

Поділитися
Вставка
  • Опубліковано 10 гру 2024

КОМЕНТАРІ • 105

  • @sergeschonenberg6345
    @sergeschonenberg6345 6 років тому

    Spiegazione perfetta ! Non dimentichi niente. Riascoltandolo diverse volte quel che mi sembrava troppo complesso per le mie facoltà è risultato chiarissimo ! Grazie 🌟

    • @TechMaker
      @TechMaker  6 років тому

      Ci fa piacere che il video ti sia stato utile.

  • @emi74m
    @emi74m Рік тому

    Complimenti al tuo canale e alle chiare spiegazioni

  • @tonygun77
    @tonygun77 3 роки тому

    Finalmente un pochino di entusiasmo!

    • @TechMaker
      @TechMaker  3 роки тому +1

      Nei video più recenti stiamo cercando di migliorare la parte audio.

  • @efrembonazzi8777
    @efrembonazzi8777 Рік тому

    ottimo video chiaro e comprensibile... ti seguo da poco e le tue spiegazioni mi piacciono molto, sto provando 2 schede pcf8574 collegete a I2C una per ingressi e una per uscite. mi piacerebbe poter utilizzare i pulsanti come interruttori e i led come il tuo video ma con le 2 schede. se fosse possibile un tuo video su questo argomento sarebbe gradito... grazie e complimenti ancora per il canale.

    • @TechMaker
      @TechMaker  Рік тому +1

      Al momento non abbiamo un video al riguardo, ma ti può essere di aiuto l'articolo www.mischianti.org/2019/01/02/pcf8574-i2c-digital-i-o-expander-fast-easy-usage/

    • @efrembonazzi8777
      @efrembonazzi8777 Рік тому

      Grazie sicuramente mi può aiutare, me lo guarderò x bene.👍

  • @RaffyF
    @RaffyF 4 роки тому +1

    Ciao grazie per i tuoi video, volevo farti una domanda riguardo questo sketch, in pratica ho capito che la riga 18 è fondamentale affinché funzioni tutto alla perfezione, ma non mi è molto chiara, a cosa serve di preciso e cosa accade se non la mettiamo?... potrei avere dei ulteriori delucidazioni? ne sarei grato.

    • @TechMaker
      @TechMaker  4 роки тому

      Ti riferisci al primo o secondo sketch mostrato nel video?

    • @RaffyF
      @RaffyF 4 роки тому

      @@TechMaker al primo

    • @TechMaker
      @TechMaker  4 роки тому +1

      La riga 18 ( pulsanteStato = lettura; ) aggiorna la variabile "pulsanteStato". Nella riga 14 viene effettuato un confronto (... lettura != pulsanteStato ...) che verifica che lo stato attuale ( la variabile lettura ) è cambiato rispetto alla precedente esecuzione della funzione "loop". Senza la riga 18 la variabile "pulsanteStato" avrebbe sempre il valore iniziale (ovvero LOW impostato nella riga 4).

    • @RaffyF
      @RaffyF 4 роки тому

      @@TechMaker gentilissimo grazie!

  • @markcannels5672
    @markcannels5672 2 роки тому

    Buongiorno, complimenti per il video. Da principiante sono riuscito a seguire bene la prima parte del video mentre mi sono un po' perso sul discorso debounce. Non è possibile stampare a video nel monitor seriale lo stato delle variabili nel tempo ed eventualmente avere la possibilità di fare una stampa per avere la possibilità di analizzare i dati con più calma?

    • @TechMaker
      @TechMaker  2 роки тому

      Sulle schede più recenti, basate su SAMD (come per esempio MKR WiFi 1010 o Nano 33 IoT) puoi attivare il debugger per analizzare lo svolgimento dello sketch. Se usi invece le schede come Uno, Mega, ecc, l'unico modo è inserire manualmente le istruzioni Serial.println nello sketch, per visualizzare il valore della variabile quando viene eseguito quel pezzo di codice.

  • @mariaangelavitali8143
    @mariaangelavitali8143 4 роки тому

    Ciao e grazie dei video. Volevo fare una domanda: come è possibile che caricando il programma in modo identico del video 3(ho controllato e ricontrollato) e dopo aver collegato Led e pulsante come mostri nel video, il risultato non sia quello sperato? Cioè facendo una leggera pressione o sul jump collegato al pulsante o sul jump collegato al Led il Led si accenda e si spenga in modo casuale.

    • @TechMaker
      @TechMaker  4 роки тому

      Prova a diminuire il resistore collegato con il pulsante. Vanno bene i valori da 10kohm a 100kohm.

    • @mariaangelavitali8143
      @mariaangelavitali8143 4 роки тому

      @@TechMaker
      Grazie

  • @agostinorusso376
    @agostinorusso376 7 років тому +1

    ciao ma il rimbalzi sotto quale forma li rilevi? cioè come ti rendo conto che uno sckech soffre si rimbalzi?
    grazie

    • @TechMaker
      @TechMaker  7 років тому

      Ciao, i rimbalzi del pulsante possono essere misurati con un oscilloscopio, però in ogni caso non è tanto la questione che uno sketch soffre di rimbalzi, perché con un pulsante perfetto (che cambia stato istantamente senza oscillare) nello sketch non ci sarebbe bisogno di affrontare il problema. Purtroppo, in realtà, è molto difficile che un pulsante non oscilli minimamente quando viene premuto o rilasciato. Se provi il primo esempio del video, togliendo "delay(10)", molto probabilmente ti accorgi che a volte il led non cambia stato dopo aver premuto il pulsante.

  • @alessioromano3231
    @alessioromano3231 2 роки тому

    Salve, e complimenti per i video molto chiari e utili. Avrei una domanda. Da poco mi sto cimentando nel mondo di arduino e gia' sono riuscito a fare qualche semplice progettino. Come posso utilizzare arduino con lo sketch utilizzato nel viedeo ma con 10 pulsanti? grazie mille per la disponibilita'.

    • @TechMaker
      @TechMaker  2 роки тому +1

      Occorre creare delle variabili per ogni pulsante.
      Nel video www.italiantechproject.it/arduino/luci-di-natale-e-canzoni-natalizie-con-arduino trovi un esempio di come usare più di un pulsante nello stesso sketch.

  • @cavagnettomaurizio8746
    @cavagnettomaurizio8746 Рік тому

    Grazie per il tuo video, io dovrei usare, al posto del pulsante, un contatto pulito di un relè, quindi come se al posto del pulsante ci sia un interruttore con due poli (contato aperto / contatto chiuso), mi potresti indicare come devo cambiare il collegamento mettendo l'interruttore al posto del pulsante? Grazie per il tuo aiuto

    • @TechMaker
      @TechMaker  Рік тому

      Per usare un relè al posto del pulsante puoi collegare il contatto normalmente aperto a 5V, mentre il comune sia al pin di Arduino che a GND tramite un resistore.

  • @mariaangelavitali8143
    @mariaangelavitali8143 4 роки тому

    Vorrei fare una domanda non direttamente collegata al video di questa lezione. Quanti if si possono nidificare? Il problema nasce dal fatto che volendo utilizzare 3 Led per simulare l'uscita di un dado a 6 facce, volevo farlo nidificando il comando if. Grazie

    • @TechMaker
      @TechMaker  4 роки тому

      Non ci sono limiti di IF nidificati, quindi puoi metterli a cascata come preferisci.

  • @lucacorazzini6429
    @lucacorazzini6429 4 роки тому

    Ciao e grazie mille per questo ottimo tutorial! Volevo chiederti un aiuto. E' possibile modificare il codice in modo che, pigiando il pulsante, il LED inizi a lampeggiare (ossia, si accenda e si spenga con intervalli di un secondo) e, pigiandolo nuovamente, il LED si spenga? Grazie mille e un caro saluto!

    • @TechMaker
      @TechMaker  4 роки тому

      Si, puoi eseguire dei comportamenti diversi in base ad una variabile che cambia il valore alla pressione del pulsante.

    • @lucacorazzini6429
      @lucacorazzini6429 4 роки тому

      @@TechMaker , Grazie mille! Mi daresti qualche suggerimento su come fare. Il problema è che non so come modificare il loop per ottenere l'intermittenza senza sovrappormi all'ultimo comando di aggiornamento della variabile "lettura". Un caro saluto!

    • @TechMaker
      @TechMaker  4 роки тому

      Devi basarti sul tempo trascorso e non sui ritardi delay, per far lampeggiare il LED. Con un ritardo delay è impossibile eseguire altre azioni e di conseguenza rilevare la pressione del pulsante. Nel video con le luci di Natale ( www.italiantechproject.it/arduino/luci-di-natale-e-canzoni-natalizie-con-arduino ), puoi vedere un esempio di come integrare la lettura dei pulsanti con altre azioni eseguite all'interno dello stesso sketch.

  • @fabjpal
    @fabjpal 4 роки тому

    Salve, io le vorrei chiedere in quali casi il pinLed, all'avvio, può avere uno stato diverso da LOW (questa domanda in riferimento alla riga 9)

    • @TechMaker
      @TechMaker  4 роки тому

      In effetti la funzione digitalWrite nel setup può essere omessa.

  • @asciaibo
    @asciaibo 3 роки тому

    ciao! bel video, io riscontro un problema: molto spesso premendo il tasto il led non si spegne, a volte si a volte no. Mi pare di capire che tutto dipenda dalla velocità d'esecuzione e dal fatto che l'arduino potrebbe non captare il segnale...ma come si risolve? Ho provato anche ad utilizzare il debounce ma non cambia nulla... grazie mille, buonaserata

    • @TechMaker
      @TechMaker  3 роки тому

      Prova a diminuire il resistore collegato al pulsante oppure a variare il tempo di attesa del debounce.

  • @Lorenzo-hi4ot
    @Lorenzo-hi4ot Рік тому

    nella riga 14 in che modo la lettura può essere diversa la LOW (quindi HIGH) ma non uguale ad HIGH?

    • @TechMaker
      @TechMaker  Рік тому +1

      La variabile "pulsanteStato" non avrà sempre il valore LOW, ma ad ogni esecuzione del loop assumerà il valore letto nell'iterazione precedente. Il controllo serve a evitare che LED cambi lo stato continuamente per tutta la durata quando sul pin viene rilevato il valore HIGH.

  • @giuseppefesta9987
    @giuseppefesta9987 5 років тому

    ciao vorrei porvi un problema che mi assilla e che non riesco a risolvere allego il file per chiarezza il punto è che voglio conteggiare dei numeri su 4 matrici a led e una per volta conteggiare da 0 a 9 raggiunto il numero desiderato passare alla successiva matrice . il problema è che lavora sempre sulla prima matrice e non riesco a farla conteggiare alla successiva ho usato return pur non sapendo come funziona ma vedo che no ho risolto sono quasi certo che l'inghippo è nel loop però non so risolverlo mi aiutate? grazie per quanto vorrete dirmi e ancora complimenti per il vostro lavoro

    • @TechMaker
      @TechMaker  5 років тому

      Nel codice, il numero di matrice viene incrementato soltanto quando il pin 7 ritorna LOW, quindi per passare alla matrice successiva bisogna rilasciare il pulsante nell'esatto millisecondo quando finisce il delay dopo l'ultima cifra sulla matrice precedente, che è fisicamente impossibile. L'incremento dovrebbe avvenire dopo aver terminato il conteggio sulla matrice precedente.

  • @albertopadovan176
    @albertopadovan176 3 роки тому

    Ciao,come posso aggiungere altri pulsanti e led con questa tecnica.Grazie

    • @TechMaker
      @TechMaker  3 роки тому +1

      Per ogni pulsante o LED aggiuntivo serve dedicare un pin della scheda di Arduino e creare le relative variabili per gestirlo allo stesso modo di quelli già presenti.

  • @federicozaccheo1043
    @federicozaccheo1043 6 років тому

    Buonasera a tutti. Sono nuovo nell'ambiente di arduino. Non capisco come mai quando connetto Arduino al computer il LED lampeggia anziché rimanere spento e il pulsante non funziona. Mi potete dare una mano? Grazie mille

    • @TechMaker
      @TechMaker  6 років тому

      Ci non degli errori durante il caricamento dello sketch? I numeri dei pin nello sketch corrispondono a quelli usati nel circuito?

    • @federicozaccheo1043
      @federicozaccheo1043 6 років тому +1

      Avevo invertito il Senso del pulsante. Praticamente mi entra in loop , quindi il LED continuava a lampeggiare , e il pulsante, non avendo i collegamenti corretti , non funzionava .

  • @agostinorusso376
    @agostinorusso376 7 років тому

    ciao mi puoi spiegare if entrambi casi è vero ,sè clikko il pulsante la variabile lettura diventa HIGH diversa da pulsanteStato (LOW) ,if vero perché diversi,ma se rilasciato il pulsante lettura diventa LOW, pulsanteStato (LOW) ,in questo caso if non è più vero essendo che sono uguali e non diversi,perché dici entrambi casi veri? mi spieghi dove che sbaglio nel ragionamento?
    grazie mille

    • @TechMaker
      @TechMaker  7 років тому +1

      In entrambi i casi IF sarebbe vero, considerando che la variabile "pulsanteStato" non conterrà sempre il valore LOW, ma sarà aggiornata, alla fine dello sketch, con l'ultima lettura rilevata. Quindi in ogni ciclo del loop, conterrà il valore rilevato nel ciclo precedente.
      Il controllo con la lettura precedente è necessario per evitare che lo stato del LED cambi in continuazione mentre il pulsante è premuto.
      Quindi all'inizio "pulsanteStato" è uguale a LOW, di conseguenza finché il pulsante non è premuto, IF sarà falso, visto che "lettura" (LOW) è uguale a "pulsanteStato" (LOW). Se premiamo il pulsante, IF diventa vero, permettendo al LED di cambiare stato. Se, a questo punto, non venisse aggiornata la variabile "pulsanteStato", nel successivo ciclo del loop, la condizione sarebbe ancora vera e quindi il LED cambierebbe di nuovo lo stato, senza che il pulsante sia rilasciato e premuto di nuovo.
      L'aggiornamento della variabile "pulsanteStato" permette di evitare ciò, però allo stesso tempo fa si che IF diventi vero quando rilasciamo il pulsante, in quanto "lettura" (LOW) sarà diversa da "pulsanteStato" (HIGH).
      Per cui dobbiamo aggiungere "lettura" uguale a HIGH nella condizione, per assicurarci che il LED cambi stato solo quando premiamo il pulsante.
      Spero di essermi spiegato meglio, in quanto nel video ho dato per scontato che la variabile "pulsanteStato" dovesse essere aggiornata, ancora prima di averlo scritto.

    • @agostinorusso376
      @agostinorusso376 7 років тому +1

      Italian Tech Project grazie mille ora è più chiaro,che ora mi sto avvicinando alla programmazione,continua così.
      grazie mille

    • @agostinorusso376
      @agostinorusso376 7 років тому

      Italian Tech Project ciao sto ancora ragionando sullo sketch ma ancora ragionando non arrivo,sbaglio qualcosa ,ecco il mio ragionamento:
      avvio il programma senza schiacciare niente non succede niente 😆😆 , lettura LOW pulsanteStato LOW, schiaccio il pulsante e rilascio lettura assume valore HIGH diverso pulsanteStato ma lettura ==HIGH (situazione vera) viene eseguito il codice tra le graffe avviene il cambio di stato del led da LOW a HIGH ,poi pulsanteStato = lettura; cioè lettera e HIGH pulsanteStato assume HIGH,ora nel if mi ritrovo lettura HIGH pulsante HIGH,cliccando di nuovo il pulsante lettura diventa LOW pulsanteStato HIGH sono diversi ma lettura non è uguale ==HIGH quindi non succede niente,c'è qualcosa che nn va nel mio ragionamento ma cosa?
      mi blocco la.
      grazie scusa che lo devo capire prima di andare avanti

    • @agostinorusso376
      @agostinorusso376 7 років тому

      Italian Tech Project Ciao facendo un ragionamento più lento lo possiamo sintetizzare in questo modo:
      Supponiamo di mettere il dito sul pulsante senza alzare
      Variabile lettura diventa HIGH diversa da pulsanteStato ==HIGH condizioni vera avviene il cambio di stato del led nella variabile pulsanteStato =lettura cioè pulsanteStato HIGH loop torna da capo nel if lettura risulta HIGH pulsanteStato HIGH e non succede niente appena alziamo il dito da pulsante variabile lettura diventa LOW PulsanteStato HIGH sono diversi ma non uguale a lettura ==HIGH quindi non succede niente,loop continua ad seguire il codice pulsanteStato =lettura diventa pulsanteStato LOW e viene inserito nel if ,quindi ci troveremo nelle situazione del if lettura LOW pulsanteStato LOW al prossimo clikko sul pulsante si avrà il cambio di stato giusto come ragionamento?
      Grazie

    • @TechMaker
      @TechMaker  7 років тому

      Si, il ragionamento è giusto. Visto che loop viene eseguito con una frequenza molto elevata, anche schiacciando il pulsante molto velocemente, Arduino riesce comunque a percepire sia quando il pulsante viene premuto che quando viene rilasciato. Nel secondo caso, rilasciando il pulsante, la variabile "pulsanteStato" torna al valore LOW e di conseguenza la situazione ritorna al punto di partenza, permettendo così il cambio di stato del LED alla successiva pressione sul pulsante.

  • @michelemilitello9123
    @michelemilitello9123 6 років тому

    Ciao scusami ho fatto tutto solo che nel set che ho preso di arduino ho resistenze da 10k per cui ne ho messe 10 in serie per arrivare a 100k ma non funziona sapresti dirmi per caso quale puo essere il problema?grazie

    • @TechMaker
      @TechMaker  6 років тому

      Qual è il comportamento? Il LED non si accende quando viene premuto il pulsante oppure ogni tanto si accende anche senza aver premuto il pulsante?

    • @michelemilitello9123
      @michelemilitello9123 6 років тому

      @@TechMaker Niente ho risolto semplicemente il pulsante non era connesso all'alimentazione a quanto pare l'alimentazione della mia breadboard funziona a metà e metà quindi se do alimentazione a sinistra mi alimenta solo la metà di sinistra e viceversa Quella di destra Grazie mille 😁

  • @massimolivi6232
    @massimolivi6232 4 роки тому

    Non capisco perché ma mi da sempre errore alla riga 15 eppure ho ricontrollato tutto passo per passo, può essere colpa dell'ultima versione software?

    • @massimolivi6232
      @massimolivi6232 4 роки тому +1

      Chiedo scusa, sbagliavo a scrivere ledStato, tutto ok

    • @TechMaker
      @TechMaker  4 роки тому +1

      L'importante che adesso funzioni :)

    • @massimolivi6232
      @massimolivi6232 4 роки тому

      Tutto ok @@TechMaker

  • @cristiandinicola5882
    @cristiandinicola5882 6 років тому

    Avevo fatto questo progetto tempo fa e ora sto cercando di perfezionarlo... sono abbastanza nuovo con Arduino. Comunque quando provo a caricare un progetto sul mio Arduino Uno (originale) mi da un'errore di caricamento:
    Arduino:1.8.5 (Windows 10), Scheda:"Arduino/Genuino Uno"
    Lo sketch usa 1354 byte (4%) dello spazio disponibile per i programmi. Il massimo è 32256 byte.
    Le variabili globali usano 15 byte (0%) di memoria dinamica, lasciando altri 2033 byte liberi per le variabili locali. Il massimo è 2048 byte.
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x8e
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x8e
    Problema di caricamento sulla scheda. Guarda www.arduino.cc/en/Guide/Troubleshooting#upload per suggerimenti
    Qualcuno può aiutarmi?

    • @TechMaker
      @TechMaker  6 років тому

      Controlla che la versione dell'IDE sia aggiornata, e prova anche a disinstallare e reinstallare i driver. Se non funziona e se hai un'altra scheda di Arduino a disposizione, potresti provare a riscrivere il bootloader della scheda che non funziona (la procedura è analoga a come mostrato nel video "Come programmare il microcontrollore ATtiny85 usando la scheda di Arduino").

    • @cristiandinicola5882
      @cristiandinicola5882 6 років тому

      Italian Tech Project Grazie, proverò

  • @agostinorusso376
    @agostinorusso376 7 років тому

    questo video perché e il momento di capire i millis (),
    nel video quando aggiungi:
    ultimoTempoDebounce=millis ();
    ultimoTempoDebounce prende il valore della conta di millis ,
    ma quando inserisci :
    if ((millis ()-ultimoTempoDebounce)>attesaDebounce)
    i millis in questo ultimo if e il
    continuo della conta del primo millis ? (quello del primo if ultimoTempoDebounce=millis ();)
    grazie mille

    • @TechMaker
      @TechMaker  7 років тому

      I valori delle due chiamate alla funzione "millis" (anche se eseguite una dopo l'altra) potrebbero essere diversi, se tra una chiamata e l'altra sono trascorsi dei millisecondi. La funzione "millis" ritorna il numero di millisecondi dall'inizio del programma fino all'esatto momento della chiamata della funzione "millis", quindi ogni volta viene ritornato il valore aggiornato fino a quel momento.

    • @agostinorusso376
      @agostinorusso376 7 років тому

      in questo codice time=millis () nel void loop dopo che diventa maggiore e esegue il codice nel if al primo giro time e sempre uguale per il resto degli if? poi si aggiorna con il nuovo ciclo loop?
      void setup(){
      time=millis();
      letturaluce_time=mills();
      servotime=millis();
      letturadati=millis();
      }
      void loop(){
      time=millis();
      if(time>letturaluce_time+5){
      luce1=analogRead(SENSORELUCE1);
      letturaluce_time=millis();
      }
      if(time>servotime1+15){
      servo1.write(posservo1);
      servotime1=millis();
      }
      if(time>letturadati+3000){
      Serial.print("Sensore 1 : ");
      Serial.print(letturaluce1,DEC);
      Serial.print(" Posizione motore 1 : ");
      Serial.println(posservo1,DEC);
      Serial.print(" Differenza : ");
      Serial.println(letturaluce1-letturaluce2);
      letturadati=millis();
      }
      }

    • @TechMaker
      @TechMaker  7 років тому

      Si, la variabile "time" rimane uguale, finché non viene sovrascritta nel successivo ciclo loop.

  • @ghifordmizzard1897
    @ghifordmizzard1897 6 років тому

    Io da sempre utilizzo il sistema di una variabile di tipo int o anche più ampia che se minore di un certo tempo viene incrementata di 1. Quando raggiunto il valore scelto vado ad eseguire il codice all'interno dell' if che compara la mia variabile se è uguale a un valore scelto e poi la risetto a 0 e il ciclo ricomincia. Se imposto in alto un delay(1) tale variabile verrà incrementata di un millisecondo alla volta e se non metto delay devo aumentare il tempo poiché ho capito che il ciclo loop viene eseguito più velocemente di un millisecondo. Questo sistema ultra logico secondo te è corretto ? Perché con l'utilizzo del delay(1) impostato all'inizio del voidloop() se il programma deve scrivere su shiftregister e altre istruzioni complesse è come se il programma all'interno del Microcontrollore rallentasse e ho dovuto creare altri cicli void() che vengono eseguiti nel momento voluto e non sempre perché noto rallentamenti nel programma in esecuzione. È normale per te ?

    • @TechMaker
      @TechMaker  6 років тому

      Se vuoi eseguire una determinata azione a intervalli regolari, dovresti utilizzare la funzione millis() ed in particolare controllare il tempo passato dall'ultima volta che l'azione è stata eseguita.
      Contare i cicli loop è molto poco affidabile in quanto la velocità dipende dalla complessità delle istruzioni che vengono eseguite.

    • @ghifordmizzard1897
      @ghifordmizzard1897 6 років тому +1

      Immaginavo, infatti adesso sono riuscito a fare in modo che ad cambiamento del millis una variabile s'incrementa di 1 e posso utilizzarla per creare un sottoLoop più lento. Con questo principio quando i millis() vanno in overflow dal passagio dal numero massimo di nuovo allo zero comunque c'è una variazione del tempo trascorso e quindi la variabile viene sempre incrementata e così gestisce anche l'overflow del millis() perchè lo devo utilizzare in un orologio, e quindi deve funzionare sempre anche più di 47,7 giorni ovvero dopo il primo overflow dei millis(). Senza usare realtime rtc.

  • @andredj6631
    @andredj6631 4 роки тому

    è normale che dopo aver caricato 1 volta il tutto su Arduino mi dia errore????

    • @TechMaker
      @TechMaker  4 роки тому

      Qual è il messaggio di errore?

  • @massimodoro3162
    @massimodoro3162 7 років тому

    scusa, ma il pulsante lo metti in cortocircuito praticamente. Usi una resistenza per abbassare la corrente ma è in corto quando lo premi. giusto ? Non c'è un'altro sistema sulla bread per far rilevare ad arduino il cambio di stato del pulsante ?

    • @TechMaker
      @TechMaker  7 років тому

      La resistenza serve, infatti, per evitare il cortocircuito tra 5V e GND, quando il pulsante viene premuto. In questo modo puoi leggere sul pin digitale 5V (HIGH) quando premi il pulsante e 0V (LOW) quando lo rilasci.

    • @massimodoro3162
      @massimodoro3162 7 років тому

      ok. Ma come calcoli la resistenza da inserire ? Esiste poi un modo per arduino di verificare la pressione del tasto senza dare corrente ? magari valutando la resistenza ==> 0 (low) non premuto / X(high) premuto ?

    • @TechMaker
      @TechMaker  7 років тому

      Non c'è un valore giusto o sbagliato per la resistenza da inserire. Da un lato deve essere il più alto possibile per far passare il meno possibile la corrente quando il pulsante è premuto, però allo stesso tempo non troppo alto, perché altrimenti sarebbe equivalente a un circuito aperto, quindi il pulsante potrebbe risultare premuto anche se in realtà non lo è. Di solito si usa un valore di almeno 10kΩ. Per esempio con la tensione di 5V e la resistenza di 100kΩ, la corrente è di 0,05mA. Tutte le misurazioni effettuate da Arduino si basano sulla tensione, quindi è impossibile evitare completamente il passaggio della corrente.

  • @agostinorusso376
    @agostinorusso376 7 років тому

    ciao complimenti per il video,devo dire la verità nei tutorial che hai non è adatto a persone che si stanno avvicinando arduino e programmazione ,tutorial che fai già sono adatti per persone che hanno dimestichezza con C, io mi sto avvicinando da poco alla programmazione per fare un cambio di stato usi troppi variabili e incomicia a essere più complicato seguirti,puoi usare in metodo più semplice e comprensivo per noi, non ancora esperti,per poi più avanti spiegare questo altro metodo,sicuramente questo è un metodo migliore ,però un cambio di stato si può fare anche con meno variabile e meno codice, comunque complimenti sei molto esperto 😆

    • @TechMaker
      @TechMaker  7 років тому

      Grazie per la tua opinione, che ci aiuterà a migliorare.
      In effetti il secondo sketch, quello con la gestione "anti-rimbalzo", non è molto semplice da capire per chi non ha ancora molta pratica. L'intenzione era quella di offrire anche un modo alternativo per gestire il debouncing, senza aumentare eccessivamente il ritardo con la funzione delay, che impedisce al programma di eseguire il resto del codice.
      Se non si hanno particolari esigenze, ci si può fermare al primo sketch, che è più semplice. In questo caso, se il ritardo di 10 millisecondi, inserito alla fine, non dovesse bastare per contrastare i "rimbalzi", è sufficiente aumentare il tempo di attesa passato alla funzione delay.

    • @agostinorusso376
      @agostinorusso376 7 років тому +1

      Italian Tech Project grazie mille ,gentilmente mi spieghi if sempre vero ho fatto un pò di ragionamento,ma non mi trovo e non riesco a capire

  • @agostinorusso376
    @agostinorusso376 7 років тому

    sto provando questo codice
    if(digitalRead (10)==HIGH){
    digitalWrite ((7),! digitalRead (7);
    }
    in pratica è un cambiamenti di stato del led, ho notato che avvolte avviene il cambiamento e avvolte no,così ho provato antiribalzo che usate voi , ma niente il cambiamento di stato avvolte avviene avvolte no, come mai?
    grazie

    • @TechMaker
      @TechMaker  7 років тому +1

      La condizione "digitalRead(10) == HIGH" non è sufficiente, perché anche premendo il pulsante molto velocemente, il codice del loop verrà eseguito moltissime volte e quindi il LED continuerà a cambiare lo stato da acceso a spento e viceversa, fino a fermarsi quando il pulsante viene rilasciato. Quei continui cambi di stato fanno si che alla fine ci sia solo circa 50% di probabilità che si fermi nello stato atteso.
      Per evitarlo devi o aggiungere un controllo dello stato precedente del pulsante, come mostrato nel video, oppure aggiungere un'attesa, finché il pulsante non viene rilasciato, dopo aver cambiato lo stato al LED.

    • @agostinorusso376
      @agostinorusso376 7 років тому

      Italian Tech Project ok pensavo che erano i rimbalzi,e usando antiribalzo si poteva risolvere,ma i rimbalzi quando si verificano? come si può notare a occhio (sempre se sono visivi),questo perché voglio provare milles () per correggere i rimbalzi.

    • @TechMaker
      @TechMaker  7 років тому

      I rimbalzi si verificano nel momento in cui il pulsante viene premuto o rilasciato. In pratica il segnale elettrico non passa improvvisamente da 0V a 5V, ma per un brevissimo periodo di tempo oscilla passando da 0V a 5V e viceversa molto velocemente, prima di stabilizzarsi su 5V.
      Dato che l'esecuzione del loop di Arduino è molto veloce, questi cambiamenti vengono rilevati e quindi percepiti come ripetute pressioni sul pulsante, facendo di conseguenza cambiare lo stato del LED diverse volte.
      Un modo per poter osservare i rimbalzi è attraverso un oscilloscopio, in alternativa puoi andare per tentativi, aumentado sempre di più il tempo di attesa, finché il problema smette di verificarsi.

  • @agostinorusso376
    @agostinorusso376 7 років тому

    ciao provo a fare qualche esercizio per vedere fin ora cosa ho capito,
    int ledPin = 9;
    int pulsantePin = 2;
    int ledStato = LOW;
    int pulsanteStato = LOW;
    int prova=HIGH;
    void setup(){
    pinMode(ledPin, OUTPUT);
    pinMode(pulsantePin, INPUT);
    digitalWrite(ledPin, ledStato);
    }
    void loop(){
    int lettura = digitalRead(pulsantePin);
    if(lettura != pulsanteStato and lettura == HIGH){
    ledStato = !ledStato;
    digitalWrite(ledPin, ledStato);
    While (prova==ledStato){
    crono++;
    Serialprintln (crono);
    }
    }
    pulsanteStato = lettura;
    delay(10);
    }
    In pratica volevo provare un cronometro in seriale,mi parte al clikko del pulsante ,ma poi non si ferma e come nel while non cambia ledStato al prossimo clikko,mi può spiegare grazie sono ancora in fase di studio e prove grazie mille

    • @TechMaker
      @TechMaker  7 років тому +1

      Ciao, per fare il cronometro che incrementa il valore ad ogni accensione del LED, dovresti sostituire WHILE con IF.
      Nel tuo codice all'interno del costrutto WHILE, le variabili "prova" e "ledStato" non cambiano mai il valore, quindi il ciclo WHILE continuerà all'infinito a incrementare la variabile "crono" e stamparla sul monitor seriale, perché la condizione "prova == ledStato" sarà sempre vera.
      Inoltre dovresti inizializzare la variabile "crono" prima di utilizzarla.

    • @agostinorusso376
      @agostinorusso376 7 років тому

      Italian Tech Project grazie per la risposta,ma perché non cambia?non dovrebbe cambiare appena ledStato diventa LOW,e nel while prova non è più uguale e si dovrebbe spegnere e fermare crono++?grazie per la tua pazienza

    • @TechMaker
      @TechMaker  7 років тому

      Non si ferma perchè il ciclo WHILE viene eseguito finché la condizione è vera. Una volta che "ledStato" diventa HIGH, vengono eseguite le righe dentro le parentesi graffe del WHILE, finché la condizione "prova == ledStato" è vera.
      Il codice dopo il WHILE non viene eseguito fino a quando la condizione non diventa falsa. Dato che dentro il ciclo WHILE l'unica variabile che cambia è "crono", ad ogni ciclo sia la variabile "prova", sia "ledStato" continueranno ad essere HIGH.

    • @agostinorusso376
      @agostinorusso376 7 років тому

      Italian Tech Project grazie cioè significa che pulsante =lettura; non cambia perché while si blocca sempre sul vero ripete il crono++, non va più avanti il cambiamento delle variabili nel if non avviene ?

    • @TechMaker
      @TechMaker  7 років тому +1

      Si, finché la condizione del WHILE è vera, vengono eseguite, in continuazione, soltanto le istruzioni dentro le parentesi graffe del WHILE

  • @sasa76564
    @sasa76564 7 років тому

    Cosa succede dopo i 50 giorni ?
    E da riprogrammare ???

    • @TechMaker
      @TechMaker  7 років тому

      Dopo circa 50 giorni la funzione millis() ricomincia di nuovo a contare da 0.
      Per poter lavorare con gli intervalli superiori di 50 giorni è consigliato utilizzare moduli RTC (Real Time Clock) esterni.

    • @sasa76564
      @sasa76564 7 років тому

      Italian Tech Project
      RTC ??? Non sono ancora arrivato a questi livelli
      Scusa sono ancora ai primi passi
      Puoi inviarmi la tua e-mail personale ???

    • @TechMaker
      @TechMaker  7 років тому

      Era solo per dare un'alternativa nel caso in cui il limite di 50 giorni fosse troppo stretto. Comunque puoi contattarci all'indirizzo email arduino@italiantechproject.it.

  • @giuseppefesta9987
    @giuseppefesta9987 5 років тому

    mi è un po più chiaro ora studierò il modo e poi .....aiutino? vedremo prima provo grazzzie per la risposta

  • @ion3754
    @ion3754 6 років тому

    Comprati un microfono decente. ♥

    • @TechMaker
      @TechMaker  6 років тому +1

      Grazie per il consiglio.

    • @giannicavalli5478
      @giannicavalli5478 3 роки тому +1

      A me sembra che si senta bene. E' la tua cafoneria invece che mi lascia basito.
      Fatti un corso di buone maniere...e dì alla mamma che era meglio se da piccolo ti insegnava l'educazione.