Многозадачность Arduino
- Войдите на сайт для отправки комментариев
Задача такая: Нужно выполнять все действия отдельно друг от друга.
1 действие – мигание светодиодом раз в 2с
2 действие – мигание светодиодом раз в 5с
3 действие - чтобы шел отсчет времени(не через модуль реального времени, а просто написанный скрипт иммитирующий тоже самое, нашел в интернете)
В скетче с таймером, в середине кода, есть delay на 1 секунду для работы часов, пробовал убирать через код который ниже, получается вообще неразбериха)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Вот код для выполнения действий без задержек, но у меня не получилось что я хотел.
unsigned long currentMillis = millis(); if (currentMillis - previousMillis > interval) { previousMillis = currentMillis; }
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Может какие библиотеки есть, или без них есть способы? Естественно что вместо мигания светодиодом у меня насыщенный скетч, где:
1 действие – работа от ик пульта и полностью управление домом
2 действие – считывание данных с датчика
3 действие – таймер реального времени
Если в 1 действии начинаю что то делать, то часы сразу сбиваются и все.
Ниже СКЕТЧ для примера
//=============Настройка для часов int h = 17; int m = 57; int s = 00; int flag; int TIME; const int hs = 8; const int ms = 9; int state1; int state2; //=========== Настройка номера выводов const int LED1 = 6; const int LED2 = 5; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); Serial.begin(9600); } void loop() { //Действие 3 //=====ЗАПУСК ВИРТУАЛЬНЫХ РЕАЛЬНЫХ ЧАСОВ ========= s = s + 1; Serial.print("TIME: "); Serial.print(h); Serial.print(":"); Serial.print(m); Serial.print(":"); Serial.println(s); if (flag < 12) //Serial.print(" AM"); if (flag == 12) //Serial.print(" PM"); if (flag > 12) //Serial.print(" PM"); if (flag == 24)flag = 0; delay(1000); //от этого нужно избавиться, но чтобы часы продолжали работать. if (s == 60) { s = 0; m = m + 1; } if (m == 60) { m = 0; h = h + 1; flag = flag + 1; } if (h == 13) { h = 1; } //-------Time // setting-------// state1 = digitalRead(hs); if (state1 == 1) { h = h + 1; flag = flag + 1; if (flag < 12) //Serial.print(" AM"); if (flag == 12) //Serial.print(" PM"); if (flag > 12) //Serial.print(" PM"); if (flag == 24)flag = 0; if (h == 13)h = 1; } state2 = digitalRead(ms); if (state2 == 1) { s = 0; m = m + 1; } //Действие 1 //============================================= digitalWrite(LED1, HIGH); delay(1000); digitalWrite(LED1, LOW); //Действие 2 //======================================== digitalWrite(LED2, HIGH); delay(4000); digitalWrite(LED2, LOW); } // закрытие loop
Вы свой первый фрагмент кода приведите в коротком скетче с сетапом и лупом. Причина, в принципе, понятна, но надо чтобы вы сами ее увидели.
И ставьте фигурные скобки во всех if()-ах. Во втором фрагменте вы себе наложили лепех коровьих по всему коду.
Может какие библиотеки есть, или без них есть способы?
Отвечу на поставленный вопрос. Да библиотеки конечно есть, при каждом универе, в каждом крупном городе. Без них оно тоже можна, много разных способов, хотяб этот же форум почитать где такие же деби... начинающие, которым впадл... неохота ниче разбиратся, уже сотню раз пытались притянуть сюда свой недоопыт веб-верстал.. програмиста и, вынести мозг форуму в очередной раз. Пора банить за делей 1000 и многозадачность для борьбы с ним!
Задача такая: Нужно выполнять все действия отдельно друг от друга.
1 действие – мигание светодиодом раз в 2с
2 действие – мигание светодиодом раз в 5с
3 действие - чтобы шел отсчет времени(не через модуль реального времени, а просто написанный скрипт иммитирующий тоже самое, нашел в интернете)
В скетче с таймером, в середине кода, есть delay на 1 секунду для работы часов, пробовал убирать через код который ниже, получается вообще неразбериха)
Может какие библиотеки есть, или без них есть способы? Естественно что вместо мигания светодиодом у меня насыщенный скетч, где:
1 действие – работа от ик пульта и полностью управление домом
2 действие – считывание данных с датчика
3 действие – таймер реального времени
Ннада таймеров? Их есть у меня https://github.com/DetSimen/Arduino-