Come realizzare un pulsante dotato di stato con Arduino #12

แชร์
ฝัง
  • เผยแพร่เมื่อ 28 ส.ค. 2024
  • In questo video spiego come programmare Arduino per controllare lo stato di un pulsante. Premento il tasto un LED si accenderà e resterà acceso. Per spegnere il LED si dovrà premere di nuovo il tasto.
    Sorgenti:
    github.com/zma...
    Puoi scaricare gratuitamente il mio libro: "Il manuale di Arduino - Guida Completa" dal mio sito: www.zeppelinmaker.it oppure direttamente da gumroad: gumroad.com/l/...

ความคิดเห็น • 86

  • @mikele8099
    @mikele8099 2 ปีที่แล้ว +5

    Ciao Paolo le tue lezioni creano dipendenza , non riesco più a smettere di vederle :)

  • @matteozanarotto4155
    @matteozanarotto4155 3 ปีที่แล้ว +12

    da informatico avrei messo alla fine solo "digitalWrite(13,stato);" ma bellissimo tutorial!! li guardero' tutti!!

  • @strobolare
    @strobolare 6 ปีที่แล้ว +1

    Capisco che questa è la base ma complimenti a te per la tua professionalità e preparazione in diversi settori, devi aver studiato un bel po' per arrivare a gestire un tuo laboratorio, complimenti!

    • @zeppelinmaker
      @zeppelinmaker  6 ปีที่แล้ว +3

      Grazie! Ho iniziato a 10 anni ;-) Non mi sono ai fermato e sono molto curioso.

  • @ashrafmohammad7840
    @ashrafmohammad7840 6 ปีที่แล้ว +2

    ben spiegati questi esercizi base per usare arduino, grande!

    • @zeppelinmaker
      @zeppelinmaker  6 ปีที่แล้ว

      Grazie! Non perderti i prossimi! ;-)

  • @PietroMaker
    @PietroMaker 5 ปีที่แล้ว

    eccomi qua... dopo averlo fatto funzionare come scritto da te, ho fatto qualche modifica, in pratica ho fatto partire il led acceso e poi nel secondo if del loop ho invertito il valore della variabile stato... così facendo ho dovuto infatti aumentare il delay altrimenti anche schiacciano il pulsante il led non cambiava condizione... ottimo comunque per fare pratica...

  • @PietroMaker
    @PietroMaker 5 ปีที่แล้ว +6

    direi che il delay è fondamentale in questo sketch... già metterlo a 150 bisogna avere il dito come un pistolero :) .. scherzi a parte... ottimo !!!

  • @mihaidumitruflorea1343
    @mihaidumitruflorea1343 5 ปีที่แล้ว +1

    grazie mille per l'aiuto (risolto).
    tutti video eccellenti,complimenti !

  • @giuseppe12518
    @giuseppe12518 4 ปีที่แล้ว

    Direi un auto ritenuta del pulsante, ottimo Paolo, grazie ed auguri

  • @guglielmocarnemolla5139
    @guglielmocarnemolla5139 4 ปีที่แล้ว +1

    grazie piano piano sto imparando.

  • @darkshadow-fi4xu
    @darkshadow-fi4xu 9 หลายเดือนก่อน

    sei un campione

  • @alessandro21-f8k
    @alessandro21-f8k 4 ปีที่แล้ว +1

    Innanzitutto ti ringrazio per tutto quello che hai fatto e che stai facendo; per quanto riguarda il video, non si poteva cambiare lo stato con il ciclo do while?

  • @ferdinandoalberti7142
    @ferdinandoalberti7142 2 หลายเดือนก่อน

    Ciao Paolo e complimenti per le tue spiegazioni
    Cercavo di creare una programma che preveda 2 processi contemporanei( esempio premo un pulsante e si accende un Led per un certo tempo e premo un secondo pulsante e si accende un altro Led per un altro tempo) ma se è in atto il primo processo (durante il tempo del primo Led acceso) il secondo processo non viene verificato per cui devo aspettare che sia terminato il tempo del primo Led per premere il secondo pulsante... ci sarà sicuramente modo di risolvere il problema ma per ora non ho trovato niente nemmeno in rete
    Spero nella tua (o di altri utenti) professionalità
    anticipatamente ringrazio 😉

  • @StormShadow20633
    @StormShadow20633 6 ปีที่แล้ว

    ottima spiegazione grande Paolo!

  • @MGsyd
    @MGsyd หลายเดือนก่อน

    Ciao Paolo, questa cosa l’hai pensata tu? Bella idea!

  • @fadefade986
    @fadefade986 2 ปีที่แล้ว

    Ho provato e ovviamente funziona , mi potresti aggiungere i commenti al programma così capisco meglio le motivazioni? Sono nuovissima in questo campo.

  • @uko4
    @uko4 2 ปีที่แล้ว +1

    salve paolo complimenti , io ho un problema , copiando il codice paripasso non mi fa il cambio di stato, non mi da errore ma non funziona, sto imparando con tinkercad per ora ,ho letto e riletto il codice ed e identico, come posso fare?grazie

    • @gianlucadiana5510
      @gianlucadiana5510 ปีที่แล้ว

      Uguale a me, non so se sei riuscito a risolvere (so che è passato un anno, però nemmeno a me va nonostante il codice uguale su Tinkercad)

  • @RivedaMMD
    @RivedaMMD 4 ปีที่แล้ว +3

    Domanda, visto che la variabile stato contiene comunque HIGH o LOW, la parte di codice che controlla il led non avresti potuto scriverla direttamente usando la variabile stato? ossia
    digitalWrite(13, stato);
    senza l'if..else?

    • @tomsbru
      @tomsbru 3 ปีที่แล้ว

      Ovvero digital write(13, digitalread(7)); intendete questo ?

  • @fablapp
    @fablapp 10 วันที่ผ่านมา

    il secondo ciclo "for" non e' superfluo? non basterebbe mettere alla fine digital Write e passate solo la variabile stato direttamente?

  • @fraxchannel5505
    @fraxchannel5505 3 ปีที่แล้ว

    fantastico!

  • @stefanoercolino123
    @stefanoercolino123 11 หลายเดือนก่อน +1

    Prof, non sarebbe meglio:
    if (digitalRead(7) == HIGH) {
    stato=!stato;
    digitalWrite(13, stato);
    }
    ?

  • @admguitar4855
    @admguitar4855 3 ปีที่แล้ว

    Grandioso, cosa si dovrebbe aggiungere nel codice se ad esempio ci sono 3 pulsanti e vogliamo far spegnere il led del pulsante 1, accendendo quello del 2 o del 3, e stessa cosa per questi altri due pulsanti?

  • @francescostrano8314
    @francescostrano8314 ปีที่แล้ว

    Buongiorno ,sempre interessante i tuoi post lezione... volevo sapere se con un tasto ho diverse funzioni nel programma ( ovviamente gestito da flag) come faccio a non far avanzare il programma se non rilascio e ripigio in tasto? grazie

  • @sergeschonenberg6345
    @sergeschonenberg6345 5 ปีที่แล้ว

    Grazie 🌟

  • @massimilianoberetta816
    @massimilianoberetta816 4 ปีที่แล้ว

    Questo sketch merita di essere ben analizzato. E' interessante. Ho provato senza l'uso dello stato == !stato e il led resta acceso (okay, ho capito la logica riugardando il codice).
    Invece ho eliminato tranquillamente il secondo "if" come da codice seguente e funziona. Ma vorrei capire se ha più senso utilizzare la logica del video o quella del mio codice e perché.
    int stato = LOW;
    void setup() {
    pinMode(13, OUTPUT);
    pinMode(7, INPUT);
    }
    void loop() {
    if(digitalRead(7) == HIGH) {
    stato = !stato;
    delay(200);
    digitalWrite(13, stato);
    }
    else {(digitalWrite == LOW);}
    }

    • @smn172
      @smn172 4 ปีที่แล้ว

      la condizione di else non ha senso, digitalwrite non è una funzione da cui puoi leggere un valore, e il doppio uguale serve per confrontare due valori, non per assegnare un valore. In pratica hai scritto: "Altrimenti, se digitalwrite è uguale a LOW... e basta" che non ha senso. Quindi == significa confronto, mentre = significa assegnazione
      Un modo corretto è questo:
      int stato = LOW;
      void setup() {
      pinMode(13, OUTPUT);
      pinMode(7, INPUT);
      }
      void loop() {
      if (digitalRead(7) == HIGH) {
      stato = !stato;
      delay(200);
      }
      digitalWrite(13,stato);
      }
      Ad ogni iterazione si controlla la pressione del tasto, se il tasto viene premuto si inverte il valore della variabile stato (da LOW ad HIGH o viceversa). Sul pin 13 ad ogni iterazione viene scritto il valore della variabile stato, se precedentemente è stato premuto il tasto il valore è invertito e il led cambia stato, altrimenti viene riscritto lo stesso valore che già conteneva e non cambia niente.

    • @avvluciani
      @avvluciani 2 ปีที่แล้ว

      Ho provato a replicare, ma a me non funziona. Potrebbe dipendere dal fatto che non uso Arduino originale? Sto usando quello prodotto da Dymore. Grazie per l'aiuto.

  • @pinomadonia8210
    @pinomadonia8210 3 หลายเดือนก่อน

    con tinkercad, dice che la corrente del led è di 53,5 mA, mentre il valore massimo dovrebbe essere 20 mA... la durata del led potrebbe risultare ridotta...si può fare qualcosa o va bene così?

  • @francescopuletti
    @francescopuletti 2 ปีที่แล้ว

    ciao paolo per curiosità al posto del led ho pilotato un relè (attivazione 5 volt) ma questo mi cambia di stato in continuazione quando pigio il pulsante !

  • @giuseppeazzarello8426
    @giuseppeazzarello8426 5 ปีที่แล้ว

    buonasera, seguo tutti i tuoi tutoriale, mi sono appasionato di elettronica e arduino, ho imparato tanto, ho anche acquistato 4 tuoi libri, "arduino trucchi e segreti" , basi di elettrnica per maker,. arduino la guida essenziale ed elettronica per maker, tutti libri eccellenti mi hanno risolto tanti problemi che prima non conoscevo e per questo ti devo ringraziare. inoltre i tuoi video sono una manna dal cielo per chi vuole imparare, sia l elettronica che arduino. adesso vengo al dunque. ho creato lo schema e lo script di questo video, ho capito il funzionamento, è tutto funziona perfettamente, pero volevo la conferma dello stato del pulsante con serial.begin e serial.println, ma mi da un probramma mi si blocca, cioe il circuito non funziona se aggiungo i serial. chiedo . perche non posso visualizzare lo stato del pulsante sul serial monitor, questo è il mio script :
    int stato = LOW;
    int = 7;
    void setup()
    {
    pinMode(13, OUTPUT);
    pinMode(7, INPUT);
    }
    void loop(){
    Serial.begin(9600);
    if(digitalRead(7) == HIGH)
    {stato = !stato;}

    if (stato == HIGH){
    digitalWrite(13, HIGH);}
    else
    {digitalWrite(13,LOW);}
    Serial.println(stato);
    }

    • @zeppelinmaker
      @zeppelinmaker  5 ปีที่แล้ว

      Ciao e grazie 1000! Prova a spostare Serial.begin(9600) nel setup! Tu lo hai messo nel loop() e continua a inizializzare la seriale!!

    • @giuseppeazzarello8426
      @giuseppeazzarello8426 5 ปีที่แล้ว

      grazie molto , ho fatto come hai detto, adesso funziona come volevo.

  • @paoloconcato3175
    @paoloconcato3175 4 ปีที่แล้ว

    Ciao Paolo, sei un grande. premetto che sto imparando di più con questi tuoi video che in mesi da autodidatta.
    Faccio una domanda spero non sia troppo banale: per fare delle prove ho aggiunto allo sketch che nel monitor seriale venga scritto on e off in base allo stato del led. i valori di on e off però vengono scritti a pioggia sul monitor, come faccio a fare in modo che venga scritto solo 1 volta il comando che sto eseguendo? in pratica vorrei bloccare la pioggia di on-off scrivendolo una sola volta quando premo.
    GRazieeeeeeeee

    • @zeppelinmaker
      @zeppelinmaker  4 ปีที่แล้ว

      se prosegui nelle lezioni troverai quella sui fronti di salita e discesa...

  • @alessioromano3231
    @alessioromano3231 2 ปีที่แล้ว

    Ciao Paolo complimenti per il video. Ho provato lo sketch e funziona tranquillamente. Ho provato pero' ad aggiungere dei tasti ma non mi carica lo sketch. come dovrei fare per aggiungere altri tasti? grazie mille per il tuo supporto.

    • @zeppelinmaker
      @zeppelinmaker  2 ปีที่แล้ว +1

      che errore esce?

    • @alessioromano3231
      @alessioromano3231 2 ปีที่แล้ว

      @@zeppelinmaker Ciao Paolo, ho risolto, ho aggiunto 16 tasti con le relative resistenze , ho riletto o sketch , compilato e caricato . Ho usato l'Arduino mega giocando tra ingressi ed entrate sui pin che vanno da 22 a 53. Adesso vorrei passare allo step successivo ed aggiungere un modulo bluetooth per comandare sempre i 16 relay ma penso che non ne saro' capace. Magari si potrebbe pensare al prossimo video proprio su questo che ne pensi. Colgo l'occasione per ringraziarti per il tempo che ci dedichi e i consigli che ci dai. Grazie mille

    • @zeppelinmaker
      @zeppelinmaker  2 ปีที่แล้ว +1

      @@alessioromano3231 ok, me lo segno

  • @g4vrv
    @g4vrv ปีที่แล้ว

    Ciao Paolo, eccomi a chiederti altri dubbi. Scusami se non è parte proprio dell’argomento di questo video. Ho un semplice codice che accende un led tramite un interruttore NO che ho caricato su un attiny85. Tutto funziona correttamente ma dopo qualche accendi spegni consecutivo ecco che rimane acceso anche se riapro l’interruttore. Ho installato un condensatore di disaccoppiamento da 100nf tra GND e VCC e alimento l’attiny85 a 5V. Sono 3 giorni che non trovo soluzione, spero tu riesca a darmi qualche consiglio. Grazie in anticipo

    • @zeppelinmaker
      @zeppelinmaker  ปีที่แล้ว

      strano... non mi è mai capitato... problemi di memoria? bisognerebbe vedere il tutto

    • @g4vrv
      @g4vrv ปีที่แล้ว

      @@zeppelinmaker non credo la memoria perché ho provato proprio un semplice se l’interruttore è on imposta high altrimenti low.. utilizzo una resistenza di pull down tra ingresso interruttore e GND (10K). Ho fatto una prova anche con un pulsante NO, risultato uguale. Ho letto in qualche forum che attiny85 vuole 5V molto stabili e mi sto procurando dei 7805… attualmente lo alimentato da un piccolo step down… spero sia solo quello

    • @zeppelinmaker
      @zeppelinmaker  ปีที่แล้ว

      @@g4vrv prova a mettere dei condensatori allora: 100nf e un elettrolitico da 22uF...

    • @g4vrv
      @g4vrv ปีที่แล้ว

      @@zeppelinmakertrovato un 7805, inserito un 47uF non avendo 22uF finalmente sembra comportarsi come deve :) grazie come sempre!

  • @giuseppefazio989
    @giuseppefazio989 4 ปีที่แล้ว

    Buonasera, una domanda: il led si accende con un delay(200), come faccio ad inserire un delay(3000) per spegnere il led in ritardo ? Grazie

    • @zeppelinmaker
      @zeppelinmaker  4 ปีที่แล้ว

      non ho capito... non basta metterlo dopo l'accensione del led?

  • @uko4
    @uko4 2 ปีที่แล้ว

    trovato errore, un punto e virgola di troppo,ma scusa il video dei pulsanti multipli quale sarebbe ,non lo trovo grazie

  • @guglielmocarnemolla5139
    @guglielmocarnemolla5139 4 ปีที่แล้ว

    potresti fare un esempio di output temporizzata tramite doppio impulso da sensore reed, esempio leggendo sensore1 e dopo 2" sensore 2 attivare output per ? secondi. viceversa se legge prima sensore 2 e poi sensore 1 non attivare niente. potrebbe servir ecome sensore di pedalata dare impulso(corrente9 ad acceleratore ebike grazie

  • @marconervi1123
    @marconervi1123 4 ปีที่แล้ว

    Ciao, stavo prendendo spunto dal tuo sketch per perfezionare un mio progetto, da 4 telefoni in famiglia si possono abbassare ed alzare le tapparelle elettriche, quello che vorrei realizzare è un cambio di stato automatico dopo 10 secondi dall'invio del comando al relè' da parte del telefono, perché se in manuale ognuno non riporta a 0 lo stato del relè di discesa e qualcun'altro da il comando di salita alla stessa tapparella mando in corto circuito il motore...... In pratica do l'impulso push al relè che rimane eccitato per 10 secondi e poi va in low... se hai un po di tempo mi daresti un consiglio su come realizzare ? posso usare indipendentemente un arduino mega ed un NODEMCU ESP8266 12E Grazie mille per la disponibilità

  • @felicedipalma6041
    @felicedipalma6041 4 ปีที่แล้ว

    ciao,io vorrei fare in modo che quando tengo spinto il pulsante il led si accende per 7 secondi poi si spegne,questo deve accadere solo quando il tasto e' premuto.se il tasto non e premuto il led deve rimanere spento.come posso farlo?grazie

    • @zeppelinmaker
      @zeppelinmaker  4 ปีที่แล้ว

      dopo aver intercettato il tasto metti un digitalWrite seguito da una pausa di 7 secondi, quindi spegni il led con un altro digitalwrite

  • @effe_bi
    @effe_bi 6 ปีที่แล้ว

    Una cortesia se possibile, le immagini statiche inserite nel video potrebbe lasciarle qualche secondo in più? (sa, invecchiando oltre a diminuire la vista, aumentare il rincoglionimento, anche i riflessi si attenuano) Grazie.

    • @zeppelinmaker
      @zeppelinmaker  6 ปีที่แล้ว +1

      effe bi mi dispiace x l'inconveniente. Cercherò di renderle scaricabili assieme agli sketch

    • @effe_bi
      @effe_bi 6 ปีที่แล้ว +1

      Ma no, non è necessario, basta qualche secondo in più del fermo immagine, se non è troppo impegnativo, altrimenti continuerò a fare io il fermo del video. :)

    • @zeppelinmaker
      @zeppelinmaker  6 ปีที่แล้ว +1

      Ok!

    • @strobolare
      @strobolare 6 ปีที่แล้ว

      effe bi anche io fermo il video 😂

    • @zeppelinmaker
      @zeppelinmaker  6 ปีที่แล้ว +2

      Comunque da quando me lo avete fatto notare ho predisposto GitHub. github.com/zmaker/arduino_cookbook Devo fare un po' di ordine... ma pian piano ci arrivo!

  • @andreatomassini
    @andreatomassini 5 ปีที่แล้ว

    Anzitutto complimenti per la chiarezza.
    Ho provato questo esercizio e mi funziona tutto solo che non ho capito il listato del programma, mi spiego:
    - All'inizio si dichiara la variabile stato e la si mette in LOW
    - con pinMode si settano l'ingresso e l'uscita dei pin
    Adesso arriva la parte che non ho capito:
    - All'inizio del Void loop, la prima istruzione dice che se il pin 7 è in HIGH, la variabile stato diventa LOW
    - poi, se la variabile stato è HIGH, setto il segnale del pin 13 in HIGH
    - altrimenti lo setto in LOW
    Messa così, la variabile stato è sempre e comunque in LOW per via dell'istruzione stato=!stato quindi, visto che il led si accende quando il pin 7 è in HIGH, non dovrebbe mai accendersi.
    Visto che comunque funziona, sicuramente mi sfugge qualcosa. C'è qualcuno che può aiutarmi a capire cosa?

    • @zeppelinmaker
      @zeppelinmaker  5 ปีที่แล้ว +1

      all'inizio del loop verifico se qualcuno ha premuto il tasto con un "if". Se il tasto è stato premuto "inverto" il valore presente nella variabile stato con stato = !stato;. Qualunque esso sia... da LOW vai a HIGH oppure se è HIGH passi a LOW.

  • @sniperbazy
    @sniperbazy 6 ปีที่แล้ว

    puoi evitare if, prima del digitalWrite.... e mettere direttamente la variabile nella digitalWrite

    • @zeppelinmaker
      @zeppelinmaker  6 ปีที่แล้ว +2

      Grazie Mattia. Forse non l'ho detto... ma lo faccio per pedanteria così che i neofiti abbiano tutto chiaro. Più avanti introdurrò queste semplificazioni.

    • @sniperbazy
      @sniperbazy 6 ปีที่แล้ว +1

      immaginavo una cosa del genere...

  • @simonezampatti2936
    @simonezampatti2936 2 ปีที่แล้ว

    ho copiato tutto l sketch dal tuo video uguale al 100% e mi da che ci sono un sacco di errori e non me lo carica come mai? qualcuno mi può aiutare per favore?

  • @davidemitra3126
    @davidemitra3126 4 ปีที่แล้ว +1

    Dichiarare la variabile "stato" come int, quando essa può assumere solo due valori come un bool mi manda in crisi 🤔

    • @CarloStemberger
      @CarloStemberger 4 ปีที่แล้ว +1

      Ho provato a dichiarare la variabile come bool; non noto differenze nel funzionamento, ed effettivamente si risparmia un po' di memoria.

  • @matteopisanello7787
    @matteopisanello7787 4 ปีที่แล้ว

    Ho notato che se tengo premuto il pulsante il led lampeggia, come mai?

    • @zeppelinmaker
      @zeppelinmaker  4 ปีที่แล้ว

      perché lo stato viene cambiato di continuo

  • @M87VirgoA
    @M87VirgoA 5 ปีที่แล้ว

    Aiutami ti prego. il mio led lampeggia invece di rimanere acceso... come mai?

    • @zeppelinmaker
      @zeppelinmaker  5 ปีที่แล้ว +1

      forse hai collegato il pulsante al contrario. Verifica i cablaggi... dove va il GND e dove i 5V?

    • @M87VirgoA
      @M87VirgoA 5 ปีที่แล้ว

      @@zeppelinmaker paolo, posso contattarti in privato? La faccenda è un po' più complicata. Il mio stato è dettato da un segnale ricevuto dal sensore ad infrarossi. Quindi se riceve quel segnale ed il led è spento, accendilo, altrimenti spegnilo. Non posso inviare due codici diversi per ragioni che non sto a spiegarti. Grazie per l'aiuto

    • @zeppelinmaker
      @zeppelinmaker  5 ปีที่แล้ว

      @@M87VirgoA trovi i contatti su www.zeppelinmaker.it

  • @riccardodemartini7903
    @riccardodemartini7903 4 ปีที่แล้ว +1

    2:41, anche nel linguaggio C è così

  • @matteorossi627
    @matteorossi627 5 ปีที่แล้ว

    non mi legge il pulsante e non ho idea perche, ma non credo sia un errore di programmazione
    come posso fare??????????

    • @matteorossi627
      @matteorossi627 5 ปีที่แล้ว

      pero sinceramente mi sembrano giusti anche i collegamenti... tutti gli altri tutorial funzionano

    • @zeppelinmaker
      @zeppelinmaker  5 ปีที่แล้ว

      Prova a cambiare i jumper. Verifica che il pulsante sia infilato per bene nella breadboard. Usa un tester per verificare che ci siano i contatti.

  • @padovanandrea7464
    @padovanandrea7464 10 หลายเดือนก่อน

    non funziona niente, avanti così

  • @relaxxx7786
    @relaxxx7786 ปีที่แล้ว

    Non funziona, il codice è sbagliato e fa blincare ripetutamente il led quando è low e non salva in memoria il valore.

    • @zeppelinmaker
      @zeppelinmaker  ปีที่แล้ว

      avrai sbagliato qualcosa nei collegamenti. Verifica bene il circuito!

  • @marcotronati9310
    @marcotronati9310 5 ปีที่แล้ว

    salve sig Paolo, non sono molto pratico, ho copiato sia il progrmma che lo schema ma non mi funziona, mi lampeggia a ritmo del delay indicato

    • @zeppelinmaker
      @zeppelinmaker  5 ปีที่แล้ว

      mmh strano. I collegamenti elettrici sono corretti? come puoi vedere tutti gli sketch sono testati.