Циклическое включение и выключение.

Arduino users
Offline
Зарегистрирован: 27.03.2018

Есть задача сделать циклическое включение и выключение на двух пинах, не зависимо друг от друга.
Пример:
Включаем светодиод
Ждём 15 секунд
Выключаем светодиод
Ждём 90 секунд
И всё по новой.
Я думал сделать через millis(), но немного не правильно работает.

Arduino users
Offline
Зарегистрирован: 27.03.2018

Arduino users пишет:
Есть задача сделать циклическое включение и выключение на двух пинах, не зависимо друг от друга.
Пример:
Включаем светодиод
Ждём 15 секунд
Выключаем светодиод
Ждём 90 секунд
И всё по новой.
Я думал сделать через millis(), но немного не правильно работает.

Извините, что не приложил код. Смогу только вечером.

b707
Offline
Зарегистрирован: 26.05.2017

Arduino users пишет:
Извините, что не приложил код. Смогу только вечером.

ждем с нетерпением

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017
Я за него выкладу 


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

void loop() {
 digitalWrite(13,HIGH);     // Включаем светодиод
 delay(15000);              // Ждём 15 секунд
 digitalWrite(13,LOW);      // Выключаем светодиод
 delay(90000);              // Ждём 90 секунд
return;                     // И всё по новой.
}

Праильна?  Прям всё как по написаному

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

Думаю, что нет.) "на двух пинах, не зависимо друг от друга".

Arduino users
Offline
Зарегистрирован: 27.03.2018

DetSimen пишет:

Я за него выкладу 


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

void loop() {
 digitalWrite(13,HIGH);     // Включаем светодиод
 delay(15000);              // Ждём 15 секунд
 digitalWrite(13,LOW);      // Выключаем светодиод
 delay(90000);              // Ждём 90 секунд
return;                     // И всё по новой.
}

Праильна?  Прям всё как по написаному


Нужно без delay(), так как это убивает работу мк.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Arduino users пишет:

Нужно без delay(), так как это убивает работу мк.

Православный delay() никаво не убивает

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Думаю, что нет.) "на двух пинах, не зависимо друг от друга".

тогда на двух ардуинах

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

b707 пишет:

Green пишет:

Думаю, что нет.) "на двух пинах, не зависимо друг от друга".

тогда на двух ардуинах

Именно. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, давайте мыслить не в милисекундах (это очень быстро), а в секундах. Каждую секунду мы увеличиваем некую переменную на единицу. Тогда создаем алгоритм:

1) Переменная равна 0 - включаем светодиод

2) Переменная равна 15 - выключаем светодиод

3) Переменная равна (90+15) - обнуляем переменную.

Теперь со счетчиком - например так:

int Takt;
unsigned long lastMillis;

void setup(){
Takt=0;
lastMillis=millis();
}

void loop(){
 if ((millis()-lastMillis)>= 1000) { //стробируем раз в секунду
    lastMillis=millis();
    Takt++;
  }
//А вот тут Ваша программа на основе переменной Takt (можно сделать еще Takt1, Takt2...)
  }

 

Arduino users
Offline
Зарегистрирован: 27.03.2018

mykaida пишет:

Уважаемый, давайте мыслить не в милисекундах (это очень быстро), а в секундах. Каждую секунду мы увеличиваем некую переменную на единицу. Тогда создаем алгоритм:

1) Переменная равна 0 - включаем светодиод

2) Переменная равна 15 - выключаем светодиод

3) Переменная равна (90+15) - обнуляем переменную.

Теперь со счетчиком - например так:

int Takt;
unsigned long lastMillis;

void setup(){
Takt=0;
lastMillis=millis();
}

void loop(){
 if ((millis()-lastMillis)>= 1000) { //стробируем раз в секунду
    lastMillis=millis();
    Takt++;
  }
//А вот тут Ваша программа на основе переменной Takt (можно сделать еще Takt1, Takt2...)
  }

 


Большое спасибо, буду пробовать

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
// 1-й светодиод
const byte led1_pin =/*пин*/13;
bool led1;
unsigned long past1, time1;
void set1(bool s) {
  led1 = s;
  past1 = millis();
  if (led1) {
    digitalWrite(led1_pin, HIGH);
    time1 = 300;
  }
  else {
    digitalWrite(led1_pin, LOW);
    time1 = 800;
  }
}
// 2-й светодиод
const byte led2_pin =/*пин*/12;
bool led2;
unsigned long past2, time2;
void set2(bool s) {
  led2 = s;
  past2 = millis();
  if (led2) {
    digitalWrite(led2_pin, HIGH);
    time2 = 500;
  }
  else {
    digitalWrite(led2_pin, LOW);
    time2 = 1600;
  }
}
//---------------------
void setup() {
  pinMode(led1_pin, OUTPUT);
  set1(false);
  pinMode(led2_pin, OUTPUT);
  set2(false);
}
void loop() {
  if (millis() - past1 >= time1) set1(!led1);
  if (millis() - past2 >= time2) set2(!led2);
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

qwone пишет:

// 1-й светодиод
const byte led1_pin =/*пин*/13;
bool led1;
unsigned long past1, time1;
void set1(bool s) {
  led1 = s;
  past1 = millis();
  if (led1) {
    digitalWrite(led1_pin, HIGH);
    time1 = 300;
  }
  else {
    digitalWrite(led1_pin, LOW);
    time1 = 800;
  }
}
// 2-й светодиод
const byte led2_pin =/*пин*/12;
bool led2;
unsigned long past2, time2;
void set2(bool s) {
  led2 = s;
  past2 = millis();
  if (led2) {
    digitalWrite(led2_pin, HIGH);
    time2 = 500;
  }
  else {
    digitalWrite(led2_pin, LOW);
    time2 = 1600;
  }
}
//---------------------
void setup() {
  pinMode(led1_pin, OUTPUT);
  set1(false);
  pinMode(led2_pin, OUTPUT);
  set2(false);
}
void loop() {
  if (millis() - past1 >= time1) set1(!led1);
  if (millis() - past2 >= time2) set2(!led2);
}

 

Вот Вы, уважаемый, бяке учите начинающих. Ну повторят они программу, ничего не поняв, и что? Опять будут задавать вопросы? Главно, ИМХО, показать им как правильно (алгоритмически) мыслить. А Ваша программа, не умаляя ее достоинств, сложна для начинающего в понимании что и откуда берется и почему работает.

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

Што-то я не понял - а куда классы пропали? Разве можно мигалку без их применения написать?

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

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

// 1-й светодиод
const byte led1_pin =/*пин*/13;
bool led1;
unsigned long past1, time1;
void set1(bool s) {
  led1 = s;
  past1 = millis();
  if (led1) {
    digitalWrite(led1_pin, HIGH);
    time1 = 300;
  }
  else {
    digitalWrite(led1_pin, LOW);
    time1 = 800;
  }
}
// 2-й светодиод
const byte led2_pin =/*пин*/12;
bool led2;
unsigned long past2, time2;
void set2(bool s) {
  led2 = s;
  past2 = millis();
  if (led2) {
    digitalWrite(led2_pin, HIGH);
    time2 = 500;
  }
  else {
    digitalWrite(led2_pin, LOW);
    time2 = 1600;
  }
}
//---------------------
void setup() {
  pinMode(led1_pin, OUTPUT);
  set1(false);
  pinMode(led2_pin, OUTPUT);
  set2(false);
}
void loop() {
  if (millis() - past1 >= time1) set1(!led1);
  if (millis() - past2 >= time2) set2(!led2);
}

 

Сэр когда-нибудь слышал о массивах?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

andriano пишет:

Сэр когда-нибудь слышал о массивах?

Нет, только о классах :)))

З.Ы. Код пуха, конечно, дичь - жёсткое дублирование кода, прям жёсткое такое.

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

Та ладно. Ну не все умеют даже код сдублировать. А некоторые коды даже не дублируются. Массивы городить тут не зачем.Хотя могу и через массивы, но там другая дичь вылезит. Вобщем дичи боятся в лес не ходить код не писать.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

DIYMan пишет:

З.Ы. Код пуха, конечно, дичь - жёсткое дублирование кода, прям жёсткое такое.

та не, намайный квонокод. Тока лямбды не впихнуты. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

Массивы городить тут не зачем.

Ровно до тех пор, пока кому-то не понадобится три кнопки вместо двух.