Возврат значения в функции
- Войдите на сайт для отправки комментариев
Вс, 17/06/2018 - 18:54
Всем привет. Прошу совет, достигну ли я возврат значения с функции вот таким методом. Использую под датчик лм35.
[code]void loop()
{
int t2 = check_temp2(2);
}
byte check_temp2(byte temp_pin2)
{
int raw = 0;
float temp = 0;
raw = analogRead(temp_pin2);
temp = ( raw/1023.0 )*5.0*1000/10;
Serial.println(temp);
delay(1000);
return temp;
}[/code]
Всегда озадачивали подобные вопросы... неужели трудно ПОПРОБОВАТЬ !?!? самостоятельно...
Путает byte , можно заменить его на int?
Дело в том, что я просто спросил, не нужно агрится. Пройди мимо...
Да что проходить мимо. У вас в скече больше ошибок чем самого скетча.
Да и код криво выложен на форум. Жрите форумчане да не обляпайтесь.
Пух, объясните плз. Вот Вы делаете явое приведение:
float
temp = (
float
)analogRead(pin) * 500 / 1023.0 ;
Это Вы просто перестраховываетесь или это какое-то правило, и так нужно делать?
Пух, объясните плз. Вот Вы делаете явое приведение:
float
temp = (
float
)analogRead(pin) * 500 / 1023.0 ;
Это Вы просто перестраховываетесь или это какое-то правило, и так нужно делать?
Хотя делаю не я, объясню:
если не сделать приведение, может наступить переполнение.
Правда, если приводить к longint, будет выполняться чуточку быстрее. Но не намного.
ага, то есть умножая int на int нужно следить чтобы не выскочить за пределы.
А как правильнее , так как написано, или так:
float
temp =
analogRead(pin) * 500. / 1023 ;
5N62V, функция возвращает int. А это значит будет считать все в int, отбрасывая всю дробную часть. Вот (float) я заставил считать после равно в float .
ага, то есть умножая int на int нужно следить чтобы не выскочить за пределы.
А как правильнее , так как написано, или так:
float
temp =
analogRead(pin) * 500. / 1023 ;
И в том, и в другом случае результата analogRead будет перед умножением преобразован к float. Так что по сути - одинаково.
Программа
Результат
Можно. Особенно, учитывая то, что реально Вы возвращаете float - можете менять, хуже не будет.
Программа
Результат
Наверное, это не совсем корректная иллюстрация. С делением int-ов все понятно. Вы же, явно привели один из множителей числителя, хотя в знаменателе стояло / 1023.0 , т.е. результат все равно неявно привелся бы к float. Объяснение Андриано звучит исчерпывающе.
5N62V, я не говорю что правильно или неправильно говорит andriano . Я объсняю почему я поставил (float).
результат
Хотя так
5N62V, я не говорю что правильно или неправильно говорит andriano . Я объсняю почему я поставил (float).
Спасибо большое ) я только учусь. А мой пример я скопипастил где то в инете. Интересно познавать что то новое) Эту функцию можно применить и к другим для вычисления целых чисел, верно?)
Тем более, что analogRead(pin)*500/1023.0 здесь не поможет - первая операция будет выполнена в int и она приведет к переполнению. И только потом неправильное значение будет преобразовано в float и поделено на 1023.
Кстате, а byte можно использувать если надо вернуть правду или ложь?