Пожалуйста, помогите добавить в данный скетч данные, чтоб например, по достижении на одном из датчиков температуры 30 градусов на одном из пинов ардуино появлялась логическая еденица на 10 минут?
Почитай здесь есть информация про правильное подключение этого датчика температуры к ардуино http://proumnyjdom.ru/kontrollery/ds18b20-podklyuchenie-k-arduino.html. Подключить несколько датчиков температуры DS 18B20 к Arduino Processing LCD можно, через базу данных OneWirelibrary. Надеюсь помог как то.
Я может поиском пользоваться не умею, может что-то другое со мной, но я не смог найти нормальный скетч, для опроса этих датчиков c максимальной скоростью и без далласовской библиотеки. Пришлось писать свой. Камнями не кидайтесь, к программированию имею весьма далекое отношение. Выкладываю то, что получилось. Как по мне, то наконец всё ясно и понятно и можно вставлять куда угодно. Для начинающих, самое оно. Спойлер: Скетч Код (C++): #include <OneWire.h> byte OneWirePin = 8; // пин на котором датчики byte addresa[20][8]; // 20 возможных датчиков хранятся локально byte tochnost = 11; // может принимать только 9(0.5°C),10(0.25°C),11(0.125°C),12(0.0625°C) OneWire ds (OneWirePin); byte kol; // количество датчиков ( сканирование ) byte addr[8]; // адреса датчиков по запросу float temp; // //////////////////// ставим точность измерений ///////////////////////////// void toch () { for(byte i = 0; i < kol; i++) { ds.reset(); ds.select(addresa[i]); // выбираем датчик ds.write(0x4E); // команда на запись в датчик ds.write(0x4B); // верх и низ для аварийных температур ds.write(0x46); // верх и низ для аварийных температур if (tochnost==9) { Serial.println(" tochnost 0.5 gradusa "); ds.write(0x00); // это разрядность конвертации } if (tochnost==10) { Serial.println(" tochnost 0.25 gradusa "); ds.write(0x20); // это разрядность конвертации } if (tochnost==11) { Serial.println(" tochnost 0.125 gradusa "); ds.write(0x40); // это разрядность конвертации } if (tochnost==12) { Serial.println(" tochnost 0.0625 gradusa "); ds.write(0x60); // это разрядность конвертации } } ds.reset(); ds.write(0xCC); //Обращение ко всем датчикам ds.write(0x48); // переносим из оперативки датчика в EEPROM датчика } /////////////отправляем все датчики сети на расчет температуры////////////////////////////////// void otpravNaRasch() { ds.reset(); // Сбрасываем линию ds.write(0xCC); //Обращение ко всем датчикам ds.write(0x44); // Пишем 0x44 - команда на расчет температуры, паразитное питание не допустимо } ///////////////выясняем сколько у нас датчиков на пине OneWirePin и заносим их адреса в массив////////////// void kolDatch() { kol = 0; while ( ds.search(addr)) { for (byte i = 0; i < 8; i++) { addresa[kol][i] = addr[i]; } kol = kol + 1; } ds.reset_search(); } // //////////////////// расчет температуры /////////////////////// void tempa (byte u) { ds.reset(); ds.select(addresa[u]); ds.write(0xBE); // Команда датчику, чтобы он начал отдавать данные. temp = (ds.read() | ds.read()<<8); //так и не понял как оно там считается, главное работает temp = (float)temp / 16.0; } // -------------------setup----------------- void setup() { Serial.begin(9600); kolDatch(); Serial.print(" kol= "); Serial.println(kol); toch (); otpravNaRasch(); } // ----------------end setup ------------------ void loop() // ------------------- цикл (loop) --------------------------- { // kolDatch(); if (ds.read_bit()) // если расчет температуры закончен, то начинаем считывать { // Serial.println (" raschitali "); for(byte i = 0; i < kol; i++) { tempa (i); Serial.print(" tempa= "); Serial.println(temp); } Serial.println(' '); otpravNaRasch(); // сразу отправляем на новый расчет } } //---------------------- конец цикла (loop)---------------------
Лучше все в одну функцию затащить, для удобства переноса между проектами. Ну или вообще библиотеку сделать, по феншую
так идея как раз и заключалась в том, что бы не использовать данную библиотеку, там delay(1000) в ней
Не в курсе и не собираюсь быть в курсе, всё читать - голова лопнет. Факт, что задержка есть и этого достаточно для того, что бы мне не нравиться. Там та же задержка...
Что за бессмысленные указания кому что надо и кому что не надо ? Нет чтоб сказать, что в далласовской библиотеке задержка стоит для того что бы.....отключить её можно так и так, а ты мол был и не в курсе, а я молодец, подсказал, вот тогда бы это было полезно и не только мне.. А вот эти интриги, мол там всё, что тебе надо есть, но я нифига не скажу где и как, потому что я прочитал тонну макулатуры и теперь этим горжусь, а ты, нуб, сиди и мучайся, оставьте при себе !
Правильно. Учить этих зажравшихся гиков. Слушай сюда. Датчику нужно 750 мс для преобразования температуры после запроса, если он питается по двум проводам и 50 - когда по трем. Если читать данные сразу - будет или ошибка или данные прошлого измерения. Уяснил? Это важно понимать, если ты оиправляешь данные кудато раз в 10 - 15 минут. Всегда будешь оправлять старые. Теперь самая сложная вещь - как ты узнаешь что написано в этом посте, если ничего не читаешь? Чем злобнее юзер - тем больший он нуб. Это правило.
Я конечно не специалист и читать не умею, но судя по всему и вы тоже. разрешение 9 бит, 93.75 мс разрешение 10 бит, 187.5 мс разрешение 11 бит, 375 мс разрешение 12 бит, время преобразования - 750 мс, другими словами время зависит не от питания, а от разрешения преобразования. И смысл моего скетча был в том, чтобы без использования delay и millis получить темпу. Я не правильно сделал ? С удовольствием выслушаю критику, если все правильно, то давайте не толочь воду в ступе. P.S. Я с вами на брудершафт не пил, на ВЫ, будьте любезны.
"Не в курсе и не собираюсь быть в курсе, всё читать - голова лопнет". Уверен, эта мудрая цитата обрадует ее автора и поразит вежливостью.
Вам заняться нечем ? Так напишите мне за деньги то, что мне надо. Мне не доставляет никакого удовольствия ковыряться с этой ардуинкой. Просто никто не может сделать то, что мне надо или сумма совсем не адекватная. Вот и приходится мучиться. А вам бы спасибо сказать, а не упражняться в краснословии.