Поморгать светодиодами без подзатыльника

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

Здрассте. старшие по разуму!

Какова вероятность за поморгать лампочками получить подзатыльник (насколько оправдано использование логический функций в моем примере кода) или такой код имеет место быть?

if (digitalRead(limitswitchhead) == LOW && lastButton == true){
    papersensor();
}

void papersensor(){
    timer = true;
    led2OnTime = millis();
    timeOff = 300000;
    timeOff2 = 1200;
  if(timer){
    if (millis() - led2OnTime >= 7000){
      digitalWrite(papersensor1, HIGH);
      digitalWrite(papersensor2, LOW);
      led2On = true;
      led1On = true;
      led2OnTime = millis();
  }
        timer  = false;
}
  if(led1On){
    if(millis() - led2OnTime >= timeOff2) {
      digitalWrite(papersensor1, LOW);
      led1On = false;
    }
  }

  if(led2On){
    if(millis() - led2OnTime >= 200) {
      digitalWrite(papersensor2, HIGH);
      if(millis() - led2OnTime >= timeOff) {
      digitalWrite(papersensor2, LOW);
      }
    }
    led2On = false;
  }
}

 

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

Это счетчик туалетной бумаги?

Как Вы сами это понимаете без комментариев?

 

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

Код приведён не полностью, поэтому половина интересного от нас скрыта.

Но даже в том, что не скрыто ....

Ну, например, в строке №6 переменной timer присваивается true. А в строке №10 проверяется чему она равна ( if(timer) ). Внимание, вопрос: НАФИГА? Можете ответить? Чему она по Вашему там может быть равна? 

(если она таки волатильная и может быть изменена в прерывании, то ещё раз вопрос - какого хрена код выложен не полностью?)

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Код неполный и плохо отформатированный.

По этому куску. В чём смысл флага timer?

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

Ранее не было процедуры papersensor. И чтобы цикл не повторился включения лампочек я использовал флажки. Вопрос если сейчас я уберу timer led1on led2on. Оставив только условия миллис. Как мне грамотно прервать процедуру. Дополнительным флажком? Или использовать do.. while. Чтобы выполнить один раз хотя бы все условия миллис а затем в while добавить условие прерывания.

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

А зачем вы переписали часть этого кода в отдельную функцию? Вы будете использовать эту функцию многократно в коде?

И своими словами можете написать, чего вы хотите добиться то? Может как сформулируете словами и Вам понятнее будет. И люди Вам что посоветуют.

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

При условии limitswitchhead и lastbutton необходимо поморгать светодиодами это симуляция сигнала датчика По истечению таймера timeoff2 два вся процедура papersensor должна прерваться либо эта процедура вся должна прерваться при выполнении другого условия то есть к примеру срабатывания концевика. И активировать снова при первом условии ...head и lastbutton

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

Это проект планшетного принтера то есть при выполнении определенных условиях движения головки примеру принтера lastbutton загорается симуляции датчика бумаги и они выполняются по таймингу там максимальный тайминг 30000 миллисекунд и вот эта процедура выполняется и также она может прерваться в случае если заполнение листа неполное при печати он выстреливает бумагу принтер и срабатывает концевик Тоесть процедура тоже закрывается и симуляция датчиков бумаги тоже прекращается. Надеюсь правильно объяснил

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

limitswitchhead это же и есть сигнал с концевика? Т.е. строка 01 и управляет "морганием"? Что тогда работает не так с этим кодом?

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

...head запускает процедуру прерывать ее должно второй концевик или если таймер миллис пройдёт определённое значение timeoff

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Второй где в коде?

Посмотрите ещё вот эту статью http://arduino.ru/tutorials/BlinkWithoutDelay.

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

AndreyD пишет:

Второй где в коде?

Посмотрите ещё вот эту статью http://arduino.ru/tutorials/BlinkWithoutDelay.


Второй пока не прописал не знаю как грамотно сделать прерывание по условию данной процедуры papersensor

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

Arduinchlk пишет:
я использовал флажки. Вопрос если сейчас я уберу timer led1on led2on. Оставив только условия миллис. Как мне грамотно

Ничего Вы не использовали. Прежде чем писать тут много всего, ответьте на мой вопрос "нафига" из поста #2 - пока Вы на него не ответите, Вы ничерта не поймёте в "своём" коде и говорить дальше просто не о чем, т.к. Вы просто не понимаете что такое флажки и как их используют. И, кстати, приводите код полностью. Смотреть на огрызки и додумывать что Вы там ещё написали ... в общем, полностью.

Arduinchlk
Arduinchlk аватар
Offline
Зарегистрирован: 15.03.2021

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

Arduinchlk пишет:
я использовал флажки. Вопрос если сейчас я уберу timer led1on led2on. Оставив только условия миллис. Как мне грамотно

Ничего Вы не использовали. Прежде чем писать тут много всего, ответьте на мой вопрос "нафига" из поста #2 - пока Вы на него не ответите, Вы ничерта не поймёте в "своём" коде и говорить дальше просто не о чем, т.к. Вы просто не понимаете что такое флажки и как их используют. И, кстати, приводите код полностью. Смотреть на огрызки и додумывать что Вы там ещё написали ... в общем, полностью.


Выложу полностью завтра. Комментировать код?

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

Arduinchlk пишет:
Комментировать код?

Встречный вопрос: а Вы хотите, чтобы его кто-то читал?

isupov_andrey
Offline
Зарегистрирован: 21.08.2021
DDRB = (1<<0);
    while(1){
        PORTB ^= (1<<0);
        delay(1000);
    }

 

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

Arduinchlk пишет:
Комментировать код?
Как хотите. Проблема у Вас, а не у меня, так что мне всё равно. Можете ничего и не выкладывать.

Кстати, а ответ на вопрос таки будет? Я уже третий раз спрашиваю. Или Вы намерены игнорировать всё, кроме собственных постов?