Помогите пожалуйста, не могу разобраться с кодом.

MNXA
Offline
Зарегистрирован: 25.08.2021

Здравствуйте, я новичок в пользовании Ардуино, решил написать код, чтобы при нажатии тактовой кнопки моргал светодиод, при повторном отключался, с выключателем работает, а с кнопкой не так, как нужно.

Вот мой код, который писал

01void setup() {
02  pinMode(3, OUTPUT);
03  pinMode(13, INPUT) ;
04}
05 
06             
07uint32_t ms, ms1 = 0;
08bool led_stat    = true;
09 
10void 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}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Лучше, наоборот, читай с 3 ноги, зажигай 13-ю

И скажи мне, когда наступит тот мифический случай в условии 

if( ( ms - ms1 ) > 500 || ms < ms1 )

когда ms будет меньше ms1?  Видимо, когда millis взад пойдёт?

MNXA
Offline
Зарегистрирован: 25.08.2021

Да это просто не мой код, скопировал, вставил про милес, дальше доделывал

MNXA
Offline
Зарегистрирован: 25.08.2021

но оно работает, каждые полсекунды зажигает

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

MNXA пишет:

но оно работает, каждые полсекунды зажигает

а вот так попробуй, кнопка на 3 пине, лед на плате

01int LED = 13;
02int BUTTON = 3;
03bool flag_blink = 0;
04uint32_t old_millis;
05 
06void setup() {
07  pinMode(LED, OUTPUT);
08  pinMode(BUTTON, INPUT_PULLUP);
09  old_millis = 0;
10  digitalWrite(LED, LOW);
11}
12 
13void 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 
24void 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 
36void loop() {
37  button(BUTTON, LED);
38  if (flag_blink) blinks(LED);
39}

 

rkit
Offline
Зарегистрирован: 23.11.2016

MNXA пишет:

Вот мой код, который писал

MNXA пишет:

Да это просто не мой код, скопировал, вставил про милес, дальше доделывал

Понятненько

MNXA
Offline
Зарегистрирован: 25.08.2021

Спасибо, но не работает, но я уже нашёл решение и моргать при помощи таймеров

 

Green
Offline
Зарегистрирован: 01.10.2015

DetSimen пишет:

И скажи мне, когда наступит тот мифический случай в условии 

if( ( ms - ms1 ) > 500 || ms < ms1 )

когда ms будет меньше ms1?  Видимо, когда millis взад пойдёт?


Через 50 суток же! А тогда и блинк может быть короче предыдущих... Как то не аккуратненько!)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Green пишет:
Через 50 суток же!

А, так это фича такая. Прости, ТС, что я влез.