Не могу побороть ELSE
- Войдите на сайт для отправки комментариев
Втр, 14/05/2019 - 22:45
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 ????
}
}
Весь код не выкладывал думаю он не нужен. Почему срабатывает внизу ELSE? Если блок ELSE убрать, то первое условие выполняется. Суть в том что ELSE выполняется всегда в цикле loop, а условие верхнее не выполняется.
вставьте после 4 строки
Serial.println("OK");и посмотрите что будет
Уже пробовал, реакции ноль. Не срабатывает блок
ну тогда проверяйте что перед условием творится после 3 строки
Хз что проверять, вроде все работает если ELSE убрать. Но в ELSE хочу проверять есть ли соединение со спутниками, а далее функцию вызвать. Если нужен остальной код могу скинуть.
вроде все работает если ELSE убрать.
здесь "вроде" не бывает, проверьте как я написал
Точно все работает без ELSE. Не знаю что проверять.
покажите что выдает то что я написал в 4 посте
а с else?
ничего, else начинает работать. Бред какой-то три часа голову ломаю.
Сдавай ардуину в утиль.
)))) тоже так думаю. Бывают такие чудеса?
С ардуинами - нет, а вот с теми, кто их мучает - постоянно.
так помоги ардуинке. чтоб не мучал ее сильно.
void loop() { currentMillis = millis(); // текущее время в миллисекундах int msgType = processGPS(); Serial.println(msgType); // результат 0 if (msgType == MT_NAV_PVT) {void loop() { currentMillis = millis(); // текущее время в миллисекундах int msgType = processGPS(); Serial.println(msgType); // результат 0 if (msgType == MT_NAV_PVT) {Здесь сериал выдает 0, в чем ошибка?
а если заменить 4 строку на
if (processGPS() == MT_NAV_PVT) {delay(500) в начале лупа воткни.
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"случайно не подсвечивается красным
"msgType"Черный
а если заменить 4 строку на
if (processGPS() == MT_NAV_PVT) {Што-то мне сдается, что в этой ситуации происходит какая-то хрень, связанная с интервалами опроса жпса.
все еще веселей. Можно вместо else оствить только строку 35
Serial.println("?????????");// <strong>Почему срабатывает ELSE ????</strong>и условие уже не работаетпопробуйте так
попробуйте так
так не работает скетч
Выше писал, если Serial.println написанв место elso, уже не работает условие, а выводит serial.print
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.
так не работает скетч
в конце обработки if добавить
так не работает скетч
в конце обработки if добавить
после 32 строки
после 32 строки
else if (start && 0 == gpsSpeedKm) { // Если остановились start = false; } updateDisplay(); msgType = 0; } else { Serial.println("?????????"); // <strong>Почему срабатывает ELSE ????</strong> } }после 32 строки
else if (start && 0 == gpsSpeedKm) { // Если остановились start = false; } updateDisplay(); msgType = 0; } else { Serial.println("?????????"); // <strong>Почему срабатывает ELSE ????</strong> } }да static не забыли?
да static не забыли?
пост 26
void loop() { currentMillis = millis(); // текущее время в миллисекундах static int msgType = processGPS();void loop() { currentMillis = millis(); // текущее время в миллисекундах static int msgType = processGPS();void loop() { currentMillis = millis(); // текущее время в миллисекундах static int msgType = processGPS();у вас скорее всего не совпадают по времени даные
processGPS() и MT_NAV_PVTу вас скорее всего не совпадают по времени даные
processGPS() и MT_NAV_PVTпопробуйте сделать
msgType глобальной переменой, и после обработки делатьА как объяснить не выполнения условия если написать строку Serial.print
все тоже самое, выполнение принта тоже занимает время
попробуйте сделать
msgType глобальной переменой, и после обработки делатьи еще можно попробовать переименовать переменую
msgTypeи еще можно попробовать переименовать переменую
msgTypeСделал глобальную и изменил имя, не помогло
А какой у вас ЖПС модуль и как подключен?
В данной ситуации аппаратную часть тоже стоит описать. Какой GPS модуль, с каким интерфейсом? Может он тоже по serial шлет данные.