/*
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);
}
}
}
Квон , ты в серьез думаешь, что чел, который не может диодом мигать , будет твои классы читать? Каждый раз улыбает.
MaksVV, ты всерьез думаешь что Солнце встает и садится по твоему желанию. При чем тут желание ТС. Я просто написал потому что у меня левая нога захотела.
P3.2 — данный режим срабатывает сразу после подачи питания на реле,
при этом реле сразу переходит в замкнутый режим,
отсчитывает время указанное для замкнутого режима OP,
после этого реле размыкается
и начинается отсчет времени указанного для разомкнутого режима CL,
всё это повторяется указанное в параметре LOP количество раз,
если указана бесконечность (---), то реле будет повторять эти действия бесконечно.
P.S.
Есть вариант с реле на выходе: https://www.aliexpress.com/item/32886442682.html
2.42 USD
Правда говорят что если его питать от 30 Вольт то при включённом реле докрасна разогревается стабилизатор.
так пример блинка не блокирующего уже привёл жеж, там правда цифры 6 нету, но у ТС и вопросов нет, а мигает как и заказывали ровно шесть раз, GREEN привёл пример на уровне спустя рукава, это же не его стиль )))
Все-таки решил написать код для сигнала 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; //надо ли?
}
У Вас все переменные глобальны, так чего Вы хотите? Функция morse считает, что переменные temp, i и ledLevel будут сохраняться между вызовами функции. А Вы вызываете её три раза с разными параметрами. Разумеется, каждый новый вызов загаживает переменные, важные для предыдущего вызова.
Это для самообучения. Я мог просто воспользоваться библиотекой уже написанной при тиранозаврах. А здесь хочу разобраться, что я делаю не так. Про флаги подсказали - да мысль была, теперь думаю над этим.
Ну... Вы бы обдумали кодировку сначала, затем как её воспроизводить, затем как с ней работать. Например, morse("sos"); Ну чем плохо? А то галиматню какую то лепите.(
Нет, пока не разобрался. Если переменные объявлять в самой функции, то светодиод просто горит и все (хотя как по мне должно работать) пока думаю над флагами и обнулением глобальных переменных перед каждым вызовом. Других вариантов в голову не приходит.
Вот и получается что переменные должны лежать глобально в локальных областях. Фактически Вы не знаете анатомию будущей свой программы и органы=компоненты этой же программы. Фактически к написанию программы Вы не готовы.
Если переменные объявлять в самой функции, то светодиод просто горит и все
Правильно. Потому, что ему нужно сохранять значения этих переменных, а у локальных они не сохраняются.
nupaT пишет:
пока думаю над флагами и обнулением глобальных переменных перед каждым вызовом.
Нахрена их обновлять, если они должны сохранять значения?
nupaT пишет:
Других вариантов в голову не приходит.
А Вы попробуйте думать не в терминах переменных, в которых Вы ничерта не понимаете, а терминах своей задачи. Сначала продумайте задачу так, чтобы она работала, а только потом начинайте думать как туда переменные натянуть. Играйте на своём поле, а не на чужом. Так легче выиграть.
и не больше и не меньше )))
Мне тут Дед помогал в реализации маяка, на его библиотеке таймеров, код неблокирующий, так и не добили сбои при правильном применении таймеров, а вот если чуток неправильно, то работает великолепно. Дед сдался. Говорил, что Гуру должны посмотреть чего сбоит. А у ТС мы видим в коде полный хаос и, любимое выражение считающей себя астрологом Василисы Володиной - апломб )))
Хорошенько наподдать ему.
Хорошенько наподдать ему.
шесть раз )))
Вроде вчера Вы же спрашивали про сто раз, потом про тысячу. Теперь - про шесть? Или я Вас с кем-то перепутал?
заставь сначала светлодиот мигнуть один раз. Потом повтори шесть раз, сто или тысячу.
ПС: https://www.arduino.cn/ для тех кто хочет почитать коллег
И вот фанфик https://www.arduino.cn/thread-83370-1-1.html
Там, где справится простой цикл, найдется место и целому классу с лямбдами.
Ну дак, чтение фанфиков надо ж отрабатывать.
Щас нам квон расскажет, что такое ИГО )))
Там, где справится простой цикл, найдется место и целому классу с лямбдами.
Пихаем же мы микроконтроллер туда, где достаточно конденсатора.
Секта мигания диодов (иеговых?)!)) Пора ясли открывать, если такое в песочнице выплывает.
Квон , ты в серьез думаешь, что чел, который не может диодом мигать , будет твои классы читать? Каждый раз улыбает.
Квон , ты в серьез думаешь, что чел, который не может диодом мигать , будет твои классы читать? Каждый раз улыбает.
архатушка обещал, что форум без него загнется, но не смог выполнить свое обещание...
удалите тему, все чище будет.
Подсказку можно?
for (uint8_t i = 0; i < 6 * 2; i++) {
toggle(LED);
delay(500);
}
Подсказку можно?
for (uint8_t i = 0; i < 6 * 2; i++) {
toggle(LED);
delay(500);
}
не катит - блокирующая )))
не катит - блокирующая )))
А где у ТС требования к неблокированию?
Вполне катит - не придирайтесь.
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
не катит - блокирующая )))
А где у ТС требования к неблокированию?
Вполне катит - не придирайтесь.
так пример блинка не блокирующего уже привёл жеж, там правда цифры 6 нету, но у ТС и вопросов нет, а мигает как и заказывали ровно шесть раз, GREEN привёл пример на уровне спустя рукава, это же не его стиль )))
Ну-к... Значит не справился.(
Ну-к... Значит не справился.(
ты не можешь не справиться, здесь что-то другое )))
Пятница сказалась))))
Мне интересно, ТС (я так понимаю Task Creator) мигнул своим светодиодом?
Код Qwone по миганию светодиодом через классы просто шикарен
квонокод сам по себе шикарен. абразецъ.
Мне интересно, ТС мигнул своим светодиодом?
видимо нужда отпала...
нет, я за него мигнул.
Все-таки решил написать код для сигнала SOS с помощью функции, потом просто вызываем ее с определенными параметрами для тире и точки. Когда вызываю только одну функцию morze(150,150) она отрабатывает и останавливается. Но если вызываю как в коде - зацикливается только на первом вызове и не переходит ко второму. Подскажите что не так? З.Ы. ну и да без delay() ессна задачу себе поставил.
У Вас все переменные глобальны, так чего Вы хотите? Функция morse считает, что переменные temp, i и ledLevel будут сохраняться между вызовами функции. А Вы вызываете её три раза с разными параметрами. Разумеется, каждый новый вызов загаживает переменные, важные для предыдущего вызова.
Евгений опередил))
Короче, нужно продумать другие маркеры.
а универсальный чем не подходит?
Это для самообучения. Я мог просто воспользоваться библиотекой уже написанной при тиранозаврах. А здесь хочу разобраться, что я делаю не так. Про флаги подсказали - да мысль была, теперь думаю над этим.
Ну... Вы бы обдумали кодировку сначала, затем как её воспроизводить, затем как с ней работать. Например, morse("sos"); Ну чем плохо? А то галиматню какую то лепите.(
Если вам подскажут про цифровые автоматы, то это поможет отцу русской демократии.
Это для самообучения ... хочу разобраться, что я делаю не так.
Я Вам уже сказал, что
У Вас все переменные глобальны
Новых вопросов пока не поступало. Уже разобрались? Или вопросы будут позже? Если будут - задавайте.
Нет, пока не разобрался. Если переменные объявлять в самой функции, то светодиод просто горит и все (хотя как по мне должно работать) пока думаю над флагами и обнулением глобальных переменных перед каждым вызовом. Других вариантов в голову не приходит.
Вот и получается что переменные должны лежать глобально в локальных областях. Фактически Вы не знаете анатомию будущей свой программы и органы=компоненты этой же программы. Фактически к написанию программы Вы не готовы.
Да, я вначале пути. А те уроки что помигать с delay(), весьма поверхностно объясняют суть. Вот и спросил тут, ответы есть, куда смотреть понял.
Если переменные объявлять в самой функции, то светодиод просто горит и все
Правильно. Потому, что ему нужно сохранять значения этих переменных, а у локальных они не сохраняются.
пока думаю над флагами и обнулением глобальных переменных перед каждым вызовом.
Нахрена их обновлять, если они должны сохранять значения?
Других вариантов в голову не приходит.
А Вы попробуйте думать не в терминах переменных, в которых Вы ничерта не понимаете, а терминах своей задачи. Сначала продумайте задачу так, чтобы она работала, а только потом начинайте думать как туда переменные натянуть. Играйте на своём поле, а не на чужом. Так легче выиграть.
кстати в loop у вас не SOS а R
Не соглашусь, сама функция выполняет 3 мигания. Но это лирика.
Не соглашусь, сама функция выполняет 3 мигания. Но это лирика.
функция морзе ни разу не реентерабельна, значит заблуждаетесь
https://www.youtube.com/watch?v=fc3K9_mwh4Q
https://www.youtube.com/watch?v=fc3K9_mwh4Q
что так, ведь правда жеж?
Ну, слово-то точно неприличное. Нет, что ли?
Ну, слово-то точно неприличное. Нет, что ли?
и не больше и не меньше )))
Мне тут Дед помогал в реализации маяка, на его библиотеке таймеров, код неблокирующий, так и не добили сбои при правильном применении таймеров, а вот если чуток неправильно, то работает великолепно. Дед сдался. Говорил, что Гуру должны посмотреть чего сбоит. А у ТС мы видим в коде полный хаос и, любимое выражение считающей себя астрологом Василисы Володиной - апломб )))
Нада добить.
это представляешь сколько придётся мне в CW слушать себя любимого )))
Ну, я не настаиваю
Ну, я не настаиваю
да нормально всё, уже и зуммер нашёл, припаять осталось )))
Смари, если чо. А то я скоро покину земную юдоль, сам будешь бицца. :)