Официальный сайт компании Arduino по адресу arduino.cc
ребят помогите пожалуйста. скетч компилируется нормально. но на дисплей почему то выдает температуру 401-415 градусов
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 17/01/2018 - 01:04
#include <LiquidCrystal.h> #include <DallasTemperature.h> LiquidCrystal lcd(7,6,5,4,3,2); DallasTemperature sensors; int tempPin = 9; // выход ds18b20 int fan = 11; // вывод на вентилятор int led = 8; // вывод на светодиод int temp; int tempMin = 30; // температура начала вращения вентилятора int tempMax = 70; // максимальная температура, когда вентилятор вращается на 100% int fanSpeed; int fanLCD; void setup() { pinMode(fan, OUTPUT); pinMode(led, OUTPUT); pinMode(tempPin, INPUT); lcd.begin(16,2); } float temperature() { // Измеряем температуру 10 секунд delay(100); // Задержка перед первым измерением sensors.requestTemperatures(); // Запрос на измерение температуры (1-й ошибочный) delay(500); // Задержка перед поторным измерением sensors.requestTemperatures(); // Запрос на измерение температуры (повторный) float t = float(sensors.getTempCByIndex(0)); // Получаем значение температуры delay(9400); // Задержка, чтобы датчик не нагревался от частых измерений return(t); } void loop() { temp = readTemp(); // получаем температуру if(temp < tempMin) { // если temp меньше минимума fanSpeed = 0; // кулер не вращается digitalWrite(fan, LOW); } if((temp >= tempMin) && (temp <= tempMax)) { // если temp больше минимума fanSpeed = map(temp, tempMin, tempMax, 32, 255); // текущая скорость вентилятора fanLCD = map(temp, tempMin, tempMax, 0, 100); // скорость вращения для отображения на LCD analogWrite(fan, fanSpeed); // вращаем кулер со скоростью fanSpeed } if(temp > tempMax) { // если temp больше максимума digitalWrite(led, HIGH); // включаем светодиод } else { // иначе выключаем светодиод digitalWrite(led, LOW); } lcd.print("TEMP: "); lcd.print(temp); // отображение температуры lcd.print("C "); lcd.setCursor(0,1); // перевод курсора на следующую сторку lcd.print("FANS: "); lcd.print(fanLCD); // отображение скорости вращения вентилятора lcd.print("%"); delay(200); lcd.clear(); } int readTemp() { // получить температуру и переконвертировать ее в цельсии temp = analogRead(tempPin); return temp; }
сейчас отключил датчик температуры, а он все равно показывает 401-415 градусов. где то я забыл подружить датчик температуры с дисплеем
В строке 20 Вы определли функцию "
float
temperature()
" но потом нигде и ни разу её не используете!Вы считаете, что температуру у Вас читает функция "
int
readTemp()
" (строка 56), но она никак (от слова совсем) не использует Ваш температурный датчик, объявленный в строке 4 - вообще никак не использует.Вот и и думайте
1. Зачем Вам температурнй датчик, который Вы не используете?
2. Зачем Вам функция, которая ни разу не вызывается.
Спасибо Женя. Сейчас попробую исправить.
Нестыковка тут:
int tempPin = 9; // выход ds18b20
temp = analogRead(tempPin);
У вас датчик Даллас или что-то аналоговое?
даллас , я тоже об этом думаю. мне кажется где то здесь ошибка
мне кажется где то здесь ошибка
Эта фраза - лучшая за сегодняшний вечер :) :) :)
Хоть кому то настроение поднял))))
можно и лайк поставить))
вообще вот мой скетч который я доработал
он отлично работает. но как только я начинаю работать с вентилятором то начинается трындец. может подскажете. как правильно добавить вентилятор в скетч. чтобы можно было контролировать обороты
что то типа такого
................
это отрывок из скетча который я нашел в инете
грубо говоря было три скетча
1. датчик температур
2. дисплей 1602
3. вентилятор.
первые 2 я успешно объеденил а вот третий добавить не получается
Дальше - у вас уже есть кусок кода, который оперирует с tempC. Создайте только переменные tempMin и tempMax, в которые запишите максимальную и минимальную температуры.
но у меня в 9 и 10 строке уже есть определенные минимум и максимум разве это не должно работать?
у меня ds18b20 подключенный к 9 пину. он не аналоговый. значит мне надо удалить строку temp = analogRead(tempPin); и заменить на 9 пин ??? как это должно выглядеть?
Пробуй. Я не компилировал, главное, чтобы ты понял, что к чему:
РЕБЯТ, КОРОЧЕ, ЕСЛИ СМОЖЕМ В БЛИЖАЙШЕЕ ВРЕМЯ ВОТ К ЭТОМУ СКЕТЧУ ДОБАВИТЬ КОМАНДЫ ВЕНТИЛЯТОРУ ,ЧТОБЫ ОН ПРИ 36 ГРАДУСАХ НАЧИНАЛ КРУТИТЬСЯ И ЗАГОРАЛСЯ ДИОД, А ПРИ 38 МАКСИМАЛЬНО ВРАЩАЛСЯ, Я В ДОЛГУ НЕ ОСТАНУСЬ. ЕСЛИ НАДО Я ОТБЛАГОДАРЮ ПО-ЧЕЛОВЕЧЕСКИ. МНЕ НЕ ЖАЛКО .ЧЕСТНОЕ СЛОВО
ДИМАН ТАВАЙ ПОПРОБУЕМ ДОБИТЬ СЕГОДНЯ ИЛИ ЗАВТРА. А ТО У МЕНЯ ЗАЧЕТ ГОРИТ ПО ЭЛЕКТРОНИКЕ. ПРЕПОД ПОРВЕТ ЕСЛИ ТАКОЕ ЧТО НИБУДЬ НЕ ПРИДУМАЮ . ВЫРУЧИ
ЩА ПОЧИТАЮ. НО КОМПИЛЯЦИЯ ЗАВЕРШЕНА))))))
Я тебе выше дал кусок кода, где в зависимости от температуры что-то делается. Причём - это твой код ;), я просто поправил присвоение значения температуры в переменную, и всё.
ПРОСТО Я ТАКИЕ МЕЛОЧИ МОГУ НЕ ЗАМЕЧАТЬ А ПОТОМ ТЕРЯЮСЬ. Я ВОТ СЕЙЧАС ДАЖЕ СО СВОИМ СТАРЫМ КОДОМ СРАВНИВАЮ И НЕ ВИЖУ ОТЛИЧИЙ. НЕ ВНИМАТЕЛЬНЫЙ ПИПЕЦ
ЩА СИЖУ ЧИТАЮ В ЧЕМ ОШИБКА БЫЛА. НО ВСЕЖЕ НАДО ЭТО В ЖЕЛЕЗЕ ТЕПЕРЬ СОБРАТЬ. дИМАН ДАВАЙ Я ТЕБЕ СОТЕН НА БАЛАНС ЗАКИНУ . ВЕДЬ ПОМОГ . НЕ ПОЛЕНИЛСЯ. НЕ МОГУ НЕ ОТБЛАГОДАРИТЬ
у меня ds18b20 подключенный к 9 пину. он не аналоговый. значит мне надо удалить строку temp = analogRead(tempPin); и заменить на 9 пин ??? как это должно выглядеть?
да , удалить всю функцию надо или переделать, так примерно:
ДИМАН СКАЖИ В КРАТЦЕ ЧЕМ ОТЛИЧАЕТСЯ КОМАНДА
lcd.print(sensors.getTempCByIndex(0));
ОТ temp = sensors.getTempCByIndex(0);
Не кричи, плз, голова разболелась от заглавных букв.
lcd.print(sensors.getTempCByIndex(0)); - тут ты просто печатаешь температуру с первого датчика на экран
temp = sensors.getTempCByIndex(0); - тут ты сохраняешь температуру с первого датчика в переменную, и потом с этой переменной можешь как угодно и что угодно делать.
теперь понял) хотя с виду одно и тоже написано) напиши номер тлф закину на баланс. спасибо
напиши номер тлф закину на баланс. спасибо
Забей ;)
я твой должник. если что имей ввиду 89202216530