Вопрос по использованию millis()

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017
void loop(){
currentMillis = millis();
if (flagStarta && currentMillis - previousMillis > 5000) {
  flagStarta = false;
  flagStarta1 = true;
  digitalWrite(_starter, HIGH);
  Serial.println("Стартер запущен");
}
else if (flagStarta1 && currentMillis - previousMillis > 7000) {
  flagStarta1 = false;
  flagStarta2 = true;
  digitalWrite(_starter, LOW);  
  Serial.println("Стартер остановлен");
}
else if (flagStarta2 && currentMillis - previousMillis > 9000) {
flagStarta2 = false;
flagStarta3 = true;
Serial.println("Проверяем вольты");
voltmetr();
}
else if (flagStarta3 && currentMillis - previousMillis >progrev*60000) {
flagStarta3 = false;
stopDvig();
}

//Управление
if (Serial.available()) {
int val = Serial.read();
if (val == '1') startDvig();
if (val == '0') stopDvig();
} 
}

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

qwone пишет:

ПС: Если я чего то понимаю, то сначало вкл стартер и цилинды мотора набиваюся газообразным топливом, а потом идет искра (зажигание). А у вас почему-то иначе.

Irinka пишет:

Суть то немного другая

Включается зажигание

Проходит 5 секунд

Включается стартер

Проходит 2 секунды

Выключается стартер

Вот. )

Включается зажигание.  Бензонасос накачал топливо в рампу. Отключился (контроля на отключение не делаю, так как нужно менять реле на пятиконтактное, вообщем долго, для этого включаю зажигание на 5 секунд, этого достаточно)

Затем на 2 секунды включается стартер, заводит машину и отключается. Если не завелась, операция повторяется (три цикла).

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ПС: если вам надо несколько раз включить -выключить"стартер" , то потом уже окончательно выключить "зажигание" то сделайте 10 однотипных отложенных функций и 10 флагов к ним. Немного громоздко, но вам на первое время хватит.

ПС:Поправил Скетч

/**/
//----main------------------------
void setup() {
  Serial.begin(9600);
}

void loop() {
  static unsigned long previousMillis = 0;
  static bool flag1 = false;
  static bool flag2 = false;
  unsigned long currentMillis = millis();
  //Управление
  if (Serial.available()) {
    char val = Serial.read();
    if (val == '1') {
      /*запуск*/
      /*Включается зажигание*/
      Serial.println("Fire On");
      /* включает флаг1*/
      flag1 = true;
      previousMillis = currentMillis;
    }
  }
  /*первая отложеная функция*/
  if (flag1 && currentMillis - previousMillis >= 5000) {
    //Проходит 5 секунд
    //выключает флаг1
    flag1 = false;
    // включает флаг2
    flag2 = true;
    previousMillis = currentMillis;
    /*Включается стартер*/
    Serial.println("Stater ON");
  }
  /*вторая отложеная функция*/
  if (flag2 && currentMillis - previousMillis >= 2000) {
    //Проходит 2 секунды
    // выключает флаг2
    flag2 = false;
    /*Выключается стартер*/
    Serial.println("Stater OFF");
  }
}
/*Скетч использует 1706 байт (5%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 220 байт (10%) динамической памяти, оставляя 1828 байт для локальных переменных. Максимум: 2048 байт.
*/

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Большое спасибо

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
/**/
//----main------------------------
void setup() {
  Serial.begin(9600);
}

void loop() {
  static unsigned long previousMillis = 0;
  static bool flag1 = false;
  static bool flag2 = false;
  static bool flag3 = false;
  static bool flag4 = false;
  static bool flag5 = false;
  static bool flag6 = false;
  unsigned long currentMillis = millis();
  //Управление
  if (Serial.available()) {
    char val = Serial.read();
    if (val == '1') {
      /*запуск*/
      /*Включается зажигание*/
      Serial.println("Fire On");
      /* включает флаг1*/
      flag1 = true;
      previousMillis = currentMillis;
    }
  }
  /*1 отложеная функция*/
  if (flag1 && currentMillis - previousMillis >= 5000) {
    //Проходит 5 секунд
    //выключает флаг1
    flag1 = false;
    // включает флаг2
    flag2 = true;
    previousMillis = currentMillis;
    /*Включается стартер*/
    Serial.println("Stater ON");
  }
  /*2 отложеная функция*/
  if (flag2 && currentMillis - previousMillis >= 2000) {
    //Проходит 2 секунды
    // выключает флаг2
    flag2 = false;
    // включает флаг3
    flag3 = true;
    previousMillis = currentMillis;
    /*Выключается стартер*/
    Serial.println("Stater OFF");
  }
  /*3 отложеная функция*/
  if (flag3 && currentMillis - previousMillis >= 5000) {
    //Проходит 5 секунд
    //выключает флаг3
    flag3 = false;
    // включает флаг4
    flag4 = true;
    previousMillis = currentMillis;
    /*Включается стартер*/
    Serial.println("Stater ON");
  }
  /*4 отложеная функция*/
  if (flag4 && currentMillis - previousMillis >= 2000) {
    //Проходит 2 секунды
    // выключает флаг4
    flag4 = false;
    // включает флаг5
    flag5 = true;
    previousMillis = currentMillis;
    /*Выключается стартер*/
    Serial.println("Stater OFF");
  }
  /*5 отложеная функция*/
  if (flag5 && currentMillis - previousMillis >= 5000) {
    //Проходит 5 секунд
    //выключает флаг5
    flag5 = false;
    // включает флаг6
    flag6 = true;
    previousMillis = currentMillis;
    /*Включается стартер*/
    Serial.println("Stater ON");
  }
  /*6 отложеная функция*/
  if (flag6 && currentMillis - previousMillis >= 2000) {
    //Проходит 2 секунды
    // выключает флаг6
    flag6 = false;
    /*Выключается стартер*/
    Serial.println("Stater OFF");
    /*Выключается зажигание*/
    Serial.println("Fire OFF");
    /*конец запуска*/
  }
}
/*Скетч использует 2052 байт (6%) памяти устройства. Всего доступно 32256 байт.
  Глобальные переменные используют 234 байт (11%) динамической памяти, оставляя 1814 байт для локальных переменных. Максимум: 2048 байт.
*/

 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Да-да, я так и сделала. Огромное Спасибо.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Скрыть код. Там когда всталяете код на второй панели флажек поставить в нужном месте-свернуть код.

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

Я только-что нашла, ранее внимания не обращала)

telets
Offline
Зарегистрирован: 25.08.2019

Здравствуйте. Вроде бы все решили. Но в явном виде, как ниже, не было. Так нормально?

 last_time=millis();
 if ( last_time - last_update_time >= SENS_UPDATE_TIME ) {
    
     last_update_time = last_time;

     .......
}

 

MaksVV
Offline
Зарегистрирован: 06.08.2015

только названия корявые. скорее так

 current_time=millis();  // текущее время
 if ( current_time - last_update_time >= SENS_UPDATE_TIME ) {
    
     last_update_time = current_time;

     .......
}

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

MaksVV пишет:
только названия корявые. скорее так

А ещё посол разный бывает.
Огурчик в банка - пряный посол.
Мужик в пиджак в машин с флажком, заграничный - чрезвычайный и полномочный посол.
Утомил тебя кто - в жопа пасол.

MaksVV,ну что Вы прицепились к грамматике нерусского языка. Это же не тематика данного форума.

telets
Offline
Зарегистрирован: 25.08.2019

Здравствуйте.

MaksVV, qwone спасибо большое.

MaksVV, мне Ваши имена переменных, ну по крайней мере, одной, тоже больше нравятся. Сравнил, и правда: в последний раз...))

qwone, спасибо за настроение.

MaksVV
Offline
Зарегистрирован: 06.08.2015

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

И где скачать учебник по правильным названиям переменных. Устроим форумское голосование или назначим ответсвенного для выявления правильных и неправильных названий.

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

qwone пишет:

И где скачать учебник по правильным названиям переменных

Как где? Все фанаты этого дела кипятком исходятся от «Stanford C++ Style Guide». там есть глава и про именование.

А вообще, про именование переменных лучше всего написано у В.В. Маяковского, всякие Стэнфорды нервно курят в сторонке:

«Если тебе
«корова» имя,
у тебя
должны быть
молоко
и вымя.
А если ты
без молока
и без вымени,
то черта ль в твоем
в коровьем имени!
»

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Я не стороник длинных немецких существительных. Вот и не надо делать название переменных длинее их. https://germania.one/15-samyh-dlinnyh-slov-v-nemeckom-jazyke/   Что бы сказал ВВ Маяковский если был бы начал учить немецкий язык.