Помогите доработать код таймера
- Войдите на сайт для отправки комментариев
Сб, 12/05/2018 - 00:36
Всем привет ! Загорелся этими ардуинами и т.п, но в жизни не программировал, а хочется аж кушать не могу. Help!!!. Вопрос по таймеру: Их миллионы в сети, а как реализовать то что нужно не найду. Можно ли доработать код ниже для разных интервалов вкл./выкл? к примеру: Вкл - 2000мс; Выкл - 3000мс ;Вкл - 4000мс ;Выкл - 10000мс и так по кругу. У меня получается только с Delay.. а Millis темный лес. Спасибо!
int ledPin = 3; // the number of the LED pin int ledState = LOW; // ledState used to set the LED unsigned long previousMillis = 0; // will store last time LED was updated long OnTime = 2000; // milliseconds of on-time long OffTime = 3000; // milliseconds of off-time void setup() { // set the digital pin as output: pinMode(ledPin, OUTPUT); } void loop() { // check to see if it's time to change the state of the LED unsigned long currentMillis = millis(); if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime)) { ledState = LOW; // Turn it off previousMillis = currentMillis; // Remember the time digitalWrite(ledPin, ledState); // Update the actual LED } else if ((ledState == LOW) && (currentMillis - previousMillis >= OffTime)) { ledState = HIGH; // turn it on previousMillis = currentMillis; // Remember the time digitalWrite(ledPin, ledState); // Update the actual LED } }
Можно то оно можно, но моя логика не совпадает с логикой программы и в итоге ничего не работает.. в какую сторону копать?
Кому-то придется уступить, раз логика не совпадает...
vadim82, несколько настораживает, что Вы не можете четко сформулировать по-русски, что же Вам на самом деле надо.
Ну ладно, по доработке кода.
Вам нужен конечный автомат. Т.е. программа должна уметь отслеживать текущее состояние и переходить из одного состояния в другое.
Сейчас у Вас состояние описывается логичееской переменной ledState, которая может принимать всего два значения. Поэтому и последовательность действий ограничена двумя интервалами. Заменитье эту переменную целой, которая может принимать большее количество значений. Решите, какое количество состояний Вам нужно, и включите в код переходы между состояниями.
Дальнейшей доработкой может являться перевод логики программы на работу с массивами (полезно при большом количестве состояний).
Спасибо за наводку!!! на форуме нашел топик в тему
Можно то оно можно, но моя логика не совпадает ....
Вы задали вопрос "можно ли ..." и получили на него чёткий и однозначный ответ. Других вопросов Вы в стартовом посте не задавали.