switch
- Войдите на сайт для отправки комментариев
Ср, 04/03/2020 - 20:57
Подскажите как оператор switch case, заставить работать вместе с датчиком температуры? Я так понял в switch подходят тип данных только int и char. Как число от показаний датчика вставить тогда, если показания с точкой? В инете примеров нет.
#include "DHT.h" #define DHTPIN 7 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); switch () { case 1: //тут температура от 20 до 24.9 Serial.println("1111"); break; case 2: //тут 25-30 градусов Serial.println("2222"); break; }
Округлить до безточки. БайтА, али интА.)))
Вот тут какая логика:
case
1:
//тут температура от 20 до 24.9
?Вот тут какая логика:
case
1:
//тут температура от 20 до 24.9
?когда в case 20-24 градусов : выполняется задание.
Может потому, что это не самая лучшая идея?
Как это - не пишут? Пишут: https://www.geeksforgeeks.org/using-range-switch-case-cc/
Только с float-константами в case это не прокатит.
Однако, переменная типа float, полагаю, будет неявно приведена к int и запись типа case 20 .. 24 вполне себе сработает.
Потому что оператор case для этог не подходит. В вашем случае надо использовать if.
Как это - не пишут? Пишут: https://www.geeksforgeeks.org/using-range-switch-case-cc/
О как, а я, со своим языковым дебилизмом, и не знал. Делал на ифах, православных, и не парился. А теперь, новые печали.((( Вот зачем?))))
Не вижу смысла париться и теперь. Я об case range вспоминаю только тогда, когда об этом спрашивают ;) А в быту тоже лесенки if-ов строю.
Спасибо за ответы
Не вижу смысла париться и теперь. Я об case range вспоминаю только тогда, когда об этом спрашивают ;) А в быту тоже лесенки if-ов строю.
Спасибо, что не заставляешь в классы всё обёртывать.
иногда и без гото никак)
например выход из вложенных циклов)
гото в сишке еще не самый хардкор)
есть еще сетджамп лонгджамп который вообще
скачет по стековым фреймам)
кстати на ардуинке лонгджамп работает?)
да.
За >20 лет программирования на С++ - ни разу не сталкивался с необходимостью применения goto, в том числе - при вложенных циклах. Путает goto прочтение логики - очень путает.
так c case вроде читабельнее код делается не находите???
(интересно по объему кода что)
pps сейчас луна на половине, растущая )))
например выход из вложенных циклов)
За последние четверть века ни разу не столкнулся с необходимостью использовать goto.
А если из вложенных циклов иначе не выйти, может, следует подумать о том, чтобы сами циклы переписать более адекватным образом?
За >20 лет программирования на С++ - ни разу не сталкивался с необходимостью применения goto, в том числе - при вложенных циклах. Путает goto прочтение логики - очень путает.
Не могу похвастаца тем же. :)
иногда, без goto код получаеца более на.уеверченным, особенно, када исключений нет. :)
Можете кидать в меня Дейкстрой.
вот DetSimen напомнил мне еще один паттерн в чистой сишке с применением goto, это конечно же обработка ошибок
вообще мне в сишке запомнилось два случая использования goto
1. это когда надо выйти из вложенных циклов не заводя лишние флажки которые надо проверять в каждом цикле(что по моему только мусорит код)
2. обработка ошибок в чистой сишке
это либо паттерн с goto
либо цепочка вложенных if
либо уж совсем хардкор на сетджамп лонгджамп
с goto мне код казался даже чище чем лесенка if
pps сейчас луна на половине, растущая )))
Так и я ж говорю, народ к полнолунию готовится :-)
По мне так когда приходится биться за кажный байт - лучше джампнуть через goto, чем заводить всякие условия.
Можно, конечно, полировать какаю-нить процедуру разворачивая и сворачивая циклы, переписывая кажный раз, но, как говорится - человек предполагает, а компилятор оптимизирует.
pps сейчас луна на половине, растущая )))
Так и я ж говорю, народ к полнолунию готовится :-)
то-есть апофеоз нам только предстоит )))
bwn,
та, не, Народ перед пятницей чуток разминается. Сраться из-за goto - вот это уж точно неприлично - куда как неприличнее, чем его использовать. :-)
А использование - ну, ещё один инструмент в ящике. Каждый сам решает что ему в ящике таскать (если в конторе корпоративного стандарта нет).
Кстати, о корпоративных стандартах:
был у нас один MISRA-ст, всё хотел нас в свою веру затащить, так в их MISRA-стском "Символе Веры" прямо сказано (стр. 65) : "The goto statement shall not be used" (здесь и далее номера страниц по PDF файлу, а не написанному на странице).
а вот ребята из NASA, похоже приземлённее немного - их "руководство по стилю" допускает goto в тех случаях, о которых как раз говорил baby_in_Arduino, см на стр. 38 и 67.
Так что, baby_in_Arduino, если нужна будет работа - на АвтоВАЗ даже не суйтесь, а вот в NASA попробуйте - могут и взять.
Ну, и наконец, специальная вкусняшка для совсем начинающих.
Вы, правда думаете, что умеете использовать goto? Ну, знаете, молодой матрос - салажонок думает, что он умеет материться, пока не встретит матёрого, боцмана :-) в общем, запускайте и разбирайте примеры, "жратва акулья" :---)))
Первый пример - примерно то, что нужно ТС - делаем что-то в зависимости от значения на аналоговом пине
А вот здесь как раз использование goto для выхода из цикла (как доктор прописал :-)
Ну, вот, как-то так :-)
За >20 лет программирования на С++ - ни разу не сталкивался с необходимостью применения goto, в том числе - при вложенных циклах. Путает goto прочтение логики - очень путает.
Не могу похвастаца тем же. :)
иногда, без goto код получаеца более на.уеверченным, особенно, када исключений нет. :)
Можете кидать в меня Дейкстрой.
а ведь похвастался!!! удачно применив в удачном месте )))
PS а ведь надысь в ролике посмотрел, почину в C goto - какашка
Вот из-за таких примеров, как у ЕвгенияП простому люду запрещают из цикла по goto выпрыгивать :(
А вообще, конечно, настолько это бессмысленно холиварная тема - if, goto и пр. Всё равно их компилятор в одну и ту же массу jmp превратит.
Первый пример - примерно то, что нужно ТС - делаем что-то в зависимости от значения на аналоговом пине
А вот здесь как раз использование goto для выхода из цикла (как доктор прописал :-)
PS а ведь надысь в ролике посмотрел, почину в C goto - какашка
Ох, не те Вы источники для образования выбираете. Про goto лучше Кнута читать (Кнут в программировании это как Хилл с Хоровицем).
DetSimen, тебе - безусловно можно.
А вот ТС ... не знаю ... в общем должен предупредить: "Все трюки выполнены профессионалами, не пытайтесь повторить их дома" :-)))
Ты ещё интерактивных батников в MS-DOS-е не видел, поди ))
PS а ведь надысь в ролике посмотрел, почину в C goto - какашка
Ох, не те Вы источники для образования выбираете. Про goto лучше Кнута читать (Кнут в программировании это как Хилл с Хоровицем).
МИФИ однако )))
Ты ещё интерактивных батников в MS-DOS-е не видел, поди ))
как не видел, это задание было моим ученикам, на ночь )))
Все трюки выполнены профессионалами
Тоже мне, бином Ньютона!
Привёл бы лучше пример, который ты китайцам приводил. Вот там и впрямь "выполнено профессионалами". Приведи? Если в лом писать, я могу написать и выложить, не против?
МИФИ однако )))
Я не про МИФИ, а про
надысь в ролике посмотрел
Или теперь, когда в МИФИ появилась кафедра теологии, там техническим вещам по ютубу учить стали?
Ворота, я сейчас должен убегать, если хочешь сам пример про функции напиши (с ардуиновским контекстом, конечно).
Вы, правда думаете, что умеете использовать goto? Ну, знаете, молодой матрос - салажонок думает, что он умеет материться, пока не встретит матёрого, боцмана :-) в общем, запускайте и разбирайте примеры, "жратва акулья" :---)))
Евгений, какое ж это goto ? - чистый switch case
Что касается меня... я старый структураст :) за все годы программирования goto не использовал ни разу.
P.S.
Блин, чёта не выходит, наверное, я какую-то тонкость забыл. Простите, мужики, что наобещал. Петрович, может сам когда-нибудь выложит.
МИФИ однако )))
Я не про МИФИ, а про
надысь в ролике посмотрел
Или теперь, когда в МИФИ появилась кафедра теологии, там техническим вещам по ютубу учить стали?
Тимофей Хирьянов выкладывает, уточняю, Московский Физико-Технический Институт ...запутался я в этих Ваших институтах )))
я хоть и не совсем начинающий но код в #23 начал взламывать мне мозг
когда я учился никакой магии с && не было (это ведь из нового стандарта C++?)
а адреса меток goto я мог взять только в ассемблерной вставке(мы так дельту оффсет вычисляли в базонезависимом коде)
Я, оказывается, забыл расшарить файл со стилем НАСА, пришёл запрос от кого-то из вас. Я расшарил для всех, попробуйте сейчас.
А у нас в ассемблере без goto совсем никак... Вовсе не структурированный язык, сцуко.
Так и на ассемблере всё можно оформить так что ассемблер и не узнаешь.)
А у нас в ассемблере без goto совсем никак... Вовсе не структурированный язык, сцуко.
Видел реализацию набора макросов для ассемблера - while, if и вся байда - а потом на этих макросах народ как на паскале писал. Я тогда так и не понял (и до сих пор не понимаю), чем заводить такие макросы, чего сразу на паскале-то не писать?
когда я учился никакой магии с && не было
О какой магии речь? Указателей что ли не было? И адреса брать нельзя было?
О какой магии речь? Указателей что ли не было? И адреса брать нельзя было?
нельзя было взять адрес два раза && (или что эта конструкция сейчас означает)))
О какой магии речь? Указателей что ли не было? И адреса брать нельзя было?
нельзя было взять адрес два раза && (или что эта конструкция сейчас означает)))
Читайте, сударь, читайте - полезное это дело
Видел реализацию набора макросов для ассемблера - while, if и вся байда - а потом на этих макросах народ как на паскале писал. Я тогда так и не понял (и до сих пор не понимаю), чем заводить такие макросы, чего сразу на паскале-то не писать?
Не встречал. А на ассемблере писал от безысходности - не нашел си. Тем более паскаля.
Видел реализацию набора макросов для ассемблера - while, if и вся байда - а потом на этих макросах народ как на паскале писал. Я тогда так и не понял (и до сих пор не понимаю), чем заводить такие макросы, чего сразу на паскале-то не писать?
Ну как зачем! Затем что вы получаете язык более высокого уровня не требующем компилятора! При этом сохраняя все преимущества ассемблера.
А на ассемблере писал от безысходности - не нашел си. Тем более паскаля.
Да на ассемблере тоже можно очень красиво писать используя макросредства. Ничем не хуже чем на Си. Другое дело, что с переносимостью проблема и стандартных библиотек нет.)
Так дед вон прямо в ардуино IDE ассемблерные файлы добавляет. Я тоже как-то пробовал. Нормально, прямо из файлв .ide вызываешь функции написанные на ассемблере. Проблемы-то никакой - писать на всём можно.
Так это не то. А вот что бы в ассемблере писать на си-подобном... http://caxapa.ru/lib/CwithoutC.html