switch quantity not an integer
- Войдите на сайт для отправки комментариев
Втр, 11/10/2016 - 14:27
Помогите разобраться, задаю функцию с возвращающимся значением int, затем использую оператор switch где используются эти значения, при компиляции выдает ошибку что значение не int.
error: switch quantity not an integer
вот фрагменты кода:
int SolderingStatus(){ if (old_tempust != tempust) return 1; else return 0; } void loop (){ switch (SolderingStatus){ case 0: while ((millis() - currentTime) < 1000) { printNumber1(tempust); } break; case 1: printNumber1(tempreal); } }
Замените SolderingStatus на SolderingStatus()
Замените SolderingStatus на SolderingStatus()
спасибо огромное помогло!
Подскажите еще если не трудно, по задержке. Дописал сюда такой код:
Тут проблема такая: при изменении параметра tempust должна происходить задержка перед обнулением параметра old_tempust = tempust , но тут получается происходит задержка не от изменения параметра а от старта программы, тоесть задежка происходит хаотично в пределах от 0-3 сек. Подскажите как исправить чтобы задержка начиналась каждый раз при повороте энкодера?
Подскажите как исправить чтобы задержка начиналась каждый раз при повороте энкодера?
Если я правильно понял вышенаписанное, вместо
if
(millis() - actual_count_delay > 3000)
поставьте
if
( (millis() - actual_count_delay > 3000) &&
(old_tempust != tempust) )А может достаточно просто
if
(
old_tempust != tempust)Если я правильно понял вышенаписанное, вместо
if
(millis() - actual_count_delay > 3000)
поставьте
if
( (millis() - actual_count_delay > 3000) &&
(old_tempust != tempust) )А может достаточно просто
if
(
old_tempust != tempust)К сожалению ничего не поменялось, цифры все равно выводяться как получиться могут на 0,1 сек высветиться, а могут и на 3.
http://radikal.ru/video/Uq3ZWAZ23Tq
Вам нужно задать начальное значение для отсчета интервала 3 сек - переменную actual_count_delay.
После строки 10 добавьте actual_count_delay=millis();
Вам нужно задать начальное значение для отсчета интервала 3 сек - переменную actual_count_delay.
После строки 10 добавьте actual_count_delay=millis();
Если это добавить, то значение высвечивается бесконечно т.к ниже где происходит расчет разницы времени всегда будет 0
Как обявлена actual_count_delay?
Как обявлена actual_count_delay?
Обьявлена в самом начале еще до сетапа long actual_count_delay = 0;
Хм не должно так быть.
Вроде понял. Вам надо завести еще одну промежуточную переменную для изменившейся установки TempTmp.
int SolderingStatus(){
static TempTmp =0;
if (TempTmp == tempust) return 1;
TempTmp = tempust; return 0;
};
Хм не должно так быть.
Вроде понял. Вам надо завести еще одну промежуточную переменную для изменившейся установки TempTmp.
int SolderingStatus(){
static TempTmp =0;
if (TempTmp == tempust) return 1;
TempTmp = tempust; return 0;
};
К сожалению это не решает проблему, нужно задание времени в месте:
а далее как-то нужно чтобы из этого полученного значения actual_count_delay вычиталось по 1мс до совпадения со значением millis() и далее после достижения условия выполнялась команда old_tempust = tempust;
непонимаю как так можно реализовать, плохо без команды than.
Ребят, ну помогите додумать как сделать задержку
Программа по дефолту работает на case 1, при этом постоянно меняется значение actual_count_delay в большую на 3сек сторону. Когда энкодером меняю значение tempust программа переходит на case 0 тоесть значение actual_count_delay перестает меняться и дплее по истечении 3сек должно срабатывать условие if(millis() - actual_count_delay > 0) и присваиваться old_tempust = tempust, программа опять должна переходить на case 1
Вроде логически все правильно, но почему-то в последней строчке значение old_tempust = tempust присваивается вне зависимости от того сработало ли условие millis() - actual_count_delay > 0
Отвечу сам, может кому поможет... Значение разницы не может быть отрицательным числом! поэтому условие millis() - actual_count_delay постоянно срабатывает. решилось установкой условия
if
(millis() > actual_count_delay)
Буду признателен если подскажете как сделать так, чтобы таймер задержки actual_count_delay = (millis()+3000); менялся от поворота энкодера, ато получается он срабатывает всегда через 3 сек. Тоесть только когда я не кручу энкодер он должен обновляться.