Αρχικό μήνυμα από
kostasmantzios
μπορεις να μου εξηγισεισ τι εννοεισ (ειμαι νεος στο αρντουινο καιδεν καταλαβαινω παρα πολλα)
Software Debounce:
When using a hardware switch you may want to debounce the input one way or another. Either in hardware or in software so that
you don't multiple trigger on a noisy edge transition. The following is an easy and reliable software debouncing algorithm which is intended to work on a periodic sampling of an input line.
Με απλά ελληνικά, όταν πατάς έναν μηχανικό διακόπτη, αυτός μέχρι να σταθεροποιηθεί η κατάστασή του περνά από πολλές μεταβάσεις χαμηλής/υψηλής κατάστασης. Εσύ μπορεί να μην προλαβαίνεις να το δεις/καταλάβεις αλλά ο μικροελεγκτής διαβάζει όλες αυτές τις μεταβάσεις και δε σου δείχνει τα αποτελέσματα που θα περίμενες.
Μπορείς να κάνεις και hardware debounce με RC κύκλωμα ή με schmit trigger αλλά αν ο μικροελεγκτής σου δεν έχει μεγάλο φόρτο εργασίας τότε μπορείς να το κάνεις πολύ πιο εύκολα προγραμματιστικά. Μια άλλη ιδέα για software debounce είναι αντί να παίρνεις μία μέτρηση της κατάστασης εισόδου να παίρνεις πολλές μετρήσεις μέχρι να αποφασίσεις αν ο διακόπτης είναι on ή off. Γρήγορη και "βρώμικη" υλοποίηση είναι κάτι τέτοιο:
Κώδικας:
// Συνάρτηση ελέγχου αν πατήθηκε το κουμπί λήψης δεδομένων
//**
void checkButton()
{
/* Για το debouncing του διακόπτη πέρνουμε 80 μετρήσεις κάθε φορά και βλέπουμε την κατάσταση
που έχει τις περισσότερες φορές (περισσότερη ώρα πατημένο ή όχι) */
int sumCount = 0;
for (int pressCount = 1; pressCount < 80; pressCount++)
{
// read the state of the switch into a local variable:
int reading = digitalRead(BUTTONPIN);
sumCount = sumCount + reading;
//delay(1);
}
// Έλεγχος για το αν ηταν πραγματικό πάτημα ή όχι
if (sumCount >= 40)
{
buttonState = 1;
}
else
{
buttonState = 0;
}
}
Επίσης, μέσα στο IDE του arduino υπάρχει στα basic examples, παράδειγμα debounce με χρόνο.