Применение millis для нескольких процессов

Posol88
Offline
Зарегистрирован: 14.11.2019

добрый день . 

Машина опять меня победила... 

вот кусок кода:

#include <Servo.h>
#include <iarduino_RTC.h>
iarduino_RTC Time (RTC_DS1302, A0, A2, A1); //назначение пинов обмена данными RST, CLK, DAT
Servo servo;                          //имя сервопривода
int pos = 0;                          //переменная хранящая угол поворота сервопривода
unsigned long newCycle,TimeWait,r,TimeWork,TimsWorker =7850;    //1)переменная хранящая время прошедшее с момента нажатия кнопки. 2)переменная хранящаявремя с момента последнего вывода текущего значения времени с RTC модуля в серийный порт. 3)переменная хранящая время включения сервопривода
const char LED = A3;                  //номер пина светодиода(стадия разработки)
boolean control,qr,QR=true;                   //переменная меняющая значение в момент включения и выключения сервопривода 1:(служит для ограничения срабатывания по времени с RTC до одного раза за секунду)2:не смог сформулировать.
byte c = 0;                           //переменная хранящая количество раз нажатия кнопки
int I,i,W=1;                            //1:переменная меняющая свое значение в момент нажатия кнопки(защита от дребезга)2:переменная хранящая статус положения сервопривода(защита от дребезга)
void setup() {
  delay(300);                          //время на подумать
  Time.begin();                        //инициализация работы часов
  servo.attach(A4);                    //назначение пина управления сервоприводом
  Serial.begin(9600);                  //инициализация порта
  //Time.settime(35,41,16,18,02,2020,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
  pinMode(LED, OUTPUT);                //назначение пина светодиода выходом (индикация работы)
  r = millis();
  pinMode(7, INPUT_PULLUP);
  pinMode(A5, INPUT_PULLUP);
  newCycle = 0;
}
void loop() {
  control=!digitalRead(7);
  if(I==1&&control==HIGH){
    TimsWorker-=1000;
    I=0;
    Serial.println(TimsWorker);
    if(TimsWorker<1000){
      TimsWorker=7850;
      digitalWrite (LED,HIGH);
      newCycle=millis(); 
      
    } 
  }
  if(millis()-newCycle>=1000){
  digitalWrite(LED,LOW);
  newCycle = 0;
  Serial.println("в новом проблема");
 }
 if(control==LOW){
  I=1;
  delay(20);
 }

не могу понять - почему оператор if из 36й строки срабатывает в каждом цикле... подскажите пожалуйста

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Из за 38 строчки, видимо.

Posol88
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Из за 38 строчки, видимо.

не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...

Kakmyc
Онлайн
Зарегистрирован: 15.01.2018

Posol88 пишет:

DetSimen пишет:

Из за 38 строчки, видимо.

не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...

Кто то просто настолько далёк от программирования, что за полгода так и не разобрался с millis()

У тебя там должно быть:
NewCycle=millis();
А не
NewCycle=0;

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

Когда Вы научитесь Serial для дебага использовать?
millis = 500, newCycle = 0, millis - newCycle = ?
millis = 1000, newCycle = 0, millis - newCycle = ?
millis = 1001, newCycle = 0, millis - newCycle = ?
millis = 1002, newCycle = 0, millis - newCycle = ?
...
millis = 9000, newCycle = 0, millis - newCycle = ?

Posol88
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:
Posol88 пишет:

DetSimen пишет:

Из за 38 строчки, видимо.

не, там же наоборот переменной присваивается значение нуля после чего оно меняется только в 32й строчке в новом цикле и то только если условие оператора из 29ой позволит да и тот выполняется только после нажатия кнопки...а когда newCycle меньше 1000 оператор из 36й не должен же выполнять тело...

Кто то просто настолько далёк от программирования, что за полгода так и не разобрался с millis() У тебя там должно быть: NewCycle=millis(); А не NewCycle=0;

не согласен. если я в 38й строчке напишу"NewCycle=millis();" , то оператор из 36 будет срабатывать каждую секунду, а он должен выполнять тело цикла через секунду после выполнения строки 32.

Posol88
Offline
Зарегистрирован: 14.11.2019

вот об этом я не подумал... выходит косяк в 21й строчке)) мерси

Posol88
Offline
Зарегистрирован: 14.11.2019
  if(millis()-newCycle>=1000,millis()-newCycle<=1200){
  digitalWrite(LED,LOW);
  Serial.println("в новом проблема");
 }

вот, дошло... 

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

Давай зачётку...

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

Posol88 пишет:

Машина опять меня победила... 

И почему никто не удивляется? :-)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

Posol88 пишет:

Машина опять меня победила... 

И почему никто не удивляется? :-)

А чему удивляться? Терпению в познании? Так Садман уже отметил, грит давай зачётку )))

Posol88
Offline
Зарегистрирован: 14.11.2019

нет, вот вы молодцы конечно... "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы"... 

  пол года изучал, смотрел, читал, вникал... ну сделал я эту кормушку,и кнопки управления сделал, и экран на неё повесил... а куда теперь все эти знания девать? похоронить пол года стараний что ли?! 

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

Зачем хоронить? Теперь сам другим пиши: "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы".

b707
Онлайн
Зарегистрирован: 26.05.2017

Posol88 пишет:

а куда теперь все эти знания девать? похоронить пол года стараний что ли?! 

на самом деле - это и правдв проблема. Я вот часто что-то изучу - а применять негде. Ну вот совсем...

Зато как увлекателен процесс :)))

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

Posol88 пишет:

а куда теперь все эти знания девать? похоронить пол года стараний что ли?! 

на самом деле - это и правдв проблема. Я вот часто что-то изучу - а применять негде. Ну вот совсем...

Зато как увлекателен процесс :)))

это да))

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

sadman41 пишет:

Зачем хоронить? Теперь сам другим пиши: "прочитай хоть одну книгу по программированию" , "тебе не надоело идиотом себя выставлять" , "изучи хотя бы азы".


Ну почему же! Может чел-у нравится дурачком себя выставлять. Есть ведь что то такое по Фрейду.)