Микроконтроллеры | Помогите разобратся с терморегулятором на ds18b20. |
|
---|---|---|
Вот написал недавно программу на Си для термометра на МК ATtiny233 который работает с датчиком ds18b20. Термометр работает нормально, а вот захотел недавно переделать программу в терморегулятор и вроде всё работает нормально, а вот когда температура заданная "плюсовая" и измеряемая тоже "плюсовая", то сравнение работает нормально. Сравнение должно работать так, если измеряемая температура больше чем заданная, то должен загорется светодиод, а если менше чем заданная, то светодиод должен погаснуть. Так вот при плюсовой всё нормально, а если там минусовая ,а там плюсовая, или наоборот, или там минусовая и там минусовая то сравнение не работает. Вот может поможете. За ранние благодарю. |
|
|
- |
|
|
Я не программировал МК, только писал консольные приложения не могу понять почему сравнение происходит перед считыванием показаний temperature=ds18b20_temperature(0); //Читаем температуру |
|
|
А каков сокровенный смысл комбинации операторов: это не одно и то же, что: |
|
|
Этот код не сравнение: if(temperature>1000) Тут я читаю температуру, и если датчик начинает выдавать "минусовую" те мпературу, то от его значений надо отнять 4096 и поставить знак "-". |
|
|
Krik99: то от его значений надо отнять 4096 и поставить знак "-". |
|
|
Так вы мне обясните почему не правельно работает сравнение измеряемой температуры и заданной. Так как сама температура выводится нормально, и у меня с ней проблем нет. if(temperature>max) //сравнение |
|
|
unalex: rik99: то от его значений надо отнять 4096 и поставить знак "-". |
|
|
Арс: Не вижу ответа Krik99Существуют определенные правила написания программ, пусть на этой небольшой программе они не играют большой роли но в дальнейшем могут значительно облегчить понимание кода. В аттаче пример этой же программы, но с применением некоторых простых правил По поводу конкретной проблемы, судя по описанию теряется знак(хотя вроде такого быть не должно), можно попробовать искусственно в теле функции сравнения снова привести переменные к типу signed if((signed)temperature>max) //сравнение или записать так(хотя по сути это то же самое что и в исходном коде), но мало ли, вдруг поможет Прошу извинить за замечания и за мой чайниковский подход, знаний мало, а помочь хочется |
|
|
unalex: судя по описанию теряется знак |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |