Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
boebot-public
/
eriala-2024
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
3a560d19
authored
Sep 24, 2025
by
Risto Heinsar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed a bug in the debounce code, added comments for clarity
parent
2e543e87
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
71 additions
and
18 deletions
lab4/lab4_demo_qti_calibration/lab4_demo_qti_calibration.ino
lab4/lab4_demo_ultrasonic/lab4_demo_ultrasonic.ino
lab4/lab4_demo_qti_calibration/lab4_demo_qti_calibration.ino
View file @
3a560d19
...
...
@@ -6,7 +6,7 @@
#define NUM_OF_MEASUREMENTS 10
const
uint8_t
debounceDelay
=
50
;
// the debounce time; increase if the output flickers
const
uint8_t
debounceDelay
=
40
;
// nupu stabiliseerimise aeg
void
setup
()
{
...
...
@@ -14,6 +14,7 @@ void setup()
pinMode
(
BUTTON_PIN
,
INPUT
);
}
void
loop
()
{
Serial
.
println
(
"Leiame QTI sensorite tumeda ja heleda pinna keskmise väärtuse."
);
...
...
@@ -88,25 +89,49 @@ uint16_t MeasureQtiAverage(void)
return
surface
;
}
/* Compacted version of https://docs.arduino.cc/built-in-examples/digital/Debounce/ */
bool
ButtonRead
()
bool
ButtonRead
(
void
)
{
/* Nupu olek eelnevast funktsiooni käivitamisest, kasutame stabiliseerimiseks */
static
bool
lastButtonState
=
LOW
;
/* Viimase nupu oleku muutuse tuvastatud aeg, kasutame stabiliseerimiseks */
static
uint32_t
lastDebounceTime
=
0
;
/* Eelmine stabiilne nupu olek, vajalik nupu all hoidmisel korduste vältimiseks */
static
bool
buttonState
=
LOW
;
/* Vaikimisi eeldame, et nupp pole vajutatud enne kui kontrollime */
bool
returnVal
=
LOW
;
/* Loeme nupu oleku */
bool
btnReadValue
=
digitalRead
(
BUTTON_PIN
);
if
(
btnReadValue
!=
lastButtonState
)
{
/* Tuvastame kui nupu väärtus on muutunud eelmisest korrast */
if
(
btnReadValue
!=
lastButtonState
)
{
/* Uuendame millal viimati nupu olek muutus */
lastDebounceTime
=
millis
();
}
if
((
millis
()
-
lastDebounceTime
)
>
debounceDelay
)
{
if
(
btnReadValue
!=
buttonState
)
{
/* Kui nupu olek on piisavalt kaua olnud stabiilne (muutusteta, ei "võngu") */
if
((
millis
()
-
lastDebounceTime
)
>
debounceDelay
)
{
/* Väldib uue nupuvajutuse saatmise kuniks nupp pole lahti lastud vahepeal */
if
(
btnReadValue
!=
buttonState
)
{
/* Uuendame viimast stabiilset nupu olekut */
buttonState
=
btnReadValue
;
if
(
buttonState
==
HIGH
)
{
return
true
;
}
/* Tagab, et kui nupp on vajutatud, siis tagastatakse HIGH väärtus ehk vajutatud
* Lihtsustatud kujult: if (buttonstate == HIGH) returnVal = HIGH
*/
returnVal
=
buttonState
;
}
}
/* Funktsiooni korduse jaoks vajalik, et tuvastada nupu oleku muutus järgmisel korral */
lastButtonState
=
btnReadValue
;
return
false
;
return
returnVal
;
}
\ No newline at end of file
lab4/lab4_demo_ultrasonic/lab4_demo_ultrasonic.ino
View file @
3a560d19
...
...
@@ -18,6 +18,7 @@ void setup()
pinMode
(
SONIC_ECHO_PIN
,
INPUT
);
}
void
loop
()
{
if
(
ButtonRead
())
...
...
@@ -42,24 +43,49 @@ float GetDistInCm()
return
0.0
f
;
}
bool
ButtonRead
(
)
bool
ButtonRead
(
void
)
{
/* Nupu olek eelnevast funktsiooni käivitamisest, kasutame stabiliseerimiseks */
static
bool
lastButtonState
=
LOW
;
/* Viimase nupu oleku muutuse tuvastatud aeg, kasutame stabiliseerimiseks */
static
uint32_t
lastDebounceTime
=
0
;
/* Eelmine stabiilne nupu olek, vajalik nupu all hoidmisel korduste vältimiseks */
static
bool
buttonState
=
LOW
;
/* Vaikimisi eeldame, et nupp pole vajutatud enne kui kontrollime */
bool
returnVal
=
LOW
;
/* Loeme nupu oleku */
bool
btnReadValue
=
digitalRead
(
BUTTON_PIN
);
if
(
btnReadValue
!=
lastButtonState
)
{
/* Tuvastame kui nupu väärtus on muutunud eelmisest korrast */
if
(
btnReadValue
!=
lastButtonState
)
{
/* Uuendame millal viimati nupu olek muutus */
lastDebounceTime
=
millis
();
}
if
((
millis
()
-
lastDebounceTime
)
>
debounceDelay
)
{
if
(
btnReadValue
!=
buttonState
)
{
/* Kui nupu olek on piisavalt kaua olnud stabiilne (muutusteta, ei "võngu") */
if
((
millis
()
-
lastDebounceTime
)
>
debounceDelay
)
{
/* Väldib uue nupuvajutuse saatmise kuniks nupp pole lahti lastud vahepeal */
if
(
btnReadValue
!=
buttonState
)
{
/* Uuendame viimast stabiilset nupu olekut */
buttonState
=
btnReadValue
;
if
(
buttonState
==
HIGH
)
{
return
true
;
}
/* Tagab, et kui nupp on vajutatud, siis tagastatakse HIGH väärtus ehk vajutatud
* Lihtsustatud kujult: if (buttonstate == HIGH) returnVal = HIGH
*/
returnVal
=
buttonState
;
}
}
/* Funktsiooni korduse jaoks vajalik, et tuvastada nupu oleku muutus järgmisel korral */
lastButtonState
=
btnReadValue
;
return
false
;
return
returnVal
;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment