Помогите пожалуйста, не могу разобраться с кодом.
- Войдите на сайт для отправки комментариев
Ср, 25/08/2021 - 18:52
Здравствуйте, я новичок в пользовании Ардуино, решил написать код, чтобы при нажатии тактовой кнопки моргал светодиод, при повторном отключался, с выключателем работает, а с кнопкой не так, как нужно.
Вот мой код, который писал
01 | void setup () { |
02 | pinMode(3, OUTPUT); |
03 | pinMode(13, INPUT) ; |
04 | } |
05 |
06 | |
07 | uint32_t ms, ms1 = 0; |
08 | bool led_stat = true ; |
09 |
10 | void loop () { |
11 | if (digitalRead(13) == 1) { |
12 | ms = millis(); |
13 | if ( ( ms - ms1 ) > 500 || ms < ms1 ){ |
14 | ms1 = ms; |
15 | digitalWrite(3, led_stat); |
16 | led_stat = !led_stat; |
17 | } |
18 |
19 | |
20 | |
21 | |
22 | |
23 | } |
24 | } |
Лучше, наоборот, читай с 3 ноги, зажигай 13-ю
И скажи мне, когда наступит тот мифический случай в условии
if
( ( ms - ms1 ) > 500 || ms < ms1 )
когда ms будет меньше ms1? Видимо, когда millis взад пойдёт?
Да это просто не мой код, скопировал, вставил про милес, дальше доделывал
но оно работает, каждые полсекунды зажигает
но оно работает, каждые полсекунды зажигает
а вот так попробуй, кнопка на 3 пине, лед на плате
01
int
LED = 13;
02
int
BUTTON = 3;
03
bool
flag_blink = 0;
04
uint32_t old_millis;
05
06
void
setup
() {
07
pinMode(LED, OUTPUT);
08
pinMode(BUTTON, INPUT_PULLUP);
09
old_millis = 0;
10
digitalWrite(LED, LOW);
11
}
12
13
void
blinks(
int
my_led)
14
{
15
// Здесь процедурка моргания
16
if
(millis() - old_millis >=200)
17
{
18
digitalWrite(my_led,!digitalRead(my_led));
19
old_millis = millis();
20
}
21
22
}
23
24
void
button(
int
my_button,
int
my_led)
25
{
26
// Здесь процедура обработки кнопки
27
if
(!digitalRead(BUTTON))
// нажали
28
{
29
flag_blink = !flag_blink;
30
delay(100);
// защита от дребезга контактов
31
old_millis = millis();
32
}
33
if
(!flag_blink)digitalWrite(my_led, LOW);
34
}
35
36
void
loop
() {
37
button(BUTTON, LED);
38
if
(flag_blink) blinks(LED);
39
}
Вот мой код, который писал
Да это просто не мой код, скопировал, вставил про милес, дальше доделывал
Понятненько
Спасибо, но не работает, но я уже нашёл решение и моргать при помощи таймеров
И скажи мне, когда наступит тот мифический случай в условии
if
( ( ms - ms1 ) > 500 || ms < ms1 )
когда ms будет меньше ms1? Видимо, когда millis взад пойдёт?
Через 50 суток же! А тогда и блинк может быть короче предыдущих... Как то не аккуратненько!)
А, так это фича такая. Прости, ТС, что я влез.