Не могу побороть ELSE

solovey6o2
Offline
Зарегистрирован: 19.12.2018

void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  int msgType = processGPS();
  if (msgType == MT_NAV_PVT) { // Это условие работает если внизу убрать ELSE. Как так ???
    gpsSpeedKm = ubxMessage.navPvt.gSpeed * 0.0036; // Переводим в км/ч
    numSV = ubxMessage.navPvt.numSV;
    hAcc = ubxMessage.navPvt.hAcc;
    // Если движемся
    if (gpsSpeedKm > 0) {
      // Если это был старт
      if (!start) {
        start = true;
        startMillis = millis();
      }

      meteringTime = (float)(currentMillis - startMillis) / 1000; // Время замера

      // Результаты замера
      if (0.0 == metering.accel30 && gpsSpeedKm >= 30) {
        metering.accel30 = meteringTime; // Разгон до 30км/ч
      }
      else if (0.0 == metering.accel60 && gpsSpeedKm >= 60) {
        metering.accel60 = meteringTime; // Разгон до 60км/ч
      }
      else if (0.0 == metering.accel100 && gpsSpeedKm >= 100) {
        metering.accel100 = meteringTime; // Разгон до 100км/ч
      }
    }
    else if (start && 0 == gpsSpeedKm) { // Если остановились
      start = false;
    }
    updateDisplay();   
  }
  else {
    Serial.println("?????????"); // Почему срабатывает ELSE ????
  }
}

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Весь код не выкладывал думаю он не нужен. Почему срабатывает внизу ELSE? Если блок ELSE убрать, то первое условие выполняется. Суть в том что ELSE выполняется всегда в цикле loop, а условие верхнее не выполняется.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

вставьте после 4 строки

Serial.println("OK");

и посмотрите что будет

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Уже пробовал, реакции ноль. Не срабатывает блок

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

ну тогда проверяйте что перед условием творится после 3 строки


Serial.println(MT_NAV_PVT);
Serial.println(msgType);

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

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

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

solovey6o2 пишет:

вроде все работает если ELSE убрать.

здесь "вроде" не бывает, проверьте как я написал

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Точно все работает без ELSE. Не знаю что проверять.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

покажите что выдает то что я написал в 4 посте

solovey6o2
Offline
Зарегистрирован: 19.12.2018
MT_NAV_PVT 1
msgType 1
MT_NAV_PVT 1
msgType 1
MT_NAV_PVT 1
msgType 1
MT_NAV_PVT 1
msgType 1
MT_NAV_PVT 1
msgType 1
MT_NAV_PVT 1
msgType 1
 
Это без ELSE.
Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а с else?

solovey6o2
Offline
Зарегистрирован: 19.12.2018

ничего, else начинает работать. Бред какой-то три часа голову ломаю.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Сдавай ардуину в утиль.

solovey6o2
Offline
Зарегистрирован: 19.12.2018

)))) тоже так думаю. Бывают такие чудеса?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

С ардуинами - нет, а вот с теми, кто их мучает - постоянно.

solovey6o2
Offline
Зарегистрирован: 19.12.2018

так помоги ардуинке. чтоб не мучал ее сильно.

solovey6o2
Offline
Зарегистрирован: 19.12.2018
void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  int msgType = processGPS();
  Serial.println(msgType); // результат 0
  if (msgType == MT_NAV_PVT) {

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

solovey6o2 пишет:

void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  int msgType = processGPS();
  Serial.println(msgType); // результат 0
  if (msgType == MT_NAV_PVT) {

 

Здесь сериал выдает 0, в чем ошибка?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

а если заменить 4 строку на

if (processGPS() == MT_NAV_PVT) {

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

delay(500) в начале лупа воткни.

solovey6o2
Offline
Зарегистрирован: 19.12.2018
void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  int msgType = processGPS();
  Serial.println(msgType); // с этой строкой не выполняется условие ниже, даже без ELSE.
  if (msgType == MT_NAV_PVT) {
    Serial.println("MT_NAV_PVT" + String(MT_NAV_PVT));
    Serial.println("msgType" + String(msgType));

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

случайно не подсвечивается красным "msgType"

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

случайно не подсвечивается красным "msgType"

Черный

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

а если заменить 4 строку на

if (processGPS() == MT_NAV_PVT) {

 

Без изменений

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Што-то мне сдается, что в этой ситуации происходит какая-то хрень, связанная с интервалами опроса  жпса.

solovey6o2
Offline
Зарегистрирован: 19.12.2018

все еще веселей. Можно вместо else оствить только строку 35
    Serial.println("?????????"); // <strong>Почему срабатывает ELSE ????</strong> и условие уже не работает

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

попробуйте так

static int msgType = processGPS();

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

попробуйте так

static int msgType = processGPS();

 

так не работает скетч

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Выше писал, если Serial.println написанв место elso, уже не работает условие, а выводит serial.print

solovey6o2
Offline
Зарегистрирован: 19.12.2018

solovey6o2 пишет:

void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  int msgType = processGPS();
  Serial.println(msgType); // с этой строкой не выполняется условие ниже, даже без ELSE.
  if (msgType == MT_NAV_PVT) {
    Serial.println("MT_NAV_PVT" + String(MT_NAV_PVT));
    Serial.println("msgType" + String(msgType));

 

в сериал выводит msgType = 0. 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

solovey6o2 пишет:

так не работает скетч

в конце обработки if добавить 

msgType = 0;

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

solovey6o2 пишет:

так не работает скетч

в конце обработки if добавить 

msgType = 0;

 

не понял куда добавить

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

после 32 строки

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

после 32 строки

    else if (start && 0 == gpsSpeedKm) { // Если остановились
      start = false;
    }
    updateDisplay(); 
    msgType = 0;  
  }
  else {
    Serial.println("?????????"); // <strong>Почему срабатывает ELSE ????</strong>
  }
}

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

solovey6o2 пишет:

Valera19701 пишет:

после 32 строки

    else if (start && 0 == gpsSpeedKm) { // Если остановились
      start = false;
    }
    updateDisplay(); 
    msgType = 0;  
  }
  else {
    Serial.println("?????????"); // <strong>Почему срабатывает ELSE ????</strong>
  }
}

 

esle работает(((

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

да static не забыли?

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

да static не забыли?

понял

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

пост 26

solovey6o2
Offline
Зарегистрирован: 19.12.2018
void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  static int msgType = processGPS();

 

solovey6o2
Offline
Зарегистрирован: 19.12.2018

solovey6o2 пишет:

void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  static int msgType = processGPS();

 

else срабатывает.

solovey6o2
Offline
Зарегистрирован: 19.12.2018

solovey6o2 пишет:

solovey6o2 пишет:

void loop() {
  currentMillis = millis(); // текущее время в миллисекундах
  static int msgType = processGPS();

 

else срабатывает, но если else убрать скетч не работает со static, вас не смущает что даже SERIAL.PRINT все убивает?

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

у вас скорее всего не совпадают по времени даные processGPS() и MT_NAV_PVT

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

у вас скорее всего не совпадают по времени даные processGPS() и MT_NAV_PVT

как быть? А как объяснить не выполнения условия если написать строку Serial.print

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

попробуйте сделать msgType глобальной переменой, и после обработки делать

msgType = 0;

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

solovey6o2 пишет:

 А как объяснить не выполнения условия если написать строку Serial.print

все тоже самое, выполнение принта тоже занимает время

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

попробуйте сделать msgType глобальной переменой, и после обработки делать

msgType = 0;

 

Понял попробую. Спасибо за помощь. Завтра отпишусь. Пойду спать. Спокойной ночию

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

и еще можно попробовать переименовать переменую msgType

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Valera19701 пишет:

и еще можно попробовать переименовать переменую msgType

имя подозрительное?

solovey6o2
Offline
Зарегистрирован: 19.12.2018

Сделал глобальную и изменил имя, не помогло

asam
Offline
Зарегистрирован: 12.12.2018

А какой у вас ЖПС модуль и как подключен?

nevkon
Offline
Зарегистрирован: 20.01.2015

В данной ситуации аппаратную часть тоже стоит описать. Какой GPS модуль, с каким интерфейсом? Может он тоже по serial шлет данные.