Как заставить дисплей 1602 мигать при превышении температуры?
- Войдите на сайт для отправки комментариев
Ср, 06/06/2018 - 14:27
Собственно есть скетч для кого то он очень простой но не для меня нубика:-)
Вопрос впринципе в названии темы как заставить дисплей 1602 подключеный по I2C мигать при привышении определенной температуры?
Если вам не сложно просто поменяйте мой скетч чтоб я смог залить его и использовать, я к сожалению пока плохо понимаю в програмировнии ардуинки и только учусь:-(
Моя задача измерять температуру масла в двигателе и часть по железу я вполне осилил а вот с кодом проблема:-(
/*
Тестировалось на Arduino IDE 1.6.12
Дата тестирования 23.12.2016г.
*/
#include <Wire.h> // Подключаем библиотеку Wire
//#include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C
#include <DallasTemperature.h> // Подключаем библиотеку DallasTempature
#include "LCD_1602_RUS.h"
#define DS18B20 2 // Указываем, к какому выводу подключена DQ
byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса
LCD_1602_RUS lcd(0x27,16,2); // Задаем адрес и размер дисплея
OneWire oneWire(DS18B20);
DallasTemperature sensors(&oneWire);
void setup()
{
sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.setCursor(1,0); // Устанавливаем курсор на 1 строку, ячейка 2
lcd.print("МАСЛО"); // Выводим текст
lcd.setCursor(4,1); // Устанавливаем курсор на 2 строку, ячейка 2
lcd.print("TEMP OIL"); // Выводим текст
}
void loop()
{
lcd.createChar(1, simvol); // Создаем символ под номером 1
sensors.requestTemperatures(); // Считываем показания температуры
lcd.setCursor(7,0); // Устанавливаем курсор на 1 строку, ячейка 7
lcd.print(sensors.getTempCByIndex(0)); // Выводим показания температуры
lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12
lcd.print("\1"); // Выводим символ градуса
lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13
lcd.print("C"); // Выводим текст
}
Шантажируй, угрожай, бей, в конце концов. Он поймёт.
Шантажируй, угрожай, бей, в конце концов. Он поймёт.
Я один дисплей как раз забил почти до смерти припаивая к нему I2C конвертер так что даже дорожка отошла от платы:-) Ну да вот такой я криворукий в плане пайки:-))) Пришлось с бегать в магазин за готовым решением с уже припаянным I2C конвертором, и максимум на что меня хватило это добавить библиотеку поддержки (кривой поддержки) русского языка. Это мой дисплей наконец то понял:-)))
Видно тяжелый случай . Нужна Просветляющая лопата. http://foruma.su/?sub=9192
Видно тяжелый случай . Нужна Просветляющая лопата. http://foruma.su/?sub=9192
Спасибо, жизненно, до слез.
Видно тяжелый случай . Нужна Просветляющая лопата. http://foruma.su/?sub=9192
Спасибо классная лопата, очень надеюсь что вы еще не раз перечитаете это замечательное произведение когда будете задавать вопросы по интересующей вас теме в которой вы пока что не разбираетесь:-)
p.s. Судя по полезным советам тут ребята сами учились ходить, читать, писать после рождения и ни кто им в этом не помогал а только лишь им говорили иди учи мат. часть.
Здешние ребята, когда учились ходить, ноги переставляли сами, а не просили маму с папой помочь в этом. И родители не водили за них рукой по бумаге, когда учили писать.
Хотите мигать дисплеем? Не вопрос. Поищите "blink без delay", почитайте и помигайте светодиодом на D13 при превышении температуры. Как справитесь - поможем с подсветкой дисплея.
p.s. Судя по полезным советам тут ребята сами учились ходить, читать, писать после рождения и ни кто им в этом не помогал а только лишь им говорили иди учи мат. часть.
Вы не поверите, но 99% тех ребят что действительно разбираются - учились САМИ.
Кто то книги читал, кто то даташити, кто то исходые коды чужих программ, но делали это САМИ, и не ходили к соседу чтобы тот сделал за НЕГО.... =)
В данный момент что видно из вашего сообщения:
1) Вы спиздили гдето кусок кода, в котором вы не понимаете ни единой строки.
2) Вам лень учится, или желания нет или еще что, но вы не пытаетесь учится.
Лож и снова лож.
ибо:
http://arduino.ru/forum/proekty/dva-datchika-ds18b20-i-vyvod-na-lcd#comm...
Ничего не напоминает?
Такие задачи озвучивают в ином разделе : http://arduino.ru/forumy/ishchu-ispolnitelya
Как заставить дисплей 1602 мигать при превышении температуры?
Добрым словом и пистолетом.
Вопрос впринципе в названии темы как заставить дисплей 1602 подключеный по I2C мигать при привышении определенной температуры?
А что Вы подразумеваете под словом "мигать"?
Вопрос впринципе в названии темы как заставить дисплей 1602 подключеный по I2C мигать при привышении определенной температуры?
А что Вы подразумеваете под словом "мигать"?
Подсведку включать выключаться интервалом например 1 секунда, так скажем для привлечения внимания.
То есть мигать не экраном, а подсветкой?
Ну тогда Вы сами предложили решение - включать и выключать подсветку с интервалом 1 секунда.
Но мне кажется, секунда - многовато. Я бы отвел на одну фазу 100-250 мс.
То есть мигать не экраном, а подсветкой?
Ну тогда Вы сами предложили решение - включать и выключать подсветку с интервалом 1 секунда.
Но мне кажется, секунда - многовато. Я бы отвел на одну фазу 100-250 мс.
Да подсветкой:-) Да и интервал это не то что меня волнует, интервал то поменять не сложно. Для меня сложно понять как правильно написать скетч, точнее дополнить тут скетч что уже есть, в програмированни я почти ноль пытаясь методом тыка изучить этот вопрос но как то плохо выходит. Я понимаю конечно что нужно учить языки програмирования и безусловно стремлюсь к этому. Но вот мне конкретно к выходным надо поставить датчик температуры масла на мот (поскольку производитель зараза не предусмотрел измерение температуры в стоке)
А ребята форумчане тапками закидали вместо того чтоб помочь поправить скетч, обидно однако:-(
valek101, если Вы хотите научиться, здесь Вам помогут, а если Вам нужен готовый скетч - то Вы ошиблись разделом, нужно - в "Ищу исполнителя".
Не обратил внимание что дисплей по I2C, нужно смотреть как подключена подсветка.
К какому пину подключена подсветка?
Дисплей подключен по I2c интерфейсу так что затрудняюсь сказать к какому пину. Но на Конверторе I2C есть джампер при размыкании которого подсветка выключаеться, соответственно я могу на любой пин бросить провода с контактов джампера. Уверен что это вообще не правильное решение и в меня опять сейчас тапками будут бросать, так что я зарание спрятался под столом:-)
Попробуйте заменить lcd.backlight(); на lcd.noBacklight(); и посмотрите будет ли гореть подсветка у дисплея.
valek101, проблема не создании мигания, проблема научить вас более "перспективному стилю" понимать и писать программы.
Попробуйте заменить lcd.backlight(); на lcd.noBacklight(); и посмотрите будет ли гореть подсветка у дисплея.
Нет не горит
Нет не горит
Вот и отлично! Осталось только дописать в коде условие по которому он будет гаснуть и загораться.
Опишите при каких значениях это должно происходить?
valek101, проблема не создании мигания, проблема научить вас более "перспективному стилю" понимать и писать программы.
Я безусловно это понимаю, и конечно же это и будет моей целью, Я с arduino познакомился буквально месяц назад и начинаю изучать этот вопрос и конечно же результаты будут но позже, железом для ардуинки я уже закупился и уже понял что мне необходимо еще. И вот я на стадии начала понимания и не куда я не спешу, изучая по мере моих сил что это вообще такое ардуино:-)
Нет не горит
Вот и отлично! Осталось только дописать в коде условие по которому он будет гаснуть и загораться.
Опишите при каких значениях это должно происходить?
Условия простые при привышении температуры в 120 градусов начинать нервно мигать при температуре ниже 120 градусов просто гореть. Там конечно хочеться чтоб при других порогах температуры мигал например реже или чаще, но это я потом и сам додумаю как реализовать покопавшись дальше в скетче.
И вот я на стадии начала понимания и не куда я не спешу, изучая по мере моих сил что это вообще такое ардуино:-)
черезчур академично. Новички ничего не поймут, а кто разбирается - умрут со скуки.
Кстати, теоретически ваши ссылочные классы таят в себе потенциальные проблемы... вот почитайте
http://pages.cs.wisc.edu/~hasti/cs368/CppTutorial/NOTES/CLASSES-PTRS.html
Поддержу пользователя b707 Я сейчас нифига не понял, а через пол года возможно буду умирать от скуки:-) (но это только возможно ведь в данный момент мне не понять)
У нас в русском языке не всегда все очевидно, про языки програмирования я вообше молчу:-)
Вот как то так
Пробуйте до тела Setup дописать:
в теле setup
в теле loop следующее
if ((millis()-time>=250)&&(sensors.getTempCByIndex(0)>=35)) { x=!x; lcd.backlight(x); time = millis(); } else if (sensors.getTempCByIndex(0)<35) { lcd.backlight(); x=true; }Или так в теле loop если первый варинт не заработает
if ((millis()-time>=250)&&(sensors.getTempCByIndex(0)>=35)) { x=!x; if (x) { lcd.backlight(); time = millis(); } else { lcd.noBacklight(); time = millis(); } } else if (sensors.getTempCByIndex(0)<35) { lcd.backlight(); x=true; }У нас в русском языке не всегда все очевидно, про языки програмирования я вообше молчу:-)
Напрасно. Ественные языки - да, "естественно". А вот языки программирования - они строго формализованы. Там всё однозначно и никаких непоняток не возникает.
А вот языки программирования - они строго формализованы. Там всё однозначно и никаких непоняток не возникает.
При всём к Вам безграничном уважении, я бы не стал так утверждать, имея ввиду С++ синтаксис, где одна и та же звездочка, например, означает 4 разных операции в разном контексте. Однозначно там только для того, кто этим занимается десятки лет без перерыва. :) Для новичков - это попа.
Нет, ну я не о новичках, а о том, что синтаксис формального языка жёстко описан и формализован при помощи формальных грамматик и никаких неоднозначностей там нет и быть не может. Это ведь так, правильно? Ну, а то, что это всё надо знать (а не "вчера скачал скетч, поменял, а он компилироваться перестал"), это, разумеется, никто не отменял.
Согласен.
Но для меня С++ по прежнему это танцы на граблях с завязанными глазами. Хотя Страутрупный Коран читаю и перечитываю постоянно. :)
Видимо, последний IQ пропил.
Ну что заработало или нет?
Ну что заработало или нет?
Нет к сожалению, при компиляции выдает ошибку
Да тяжелый случай, еще раз внимательно перечитайте сообщение с листингом программы.
Да тяжелый случай, еще раз внимательно перечитайте сообщение с листингом программы.
Вот по этому и сижу молчу ничего больше не спрашиваю, поскольку у меня не тяжелый, у меня клинический случай:-)
Так я вроде как добавил
/* Тестировалось на Arduino IDE 1.6.12 Дата тестирования 23.12.2016г. */ #include <Wire.h> // Подключаем библиотеку Wire #include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #include "LCD_1602_RUS.h" #define DS18B20 2 // Указываем, к какому выводу подключена DQ byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса LCD_1602_RUS lcd(0x27,16,2); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); boolean x=true; unsigned long time; void setup() { time = millis(); sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(1,0); // Устанавливаем курсор на 1 строку, ячейка 2 lcd.print("МАСЛО"); // Выводим текст lcd.setCursor(4,1); // Устанавливаем курсор на 2 строку, ячейка 2 lcd.print(""); // Выводим текст } void loop() { if ((millis()-time>=250)&&(sensors.getTempCByIndex(0)>=35)) lcd.createChar(1, simvol); // Создаем символ под номером 1 sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(7,0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(sensors.getTempCByIndex(0)); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); // Выводим текст } x=!x; if (x) { lcd.backlight(); time = millis(); } else { lcd.noBacklight(); time = millis(); } } else if (sensors.getTempCByIndex(0)<35) { lcd.backlight(); x=true; }facepalm
ща перепешу
ща перепешу
Я знаю что я полный олень, мне проще разобрать и собрать двигатель чем прочитав скетч понять его хоть на 25% процентов. В этом сейчас моя проблема и состоит.
/* Тестировалось на Arduino IDE 1.6.12 Дата тестирования 23.12.2016г. */ #include <Wire.h> // Подключаем библиотеку Wire //#include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #include "LCD_1602_RUS.h" #define DS18B20 2 // Указываем, к какому выводу подключена DQ byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса LCD_1602_RUS lcd(0x27,16,2); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); boolean x=true; unsigned long time; void setup() { sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(1,0); // Устанавливаем курсор на 1 строку, ячейка 2 lcd.print("МАСЛО"); // Выводим текст lcd.setCursor(4,1); // Устанавливаем курсор на 2 строку, ячейка 2 lcd.print("TEMP OIL"); // Выводим текст time = millis(); } void loop() { lcd.createChar(1, simvol); // Создаем символ под номером 1 sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(7,0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(sensors.getTempCByIndex(0)); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); // Выводим текст if ((millis()-time>=250)&&(sensors.getTempCByIndex(0)>=35)) { x=!x; if (x) { lcd.backlight(); time = millis(); } else { lcd.noBacklight(); time = millis(); } } else if (sensors.getTempCByIndex(0)<35) { lcd.backlight(); x=true; } }Ну?
Пробуй
Вот блин какая красота:-) Все работает поклон вам большой:-)
Вот тперь могу со спокойной душой сидеть и смотреть в ваш рабочий скетч, радоваться тому что в пятницу поставлю это дело на мотик:-)
При какой температуре срабатывает?
При какой температуре срабатывает?
35:-) сейчас махну на 120
Нука махни и код выложи)
Нука махни и код выложи)
Не ну циверки то с 35 на 120 поменять в двух местах ума не надо:-)
Фейл, на 105 градусах у зажигалки которой нагревал датчик вылетел кремень вместе с пружиной нафиг:-)
Я руки в ноги побежал в магаз за новой зажигалкой:-))))
/* Тестировалось на Arduino IDE 1.6.12 Дата тестирования 23.12.2016г. */ #include <Wire.h> // Подключаем библиотеку Wire //#include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #include "LCD_1602_RUS.h" #define DS18B20 2 // Указываем, к какому выводу подключена DQ byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса LCD_1602_RUS lcd(0x27,16,2); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); boolean x=true; unsigned long time; void setup() { sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(1,0); // Устанавливаем курсор на 1 строку, ячейка 2 lcd.print("МАСЛО"); // Выводим текст lcd.setCursor(4,1); // Устанавливаем курсор на 2 строку, ячейка 2 lcd.print("TEMP OIL"); // Выводим текст time = millis(); } void loop() { lcd.createChar(1, simvol); // Создаем символ под номером 1 sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(7,0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(sensors.getTempCByIndex(0)); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); // Выводим текст if ((millis()-time>=250)&&(sensors.getTempCByIndex(0)>=120)) { x=!x; if (x) { lcd.backlight(); time = millis(); } else { lcd.noBacklight(); time = millis(); } } else if (sensors.getTempCByIndex(0)<120) { lcd.backlight(); x=true; } }Нука махни и код выложи)
Не ну циверки то с 35 на 120 поменять в двух местах ума не надо:-)
Фейл, на 105 градусах у зажигалки которой нагревал датчик вылетел кремень вместе с пружиной нафиг:-)
Я руки в ноги побежал в магаз за новой зажигалкой:-))))
/* Тестировалось на Arduino IDE 1.6.12 Дата тестирования 23.12.2016г. */ #include <Wire.h> // Подключаем библиотеку Wire //#include <LiquidCrystal_I2C.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #include "LCD_1602_RUS.h" #define DS18B20 2 // Указываем, к какому выводу подключена DQ byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса LCD_1602_RUS lcd(0x27,16,2); // Задаем адрес и размер дисплея OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); boolean x=true; unsigned long time; void setup() { sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит, то есть кратность 0.5 градуса lcd.init(); // Инициализация lcd lcd.backlight(); // Включаем подсветку lcd.setCursor(1,0); // Устанавливаем курсор на 1 строку, ячейка 2 lcd.print("МАСЛО"); // Выводим текст lcd.setCursor(4,1); // Устанавливаем курсор на 2 строку, ячейка 2 lcd.print("TEMP OIL"); // Выводим текст time = millis(); } void loop() { lcd.createChar(1, simvol); // Создаем символ под номером 1 sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(7,0); // Устанавливаем курсор на 1 строку, ячейка 7 lcd.print(sensors.getTempCByIndex(0)); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); // Выводим текст if ((millis()-time>=250)&&(sensors.getTempCByIndex(0)>=120)) { x=!x; if (x) { lcd.backlight(); time = millis(); } else { lcd.noBacklight(); time = millis(); } } else if (sensors.getTempCByIndex(0)<120) { lcd.backlight(); x=true; } }Домашнее задание прочитать про все что я дописал в коде и описать весь процесс обычными словами).
Домашнее задание прочитать про все что я дописал в коде и описать весь процесс обычными словами).
Окей этим я и займусь:-) Тогда риторический вопрос, каким текстовым редактором с подсветкой синтаксиса народ пользуеться чтоб не писать прямо в Arduino IDE ? Мой Notepad ++ что то нифига не подсвечивает зараза:-(
Понятно конечно что каждому свое, но наверняка есть что то что использует большинство:-)