Как заставить мигнуть светодиод 6 раз ?

Sindzy55
Offline
Зарегистрирован: 19.09.2019

Как заставить мигнуть светодиод 6раз?

sadman41
Offline
Зарегистрирован: 19.10.2016

Хорошенько наподдать ему. 

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

sadman41 пишет:

Хорошенько наподдать ему. 

шесть раз )))

/*
  Blink without Delay

  Turns on and off a light emitting diode (LED) connected to a digital pin,
  without using the delay() function. This means that other code can run at the
  same time without being interrupted by the LED code.

  The circuit:
  - Use the onboard LED.
  - Note: Most Arduinos have an on-board LED you can control. On the UNO, MEGA
    and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN
    is set to the correct LED pin independent of which board is used.
    If you want to know what pin the on-board LED is connected to on your
    Arduino model, check the Technical Specs of your board at:
    https://www.arduino.cc/en/Main/Products

  created 2005
  by David A. Mellis
  modified 8 Feb 2010
  by Paul Stoffregen
  modified 11 Nov 2013
  by Scott Fitzgerald
  modified 9 Jan 2017
  by Arturo Guadalupi

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// constants won't change. Used here to set a pin number:
const int ledPin =  LED_BUILTIN;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)
uint8_t n = 0;

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
      if (n > 13) n=73;
      n++;
  
    // if the LED is off turn it on and vice-versa:
    if (n < 13){
    if (ledState == LOW ) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
    }
  }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вроде вчера Вы же спрашивали про сто раз, потом про тысячу. Теперь - про шесть? Или я Вас с кем-то перепутал?

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

заставь сначала светлодиот мигнуть один раз.  Потом повтори шесть раз, сто или тысячу. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
class cl_aaa {
  protected:
    byte pin;
    static const byte sOFF = 0;
    static const byte sBlinkON = 1;
    static const byte sBlinkOFF = 2;
    byte num;
    byte state;
    unsigned long past;
    const unsigned long time = 200;
    void set(byte s) {
      state = s;
      past = millis();
      switch (state) {
        case sBlinkOFF:
          num--; if (num == 0)state = sOFF;
        case sOFF:
          digitalWrite(pin, LOW);
          break;
        case sBlinkON :
          digitalWrite(pin, HIGH);
          break;
      }
    }
  public:
    cl_aaa(byte p): pin(p) {}
    void init() {
      pinMode(pin, OUTPUT);
      set(sOFF);
    }
    void run() {
      if (state == sBlinkOFF && millis() - past >= time)set(sBlinkON);
      if (state == sBlinkON && millis() - past >= time) set(sBlinkOFF);
    }
    void blink(byte n) {
      if (n == 0)return;
      num = n;
      set(sBlinkON);
    }
};
cl_aaa aaa(/*пин*/13);
void setup() {
  aaa.init();
  aaa.blink(/*кол-во*/6);
}
void loop() {
  aaa.run();
}

ПС: https://www.arduino.cn/   для тех кто хочет почитать коллег

И вот фанфик https://www.arduino.cn/thread-83370-1-1.html

sadman41
Offline
Зарегистрирован: 19.10.2016

Там, где справится простой цикл, найдется место и целому классу с лямбдами.

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

Ну дак, чтение фанфиков надо ж отрабатывать. 

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

Щас нам квон расскажет, что такое ИГО )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Там, где справится простой цикл, найдется место и целому классу с лямбдами.

Пихаем же мы микроконтроллер туда, где достаточно конденсатора.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Секта мигания диодов (иеговых?)!)) Пора ясли открывать, если такое в песочнице выплывает. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Квон , ты в серьез думаешь, что чел, который не может диодом мигать , будет твои классы читать? Каждый раз улыбает. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

MaksVV пишет:

Квон , ты в серьез думаешь, что чел, который не может диодом мигать , будет твои классы читать? Каждый раз улыбает. 

MaksVV, ты всерьез думаешь что Солнце встает и садится по твоему желанию. При чем тут желание ТС. Я просто написал потому что у меня левая нога захотела.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

архатушка обещал, что форум без него загнется, но не смог выполнить свое обещание...

удалите тему, все чище будет.

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

Подсказку можно?
for (uint8_t i = 0; i < 6 * 2; i++) {
  toggle(LED);
  delay(500);
}

anatoli_nik
Offline
Зарегистрирован: 17.01.2019

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

Green пишет:

Подсказку можно?
for (uint8_t i = 0; i < 6 * 2; i++) {
  toggle(LED);
  delay(500);
}

не катит - блокирующая )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

не катит - блокирующая )))

А где у ТС требования к неблокированию? 

Вполне катит - не придирайтесь.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

P3.2 — данный режим срабатывает сразу после подачи питания на реле,
при этом реле сразу переходит в замкнутый режим,
отсчитывает время указанное для замкнутого режима OP,
после этого реле размыкается
и начинается отсчет времени указанного для разомкнутого режима CL,
всё это повторяется указанное в параметре LOP количество раз,
если указана бесконечность (---), то реле будет повторять эти действия бесконечно.

https://www.aliexpress.com/item/32929371913.html
1 доллар и 81 цент.

https://mysku.ru/blog/china-stores/75331.html

Не благодарите.......

P.S.
Есть вариант с реле на выходе:
https://www.aliexpress.com/item/32886442682.html
2.42 USD
Правда говорят что если его питать от 30 Вольт то при включённом реле докрасна разогревается стабилизатор.

Ну и для любителей ЖКИ индикаторов:

https://www.aliexpress.com/item/32956067846.html

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

ЕвгенийП пишет:

ua6em пишет:

не катит - блокирующая )))

А где у ТС требования к неблокированию? 

Вполне катит - не придирайтесь.

так пример блинка не блокирующего уже привёл жеж, там правда цифры 6 нету, но у ТС и вопросов нет, а мигает как и заказывали ровно  шесть раз, GREEN привёл пример на уровне спустя рукава, это же не его стиль )))

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

ua6em пишет:
GREEN привёл пример на уровне спустя рукава...

Ну-к... Значит не справился.(

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

Green пишет:

ua6em пишет:
GREEN привёл пример на уровне спустя рукава...

Ну-к... Значит не справился.(

ты не можешь не справиться, здесь что-то другое )))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Пятница сказалась))))

Dessan
Offline
Зарегистрирован: 04.09.2019

Мне интересно, ТС (я так понимаю Task Creator) мигнул своим светодиодом?

Код Qwone по миганию светодиодом через классы просто шикарен

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

квонокод сам по себе шикарен.  абразецъ. 

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

Dessan пишет:

Мне интересно, ТС мигнул своим светодиодом?

видимо нужда отпала...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

нет, я за него мигнул.

nupaT
Offline
Зарегистрирован: 09.05.2019

Все-таки решил написать код для сигнала SOS с помощью функции, потом просто вызываем ее с определенными параметрами для тире и точки. Когда вызываю только одну функцию morze(150,150) она отрабатывает и останавливается. Но если вызываю как в коде - зацикливается только на первом вызове и не переходит ко второму. Подскажите что не так? З.Ы. ну и да без delay() ессна задачу себе поставил.

int ledPin = 11;
unsigned long temp = 0;
bool ledLevel = 0;
int i = 0;

void setup() 
{
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  morze(150,150);
  i = 0;
  morze(150,1000);
  i = 0;
  morze(150,150);
  i = 0;
}

void morze (unsigned long durationLOW, unsigned long durationHIGH) 
{
  unsigned long currTime = millis();
  if(i < 6)
  {
    if(ledLevel == LOW && (currTime - temp >= durationLOW))   //время пока светодиод не горит
    {
      temp = currTime;
      ledLevel = HIGH; 
      i++;
    }
    else 
    {
      if(ledLevel == HIGH && (currTime - temp >= durationHIGH))   //время пока светодиод горит
      {
        temp = currTime;
        ledLevel = LOW;
        i++;
      }  
    }
    digitalWrite(ledPin, ledLevel);
 
  }
return;          //надо ли?
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У Вас все переменные глобальны, так чего Вы хотите? Функция morse считает, что переменные temp, i и ledLevel будут сохраняться между вызовами функции. А Вы вызываете её три раза с разными параметрами. Разумеется, каждый новый вызов загаживает переменные, важные для предыдущего вызова.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Евгений опередил))

Короче, нужно продумать другие маркеры. 

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

а универсальный чем не подходит?

nupaT
Offline
Зарегистрирован: 09.05.2019

Это для самообучения. Я мог просто воспользоваться библиотекой уже написанной при тиранозаврах. А здесь хочу разобраться, что я делаю не так. Про флаги подсказали - да мысль была, теперь думаю над этим.

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

Ну... Вы бы обдумали кодировку сначала, затем как её воспроизводить, затем как с ней работать. Например, morse("sos"); Ну чем плохо? А то галиматню какую то лепите.(

 

astwo
Offline
Зарегистрирован: 10.07.2019

Если вам подскажут про цифровые автоматы, то это поможет отцу русской демократии.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nupaT пишет:

Это для самообучения ... хочу разобраться, что я делаю не так. 

Я Вам уже сказал, что

ЕвгенийП пишет:

У Вас все переменные глобальны

Новых вопросов пока не поступало. Уже разобрались? Или вопросы будут позже? Если будут - задавайте.

nupaT
Offline
Зарегистрирован: 09.05.2019

Нет, пока не разобрался. Если переменные объявлять в самой функции, то светодиод просто горит и все (хотя как по мне должно работать) пока думаю над флагами и обнулением глобальных переменных перед каждым вызовом. Других вариантов в голову не приходит.

astwo
Offline
Зарегистрирован: 10.07.2019

Вот и получается что переменные должны лежать глобально в локальных областях. Фактически Вы не знаете анатомию будущей свой программы и органы=компоненты этой же программы. Фактически к написанию программы Вы не готовы.

nupaT
Offline
Зарегистрирован: 09.05.2019

Да, я вначале пути. А те уроки что помигать с delay(), весьма поверхностно объясняют суть. Вот и спросил тут, ответы есть, куда смотреть понял.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

nupaT пишет:

Если переменные объявлять в самой функции, то светодиод просто горит и все

Правильно. Потому, что ему нужно сохранять значения этих переменных, а у локальных они не сохраняются.

nupaT пишет:

пока думаю над флагами и обнулением глобальных переменных перед каждым вызовом. 

Нахрена их обновлять, если они должны сохранять значения?

nupaT пишет:

 Других вариантов в голову не приходит.

А Вы попробуйте думать не в терминах переменных, в которых Вы ничерта не понимаете, а терминах своей задачи. Сначала продумайте задачу так, чтобы она работала, а только потом начинайте думать как туда переменные натянуть. Играйте на своём поле, а не на чужом. Так легче выиграть.

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

кстати в loop у вас не SOS а R

nupaT
Offline
Зарегистрирован: 09.05.2019

Не соглашусь, сама функция выполняет 3 мигания. Но это лирика.

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

nupaT пишет:

Не соглашусь, сама функция выполняет 3 мигания. Но это лирика.

функция морзе ни разу не реентерабельна, значит заблуждаетесь

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:
ни разу не реентерабельна

https://www.youtube.com/watch?v=fc3K9_mwh4Q

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

ЕвгенийП пишет:

ua6em пишет:
ни разу не реентерабельна

https://www.youtube.com/watch?v=fc3K9_mwh4Q

что так, ведь правда жеж?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, слово-то точно неприличное. Нет, что ли?

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

ЕвгенийП пишет:

Ну, слово-то точно неприличное. Нет, что ли?

и не больше и не меньше )))
Мне тут Дед помогал в реализации маяка, на его библиотеке таймеров, код неблокирующий, так и не добили сбои при правильном применении таймеров, а вот если чуток неправильно, то работает великолепно. Дед сдался. Говорил, что Гуру должны посмотреть чего сбоит. А у ТС мы видим в коде полный хаос и, любимое выражение считающей себя астрологом Василисы Володиной - апломб )))

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

Нада добить. 

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

это представляешь сколько придётся мне в CW слушать себя любимого )))

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

Ну, я не настаиваю

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

DetSimen пишет:

Ну, я не настаиваю

да нормально всё, уже и зуммер нашёл, припаять осталось )))

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

Смари, если чо.  А то я скоро покину земную юдоль, сам будешь бицца. :)