Выполнение действий при определенной температуре или замыкания контактов
- Войдите на сайт для отправки комментариев
Ср, 04/07/2012 - 00:30
Как сделать чтобы при температуре например 60градусов по цельсию отрабатывал на опреленный контакт
или при нажатии кнопки но при этом остальное тоже работало
вот пока основа кода но планируется еще и создание меню с перелистыванием.
#include <LiquidCrystalRus.h> #include <OneWire.h> #include <OneWireTempSensor.h> LiquidCrystalRus lcd(12, 11, 5, 4, 3, 2); OneWireTempSensor sensors(8); int numdevs; int value; int temp; byte newChar[8] = { B11000, B11000, B00110, B01001, B01000, B01001, B00110, B00000 }; void setup() { lcd.createChar(0, newChar); lcd.begin(16, 2); numdevs = sensors.getDevices(); } void loop() { value = (int) sensors.getTempC(0); if (value != 85) { if (value < 10) { temp = value/10; } else { temp = value; } } lcd.setCursor(0,0); lcd.print("Tемпература="); lcd.setCursor(12,0); lcd.print(temp); lcd.setCursor(14,0); lcd.write(0); }
А где вписывать какой пин за что отвечает
В каком смысле? На бумажке, в голове.... вы же собираете схему, вы и решаете какой пин за что отвечает, вы же и пишите код который опрашивает пины и выполняет какие-то действия в зависимости от их состояния.
Опросили, например, 18-тый пин. Что делать если он в high (или Low) - решать вам. Вот за это "что делать" он и будет "отвечать".
тоесть не понял как сделать исполнение если температура 60 то нужно включить пин 13 например а если падает то отключить пин 13
http://arduino.ru/Reference/Else
http://arduino.ru/Reference/DigitalWrite
P.S. "Ардуино не требует знание программирования" - маркетинговый миф.
ок ща гляну
вот пока без кнопки
В чем смысл строчки 32? Температура 85 это действительно какое-то особое событие или "приблудилось"?
В чем смысл строк 34-40? Что вы пытались этим добится?
Строка 45 и 47-мь зачем? Вы же, вроде, хотели "влючить если больше, выключить если меньше", а так у вас вышло "мигать если больше, ничего не делать если меньше".
Да согласен с 45-47 решил пока оставить добавил кнопку но у меня пошли прерывания с секундным интервалом
32 строка это тупо копипас с сайта только переделал пины под мой ник
вот код с кнопкой почему у неё идет прерывание сигнала?
вот подредактировал рабочий с кнопкой и от температуры если можно чтото лишнее убрать объясниете
теперь при заданной температуре включается пин и при определенной выключается а так же сделал на другой пин действие от управления кнопкой
В чем смысл строчки 32? Температура 85 это действительно какое-то особое событие или "приблудилось"?
85 - это то значение (в градусах Цельсия) теспературы, которое считывается с датчика (LSB = b'01010000', MSB = b'00000101') в случае неудачи с преобразованием (не выждали 750 мсек и т.п.)
В чем смысл строчки 32? Температура 85 это действительно какое-то особое событие или "приблудилось"?
85 - это то значение (в градусах Цельсия) теспературы, которое считывается с датчика (LSB = b'01010000', MSB = b'00000101') в случае неудачи с преобразованием (не выждали 750 мсек и т.п.)
Спасибо огромное. Действительно "тонкий нюанс". Сколько раз поднимались тут темы по работе с этими датчиками, а эта тонкость первый раз упомянулась. Причем, как я понял, это "полудокументированная фича", даташит говорит, мелким шрифтом, только "The power-on reset value of the temperature register is +85°C."
Честно говоря даже в голову не пришло что это относится с "специфике датчика", думал что это какие-то ошметки бизнес-логики.
Типикстартеру: вообщем смысл стал понятен. Оставлять или эту проверку, в какой-то степени дело вкуса. Если "все хорошо работает", то, по идее, она никогда не должна влиять на скетч ( "выжидание 750 мсек" уже встроенно в библиотеку). Вообщем с одной стороны она вроде как-бы "захламляет скетч" и рука тенется ее убрать, с другой, конечно, "грамотный подход к программированию" требует что-бы код обрабатывал все возможные нештатные ситуации (то есть оставить). Лично я бы оставил, но добавил-бы к этому условию else в которое вписал вывод сообщения об ошибке (в Serial или LCD).
вот подредактировал рабочий с кнопкой и от температуры если можно чтото лишнее убрать объясниете
Ну что "лишнее что не лишние" - трудно сказать. Это вы как автор скетча должны знать что и зачем вы писали. Общий подход такой: нужно понимать что делает каждая строчка ВАШЕГО кода. Либо убирать, либо разбиратся "зачем оно тут". Мысленно в голове прокрутить "что они делают" и решить нужны они вам или нет.
Лично меня - больше всего смущают строки 39-46. С моей точки зрения они тут либо лишние (и промежуточная переменная value - тоже не нужна), либо неудачная попытка сделато что-то полезное (как-то по другому выводить температуру меньше 10).
По поводу оформления кода: как минимум нужно сделать отступы, что-бы можно было вменяемо читать и было видно какая закрывающая скобка к какой отрывающей отностися. Самому же легче будет. Вот, например, в строках 58-60-т, есть сильное подозрение что вы else приципили не к тому if-у которому хотели.
Далее: если "действие" которые выполняются в каком-то if состояет из одно строчки, то можно не оборачиваеть его фигурными скобками и вообще написать в одну строчку
IMHO так код выглядить более читаемым, но это "дело вкуса".
Так же, учитывая ваши попытки вставить delay(), рекомендую посмотреть пример http://arduino.ru/tutorials/BlinkWithoutDelay
А вообще delay() нужно избегать по возможности. У него есть слишком непряитный "побочный эффект" - на нем скетч останавливается. И ничего не происходит (ни опроса кнопок, ни опроса датчиков, ни вывода отладочной информации)