подскажите чайнику. 2датчика температуры: улица и помещение
- Войдите на сайт для отправки комментариев
Ср, 04/12/2013 - 21:27
Только приобрел ардуино уно с програмированием не сталкивался подскажите как на дисплей вывести сразу показания с 2 датчиков, получается выводить только одно
Не могу разобраться
примерно так:
улица: +7 С
помещение: +23 С
примерно так:
улица: +7 С
помещение: +23 С
Неправильно :)
Улица и теплота воды: +27 С
Помещение: +22 С
Приколисты блин, с кодом на 2 датчика помогите
Сегодня уже поздно завтра более подробно все опишу
не, не нужно описывать - я сам за ночь догадаюсь
Код на два датчика:
int temp_1 = dat4ik_1.read(); int temp_2 = dat4ik_2.read(); display.write("улица "); display.write(temp_1); display.write("помещение "); display.write(temp_2);UPD:
А вообще у вас проблемы не с программированием, как и у многих "новичков", все гораздо хуже... Проблема кроется в глобальном непонимании окружающего вас мира, ведь вы создавая эту тему даже и не подумали что в мире существует тысячи типов датчиков температуры, которые можно подключить к ардуине, вы ведь даже не предположили, что есть десятки схем подключения каждого из этих датчиков и самое главное - код... кода может быть написано миллион вариаций, ибо каждый человек мыслит по своему.
После того как вы это осмыслите, посмотрите что вы написали выше и подумайте кто вам сможет помочь...
Ну а если вы все-таки осознаете что нужно делать дальше, то обязательно прочтите это Вставка программного кода в тему/комментарий.
Код на два датчика:
int temp_1 = dat4ik_1.read(); int temp_2 = dat4ik_2.read(); display.write("улица "); display.write(temp_1); display.write("помещение "); display.write(temp_2);UPD:
А вообще у вас проблемы не с программированием, как и у многих "новичков", все гораздо хуже... Проблема кроется в глобальном непонимании окружающего вас мира, ведь вы создавая эту тему даже и не подумали что в мире существует тысячи типов датчиков температуры, которые можно подключить к ардуине, вы ведь даже не предположили, что есть десятки схем подключения каждого из этих датчиков и самое главное - код... кода может быть написано миллион вариаций, ибо каждый человек мыслит по своему.
После того как вы это осмыслите, посмотрите что вы написали выше и подумайте кто вам сможет помочь...
Ну а если вы все-таки осознаете что нужно делать дальше, то обязательно прочтите это Вставка программного кода в тему/комментарий.
Про датчики и типы подключения не рассказывайте я КИПовец а вот за код огромное спасибо помогли, так еще не пробовал
И так, теперь я не пойму в какую часть всунуть
Сам код:
#include <LiquidCrystal.h> #include <math.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD int backLight = 13; void setup(void) { pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(10,0); } // создаем метод для перевода показаний сенсора в градусы Цельсия double Getterm(int RawADC) { double temp; temp = log(((10240000/RawADC) - 10000)); temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp)); temp = temp - 273.15; return temp; } // создаем метод для вывода на экран показаний сенсора void printTemp(void) { double temp = Getterm(analogRead(3)); // считываем показания с сенсора lcd.clear(); lcd.setCursor(0,0); lcd.print("Temp"); lcd.setCursor(5,0); lcd.print(temp); lcd.print(" C"); } void loop(void) { printTemp(); // вызываем метод, созданный ранее delay(1000); }Не стебайтесь только сильно, только учусь, из програмирования частично помню только бейсик который учил 20 лет назад )))
void printTemp(void) { lcd.clear(); lcd.setCursor(0,0); double temp = Getterm(analogRead(3)); // считываем показания с сенсора 1 lcd.print("Temp"); lcd.setCursor(5,0); double temp = Getterm(analogRead(2)); // считываем показания с сенсора 2 lcd.print(temp); lcd.print(" C"); }Да..слабовато с программированием..
конечно lcd.clear(); тут особо не нужен,лучше в конце добавить в выводы пробелы..
Вернулся к той же проблеме с которой столкнулся сам
Про датчики и типы подключения не рассказывайте я КИПовец [...]
Что же Вы, "как КИПовец", даже тип датчика не указываете?
Даже если с его подключением у Вас никаких вопросов нет, алгоритмы обработки данных, предположим, с Pt100 и DS18B20 абсолютно разные.
Вам ли, "как КИПовцу", этого не знать...
как не крути алгоритм схож ну раз уж вам это так важно Термистор NTC 10kR(25°C)
Даже алгоритмы вывода обработанных данных на дисплей могут быть разными - текстовый дисплей, матричный дисплей, TFT, дисплей компьютера...
Если отвечавшие угадали, что же конкретно Вам требовалось, то и чудненько - не будет многостраничной инсценировки заезженной на этом форуме картины "партизан на допросе"...
В принципе пользователи угадали, но из программы видно какой я дисплей использую только проблема не решена, выдает все ту же ошибку.
Имеем:
1. Arduino Uno
2. LCD 1602
3. 2 датчика NTC 10kR
Код для одного датчика:
// подключаем две библиотеки для работы с LCD и математических вычислений #include <LiquidCrystal.h> #include <math.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD int backLight = 13; void setup(void) { pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); } // создаем метод для перевода показаний сенсора в градусы Цельсия double Getterm(int RawADC) { double temp; temp = log(((10240000/RawADC) - 10000)); temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp)); temp = temp - 273.15; return temp; } // создаем метод для вывода на экран показаний сенсора void printTemp(void) { double temp = Getterm(analogRead(4)); // считываем показания с сенсора lcd.clear(); lcd.setCursor(0,0); lcd.print("Temperature is:"); lcd.setCursor(0,1); lcd.print(temp); lcd.print(" C"); } void loop(void) { printTemp(); // вызываем метод, созданный ранее delay(1000); }Проблема в том, что как я не крутил со строками выдает одну и ту же ошибку:
Да вроде нет ошибок никаких ,проверял на версии ИДЕ 1.0.5
Именно тут нет но эта програмка на 1 двтчик надо на 2 код уоторый посоветовали выше выдал все ту же ошибку
А...
void printTemp(void) { lcd.clear(); lcd.setCursor(0,0); double temp = Getterm(analogRead(3)); // считываем показания с сенсора 1 lcd.print("Temp"); lcd.setCursor(5,0); double temp2 = Getterm(analogRead(2)); // считываем показания с сенсора 2 lcd.print(temp2); lcd.print(" C"); }алгоритмы обработки данных, предположим, с Pt100 и DS18B20 абсолютно разные.
как не крути алгоритм схож
Ага, щаз, схож прям как две капли воды... Вы видать как КИПовец и не знаете о существовании разделения датчиков на такие типы как аналоговые и цифровые... И в каком же это месте обработка данных может быть схожа у этих разных типов датчиков?
Простите, специально для вас написал какой использую датчик и железо, я задал вопрос не для того что б читать вашу демагогию о типах датчиков, при всем этом вопрос был конкретен и вся информация выложенна, если вам нечего ответить по моему вопросу, я думаю и писать не стоит
Да только temp забыли вывести
void printTemp() { lcd.clear(); lcd.setCursor(0, 0); double temp = Getterm(analogRead(3)); // считываем показания с сенсора 1 lcd.print("Temp1"); lcd.print(temp); lcd.setCursor(6,0); lcd.print(" C"); lcd.setCursor(0, 1); double temp2 = Getterm(analogRead(2)); // считываем показания с сенсора 2 lcd.print("Temp2"); lcd.print(temp2); lcd.setCursor(6,1); lcd.print(" C"); }Простите, специально для вас написал какой использую датчик и железо, я задал вопрос не для того что б читать вашу демагогию о типах датчиков, при всем этом вопрос был конкретен и вся информация выложенна, если вам нечего ответить по моему вопросу, я думаю и писать не стоит
Только приобрел ардуино уно с програмированием не сталкивался подскажите как на дисплей вывести сразу показания с 2 датчиков, получается выводить только одно
Именно из-за такого вопроса здесь и развилась вся эта демагогия... Кстати, в результате которой и выясняется вся остальная информация.
// подключаем две библиотеки для работы с LCD и математических вычислений #include <LiquidCrystal.h> #include <math.h> LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD int backLight = 13; void setup(void) { pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); } // создаем метод для перевода показаний сенсора в градусы Цельсия double Getterm(int RawADC) { double temp; temp = log(((10240000/RawADC) - 10000)); temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp)); temp = temp - 273.15; return temp; } // создаем метод для вывода на экран показаний сенсора void printTemp() { lcd.clear(); lcd.setCursor(0,0); double temp = Getterm(analogRead(4)); // считываем показания с сенсора lcd.print("Temp:"); lcd.print(temp); lcd.setCursor(5,0); lcd.print(" C"); lcd.setCursor(0,1); double temp = Getterm(analogRead(3)); // считываем показания с сенсора 2 lcd.print("Temp2"); lcd.print(temp2); lcd.setCursor(5,1); lcd.print(" C"); } void loop(void) { printTemp(); // вызываем метод, созданный ранее delay(1000); }С вашим кодом тоже ругается, ниже выложил код и ошибку на сколько я понимаю еще в расчетах надо делать какие то изменения
Смотрите ниже
Это не с моим кодом ругается, а с ВАШИМ !!! Посмотрите что у вас написано в 41 строке и что у меня в 13 строке.
UPD:
ВНИМАТЕЛЬНЕЕ смотрим примеры кода или не лезем вообще в программирование - лучше поручите кому нибудь ,за денешку..
строка 41 вместо
надо
строка 41 вместо
надо
Огромное человеческое спасибо, заработало, будем мудрить дальше, следующим предполагаю к этому всему добавить Солнечный трекер, для направления солнечных батарей, которые в свою очередь заряжают аккумулятор от которого идет доп питание на Arduino, ожидайте еще вопросы )))
На здоровье! Это я сегодня такой добрый. Обычно после моих советов мне тут морду набить грозятся. Хотя уже месяца 1,5 как никто не порывался. Попробуйте в следующий раз следовать таким правилам: четкое описание что должно быть на выходе, детальное оптсания используемого железа и самое главное помнить что Вам тут никто ничего не должен :) Ваши первые ответы я нахожу достаточно "пограничными" :)