Puhlyaviy прав что до меня туго доходит, но не все ж прирожденные програмисты, я бы уже давно забросил это дело но мне интересно изучить и разобратся, хоть это займкт много времени но я пытаюсь...
Но если по делу, то можно сделать такую подпрограмму:
float speedTemp(){
static unsigned long prevTime = 0; // время когда последний раз был расчет
static float prevTemp = temp3 * 0.1; // предыдущая температура
float result;
if(millis() - prevTime > 1000) {
result = temp3 - prevTemp;// разница между текущим и предыдущим за единицу времени есть скорость изменения
prevTime = millis();
prevTemp = temp3;
return result;
}
}
Мдась, загон, но это компилируется :) Хотя в работе не проверял.
А если так:
float speedTemp(){
static unsigned long prevTime = 0; // время когда последний раз был расчет
static float prevTemp = temp3 * 0.1; // предыдущая температура
static float result = 0;
if(millis() - prevTime > 1000) {
result = temp3 - prevTemp;// разница между текущим и предыдущим за единицу времени есть скорость изменения
prevTime = millis();
prevTemp = temp3;
}
return result;
}
Вообще-то программа должна не только компилироваться, но еще и делать нечто осмысленное.
Лично мне поведение функции, которая возвращает заведомо неправильный результат в случае, когда запрос был выполнен преждевременно, представляется неадекватным.
Лично мне представляется 3 варианта более адекватного поведения:
1. Вернуть истинную разницу. При этом производная, очевидно будет посчитана неверно, но мне это представляется меньшим злом. И, опять же, остается вопрос, что делать с prevTemp и prevTime - их можно при преждевременном запросе как обновить, так и оставить прежними.
2. Экстраполировать результат по истинной производной. При этом новое значение температуры не будет соответствовать действительности (хотя оно, вроде, и не нужно). Вопрос с глобальными переменными остается.
3. Значение приращения температуры возвращать в формальном параметре, передаваемом по ссылке, а самой функцией возвращать признак успешного выполнения либо код ошибки.
те кто пытаеться с кучей сарказма добиться что бы человек хоть что то понял
или те кто пишет какие то куски функций, которые мало того что не работают, так еще нужно пару часов обьяснять куда его вставить и каким образом использовать...
Я вернулся:) опять много непоняток с делай все проще вписал его задал время и работает то тут я не могу разобратся что вписывать в начале кода в плане типов переменных, что в функции void setup() и void loop() я понимаю что эти вопросы оевидны что куда вписывать для опытных людей но я путаюсь, либо пример вышеуказаный неробочий.
Я вернулся:) опять много непоняток с делай все проще вписал его задал время и работает то тут я не могу разобратся что вписывать в начале кода в плане типов переменных, что в функции void setup() и void loop() я понимаю что эти вопросы оевидны что куда вписывать для опытных людей но я путаюсь, либо пример вышеуказаный неробочий.
а зачем виставлять temp3 = analogRead(A0);//сюда считываем температуру
ведь в моем случаи термобародатчик подключен к А4 и А5
та и тип переменных лучше long ане int
и в этом масиве точно все верно ато у меня че то не работает?
float speedTemp(){
static unsigned long prevTime = 0; // время когда последний раз был расчет
static float prevTemp = temp3; // предыдущая температура
static float result = 0;
if(millis() - prevTime > 1000) {
result = (temp3 - prevTemp) * 1000 / (millis() - prevTime);// разница между текущим и предыдущим за единицу времени есть скорость изменения
prevTime = millis();
prevTemp = temp3;
}
return result;
}
Ну, у меня то датчика нету, вот я его симмитировал переменными резистором. Да и код я для проверки и делал. Как тебе надо так и переделай.
Int - это переменная на 2 байта, т.е. самое большее число 32767, а long - 4 байта, т.е. макс 2,147,483,647.
В этой 'подпрограмме' все верно, у меня же работает. А что пишет?
Puhlyaviy прав что до меня туго доходит, но не все ж прирожденные програмисты, я бы уже давно забросил это дело но мне интересно изучить и разобратся, хоть это займкт много времени но я пытаюсь...
мне кажется что в посте #47 улыбка вовсе не дауновская :)
угу, хитрожопая улыбка... я его с утра жду. камни возить. а он делает вид что забыл. а у меня спина больная.
....то глину возить , то - камни - вот он и не может определиться :)
Не читал всю ленту, шибко много мусора.
Но если по делу, то можно сделать такую подпрограмму:
И выводить примерно так:
И что, это реально компилируется?
Функция, которая возвращает значение не всегда, а только тогда, когда сочтет нужным, - это интересное решение.
И что, это реально компилируется?
Мдась, загон, но это компилируется :) Хотя в работе не проверял.
А если так:
Вообще-то программа должна не только компилироваться, но еще и делать нечто осмысленное.
Лично мне поведение функции, которая возвращает заведомо неправильный результат в случае, когда запрос был выполнен преждевременно, представляется неадекватным.
Лично мне представляется 3 варианта более адекватного поведения:
1. Вернуть истинную разницу. При этом производная, очевидно будет посчитана неверно, но мне это представляется меньшим злом. И, опять же, остается вопрос, что делать с prevTemp и prevTime - их можно при преждевременном запросе как обновить, так и оставить прежними.
2. Экстраполировать результат по истинной производной. При этом новое значение температуры не будет соответствовать действительности (хотя оно, вроде, и не нужно). Вопрос с глобальными переменными остается.
3. Значение приращения температуры возвращать в формальном параметре, передаваемом по ссылке, а самой функцией возвращать признак успешного выполнения либо код ошибки.
мдааааа. я вот задумался. кто тут большой троль.
те кто пытаеться с кучей сарказма добиться что бы человек хоть что то понял
или те кто пишет какие то куски функций, которые мало того что не работают, так еще нужно пару часов обьяснять куда его вставить и каким образом использовать...
Вообще-то программа должна не только компилироваться, но еще и делать нечто осмысленное.
Ну, дык, я программу то и не писал, а только подпрограмму.
1. Можно уточнить с учетом реального прошедшего времени:
Глобальные обновляются не раньше чем 1000 миллис.
2. Тоже вариант, но это если нужно выводить скорость изменения температуры чаще чем раз в секунду.
Хотя непонятно почему "новое значение температуры не будет соответствовать действительности"?
3. Ну да, так обычно и делается. Но мну захотелось как-то так. Типа попроще.
Я вернулся:) опять много непоняток с делай все проще вписал его задал время и работает то тут я не могу разобратся что вписывать в начале кода в плане типов переменных, что в функции void setup() и void loop() я понимаю что эти вопросы оевидны что куда вписывать для опытных людей но я путаюсь, либо пример вышеуказаный неробочий.
Я вернулся:) опять много непоняток с делай все проще вписал его задал время и работает то тут я не могу разобратся что вписывать в начале кода в плане типов переменных, что в функции void setup() и void loop() я понимаю что эти вопросы оевидны что куда вписывать для опытных людей но я путаюсь, либо пример вышеуказаный неробочий.
http://arduino.ru/Reference
прям слева вверху описано и то и другое
и примеров там навалом
Есть две функции. В одной бегины точены, в другой команды дрочены. Куда инициализацию вставишь, куда обработку засадишь? :)
Мне кажется код кривоват все таки
Мне кажется код кривоват все таки
Кривоват, но работает, можно ж проверить:
а зачем виставлять
temp3 = analogRead(A0);
//сюда считываем температуруведь в моем случаи термобародатчик подключен к А4 и А5
та и тип переменных лучше long ане int
и в этом масиве точно все верно ато у меня че то не работает?
?
Ну, у меня то датчика нету, вот я его симмитировал переменными резистором. Да и код я для проверки и делал. Как тебе надо так и переделай.
Int - это переменная на 2 байта, т.е. самое большее число 32767, а long - 4 байта, т.е. макс 2,147,483,647.
В этой 'подпрограмме' все верно, у меня же работает. А что пишет?