millis() c начала выполняет, а потом ведет отсчет...

Denis_Din
Offline
Зарегистрирован: 24.12.2019

Всем привет!

Блин уже бошку сломал себе... 

Задержки делаю типа: 

if (a==1) {
if (millis()-tim>1000){tim = millis(); Serial.println("Да заработай же ты, падла!");}
}

Соответственно, печать в монитор осуществляется сразу же как только а=1, а затем уже с задержкой в 1 секунду печатает дальше.

Мне же нужно, что бы при а=1 с начала отсчитывался интервал 1с, а затем выполнялась печать.

Крутил, вертел эту функцию. В одной конструкции она работает, в  другой - нет. блллл.

Подскажите что не так!

 

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

Ну, присвойте своему tim текущее значение миллиса в тот момент, когда а впервые единицей становится. Делов-то.

Вообще, непонятно. Вы девочка? Если нет, то нашли от чего голову ломать! У нормального мужика крыша может поехать только от двух вещей, и дурацких ошибок работы с миллисом среди этих вещей нет.

Denis_Din
Offline
Зарегистрирован: 24.12.2019

Это типа так сделать что ли?

if (a==1) {tim = millis();
if (millis()-tim>1000){tim = millis(); Serial.println("Да заработай же ты, падла!");}
}

Какой в этом смысл?

Вот мой кусок кода который работает (с начала отсчитывается пауза, а затем выполняется действие):

 if (timer_10==1) { 
         bar++;
         if (bar>87) {bar=0;}
         display.fillRect (16,21,90,15,0);
         display.fillRect (17,22, bar,13,1);
     
         if (millis()-tim>7000){tim = millis();IK_write=0; timer_10=0;}
 }

Это по сути шкала загрузки на время работы которой делается пауза (7 сек), а затем закрывается окно.

Но мне нужно сделать паузу после заполнения шкалы на 100%, вывести сообщение и закрыть окно.

Вот такой кусок кода уже не работает (с начала выполняется действие - затем отсчитывается пауза):

     if (timer_10==1) { 
         bar++;
         int y=0;
         display.fillRect (16,21,90,15,0);
         display.fillRect (17,22, bar,13,1);
         if (bar>87) {bar=0;y=1;}
         if (y==1){display.fillRect(5,16,120,48,1); display.print ("Сохранено!");
         if (millis()-tim>7000){tim = millis(); 
         IK_write=0; timer_10=0; y=0;}}
      }

P\S: Евгений, с аватаром поросенка, я читал тут много тем с вашим участием и наглядно осведомлен о вашем нраве поговорить ни о чем и о космосе)) Посему предлагаю не развивать сторонние от топика темы (мальчик, девочка, настоящий мужик и т. д. и т. п.). Спасибо!))

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

Вот в эту строку:

if (bar>87) {bar=0;y=1;}

вставьте внутри блока tim=millis()

if (bar>87) {bar=0;y=1;tim=millis();}

 

Denis_Din
Offline
Зарегистрирован: 24.12.2019

DIYMan пишет:

Вот в эту строку:

if (bar>87) {bar=0;y=1;}

вставьте внутри блока tim=millis()

if (bar>87) {bar=0;y=1;tim=millis();}

 

Да, это работает. Спасибо! А в чем логика? Видимо голова моя уже под конец пятницы вообще перестала думать)))

И чем эта конструкция отличается от той, что я приводил:

if (bar>87) {bar=0;y=1;}

if (y==1) {tim=millis();

}

Ведь по сути это одно и то же...

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

Denis_Din пишет:

И чем эта конструкция отличается от той, что я приводил:

if (bar>87) {bar=0;y=1;}

if (y==1) {tim=millis();

}

Ведь по сути это одно и то же...

что-то я не вижу, где вы такое приводили.

Denis_Din
Offline
Зарегистрирован: 24.12.2019

Denis_Din пишет:

Это типа так сделать что ли?

if (a==1) {tim = millis();
if (millis()-tim>1000){tim = millis(); Serial.println("Да заработай же ты, падла!");}
}

Какой в этом смысл?

Вот.

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

ну что, так и не поняли. "какой в этом смысл"?