Jump to content
ELFORUM - Forumul electronistilor

Debouncing


mflorian24
 Share

Recommended Posts

Nu este ceva spectaculos, dar m-am gîndit să mai populez aria...

Aveam nevoie de un buton care să acţioneze după mecanismul pornit-oprit. Adică la fiecare apăsare să comute în starea cealaltă. Bineînţeles că trebuia să tratez oscilaţiile mecanice care fac circuitul să comute de mai multe ori, în mod necontrolabil. Aveam de ales între o soluţie hardware, cu rezistoare şi condensatori, sau soluţia software. Pentru soluţia soft am dat o căutare pe net şi am găsit diverse implementări, care mai de care mai complicate şi încîlcite. Aşa că am decis să scriu eu o bucată de cod pentru debouncing. Treaba s-a dovedit deosebit de simplă, din cîteva linii de cod s-a rezolvat problema. Pentru doritori, iată codul şi schema pe care l-am testat.

De remarcat că se poate controla comutarea, la alegere, pe front crescător sau căzător, dacă se alege în mod corespunzător condiţia din "if". De asemenea, este necesară ajustarea prin încercări a valorii delay(), funcţie de caracteristicile mecanice ale butonului.

 

const int button = 2;const int led1 = 8;int push = 0;void setup() {  pinMode(button, INPUT_PULLUP);  pinMode(led1, OUTPUT);  digitalWrite(led1, LOW); // set initial LED state}void loop() {  //read the button twice, with some delay  int read1 = digitalRead(button);  delay(35);///wait for debouncing. Choose a value between 5 and 50. It depends by mechanical quality of the button  int read2 = digitalRead(button);  if(read1 != read2 && read1 == LOW){//button was pressed. Switch on pushing.    //(read1 != read2 && read2 == LOW){//button was pressed. Switch on releasing.    push++;  }  if(push%2==0){//toggle    digitalWrite(led1, LOW);  } else {    digitalWrite(led1, HIGH);  }}

post-70282-139829791255_thumb.jpg

Link to comment
Share on other sites

  • 3 years later...

Am făcut din mai multe schițe un termostat de centrala cu 18B20 care are si ceas(DS1307). Se afișează aleator 2 sec ORA, 2sec TEMPERATURA si 2 sec PRAGUL la cat sa porneasca pompa(de ex. 40C). Am recuperat afisajul cu 4 digiti de la un mp3 player defect. Totul functioneaza bine insa as dori sa-i pun si un buton cu care sa reglez PRAGUL de la 0-60 C dar nu ma pricep. Mentionez ca toti pinii digitali sunt ocupati mai putin 0 si 1 si am liberi doar analogici. Vreau ca la apasare sa afiseze ultimul PRAG si daca continui apasarea acesta sa creasca pana la 60 dupa care sa sara la 0 si sa creasca pana la ridicarea degetului de pe buton. Ma poate ajuta cineva in aceasta chestiune???

Link to comment
Share on other sites

are un buton definit deja pe o intrare analogica, mai are liberi doar a6 si a7

 

o sa incerc sa reformatez codul si sa punem 3 butoane pe pinul analogic cu r/2r

 

ce nu inteleg, de ce nu punem 4 rezistente pe anozi?

 

adica nu sunt batute in cuie conexiunile, as muta anozii pe pinii pwm si as controla mult mai elegant luminozitatea

Edited by deejay2k1
Link to comment
Share on other sites

Nu e nimic bătut in cuie, se poate si modifica. Eu am folosit D2...D13 din comoditate, ca sa pot băga afișajul direct in soclul la UNO. Dupa ce e gata proiectul normal ca nu va rămâne acolo deci daca ziceti ca e mai bine cu PWM se poate modifica(eventual si o schema daca se poate). Vreau doar ca sa am un singur buton care la apasare de mai mult de 2-3 sec sa-mi afiseze temperatura prag si daca continui apasarea sa inceapa sa creasca pana cand iau mana de pe buton. Totodata sa ramana memorat acest prag pana la o alta modificare. Cresterea sa se faca in bucla, adica sa creasca pana la 60 dupa care sa sara la 0 si iar sa creasca. Cresterea se poate face din 1 in 1 sau din 5 in 5 sau chiar si din 10 in 10 e bine. Momentan asa arata testul !Va mulțumesc !

post-194867-0-68532300-1512804278_thumb.jpg

post-194867-0-54039200-1512804290_thumb.jpg

post-194867-0-88163600-1512804302_thumb.jpg

Edited by marik2500
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines