<b>Модуль часов DS-1302.</b> <br /><br /> Подключение к Ардуино: <br /><br /> VCC 3,3...5В <br /> GND GND (подключить через резистор 1КОм) <br /> CLK 3 <br /> DAT 1 TX0 <br /> RST 0 RX0 <br /><br /> <a class="link" href="https://cloud.mail.ru/public/68cY/y1C3FKnD2" rel="nofollow" target="_blank">Скачать библиотеку.</a> <br /><br /> <!--uSpoiler--><div class="uSpoilerClosed" id="uSpoilerzmXwSL"><div class="uSpoilerButBl"><input type="button" class="uSpoilerButton" onclick="if($('#uSpoilerzmXwSL')[0]){if ($('.uSpoilerText',$('#uSpoilerzmXwSL'))[0].style.display=='none'){$('.uSpoilerText',$('#uSpoilerzmXwSL'))[0].style.display='';$('.uSpoilerButton',$('#uSpoilerzmXwSL')).val('Закрыть спойлер');$('#uSpoilerzmXwSL').attr('class','uSpoilerOpened');}else {$('.uSpoilerText',$('#uSpoilerzmXwSL'))[0].style.display='none';$('.uSpoilerButton',$('#uSpoilerzmXwSL')).val('Открыть спойлер');$('#uSpoilerzmXwSL').attr('class','uSpoilerClosed');}}" value="Открыть спойлер"/></div><div class="uSpoilerText" style="display:none;"><!--ust--><!--uzcode--><div class="bbCodeBlock"><div class="bbCodeName" style="padding-left:5px;font-weight:bold;font-size:7pt">Код</div><div class="codeMessage" style="border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight<5?this.style.height:scrollHeight>200?'200px':''+(this.scrollHeight+5)+'px');"><!--uzc-->// <br /> Соответствие пинов часов пинпм Ардуино. <br /> // DS1302: CE pin -> Arduino Digital 3 <br /> // I/O pin -> Arduino Digital 1 <br /> // SCLK pin -> Arduino Digital 0 <br /><br /> #include <DS13022.h> // Подключение библиотеки часов. <br /> #include <Wire.h> <br /> #include <LiquidCrystal_I2C.h> <br /><br /> // Инициализация пинов часов 0-RST 1-DAT 3-CLK <br /> DS1302 rtc(0, 1, 3); <br /><br /> //задаем адрес LCD экрана 0x27, 20 символов, 2 строки <br /> LiquidCrystal_I2C lcd(0x27, 20, 2); <br /><br /> void setup() <br /> { <br /> lcd.init(); // Инициализируем экран <br /> // Запуск часов <br /> rtc.halt(false); <br /> rtc.writeProtect(false); <br /><br /> // Запуск экрана с указанием количества символов и строк <br /> lcd.begin(20, 2); <br /><br /> // красивая "загрузка" программы при старте <img rel="usm" src="http://remont-aud.net/smailik/smile_.gif" border="0" align="absmiddle" alt=":)" /> <br /> lcd.print("Loading"); <br /> delay(500); // ждем 0.5 секунды <br /> lcd.print("."); <br /> delay(500); // ждем 0.5 секунды <br /> lcd.print("."); <br /> delay(500); // ждем 0.5 секунды <br /> lcd.print("."); <br /> delay(1000); // ждем 1 секунду <br /> lcd.clear(); //очистка экрана <br /><br /> // Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем. <br /> //rtc.setDOW(THURSDAY); // День недели, если пятница, то FRIDAY на русском не писать! <br /> //rtc.setTime(11, 18, 0); // Часы, минуты, секунды 24-часовой формат. <br /> //rtc.setDate(4, 6, 2015); // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить! <br /><br /> } <br /><br /> void loop() <br /> { <br /> // Выводим сообщение // <br /> //включаем подсветку <br /> lcd.backlight(); <br /><br /> //Устанавливаем позицию начиная с которой выводится текст. <br /> //Отступ в данном случае 3, строка 1 (отсчет от нуля). <br /> //lcd.setCursor(2, 0); <br /> //выводим строку 1 <br /> //lcd.print("Hello, World!"); <br /> //аналогично выводим вторую строку <br /> //lcd.setCursor(1, 1); <br /> //lcd.print("Arduino"); <br /><br /> lcd.setCursor(0, 0); // Устанавливаем курсор для печати времени в верхней строчке <br /> lcd.print(rtc.getTimeStr()); // Печатаем время <br /><br /> // Display abbreviated Day-of-Week in the lower left corner <br /> lcd.setCursor(9, 0); // Устанавливаем курсор слева внизу для печати дня недели <br /> //lcd.print(rtc.getDOWStr(FORMAT_LONG)); // Печатаем день недели полностью, благо экран позволяет. <br /> lcd.print(rtc.getDOWStr(FORMAT_SHORT)); // день недели <br /><br /> // Display date in the lower right corner <br /> lcd.setCursor(0, 1); // Устанавливаем курсор для печати даты <br /> lcd.print(rtc.getDateStr()); // Печатаем дату <br /><br /> <br /> // Wait one second before repeating <img rel="usm" src="http://remont-aud.net/smailik/smile_.gif" border="0" align="absmiddle" alt=":)" /> <br /> delay (1000); // Пауза 1 секунда и все по новой! <br /><br /> }<!--/uzc--></div></div><!--/uzcode--><!--/ust--></div></div><!--/uSpoiler-->
dimujin 18.06.2015
Управлять устройством буду одним устройством - энкодером. Он позволяет и выбирать и перемещаться по меню. <br /> Поскольку энкодер создает шумы при переключении, используем аппаратный фильтр в виде микросхемы 74HC14N <br /><br /> <!--uSpoiler--><div class="uSpoilerClosed" id="uSpoilerWkySiA"><div class="uSpoilerButBl"><input type="button" class="uSpoilerButton" onclick="if($('#uSpoilerWkySiA')[0]){if ($('.uSpoilerText',$('#uSpoilerWkySiA'))[0].style.display=='none'){$('.uSpoilerText',$('#uSpoilerWkySiA'))[0].style.display='';$('.uSpoilerButton',$('#uSpoilerWkySiA')).val('Закрыть спойлер');$('#uSpoilerWkySiA').attr('class','uSpoilerOpened');}else {$('.uSpoilerText',$('#uSpoilerWkySiA'))[0].style.display='none';$('.uSpoilerButton',$('#uSpoilerWkySiA')).val('Открыть спойлер');$('#uSpoilerWkySiA').attr('class','uSpoilerClosed');}}" value="Открыть спойлер"/></div><div class="uSpoilerText" style="display:none;"><!--ust--><img src="http://remont-aud.net/_pu/2/81865368.jpg" border="0" alt=""/><!--/ust--></div></div><!--/uSpoiler--> <br /><br /> <!--uSpoiler--><div class="uSpoilerClosed" id="uSpoilerHfhN3t"><div class="uSpoilerButBl"><input type="button" class="uSpoilerButton" onclick="if($('#uSpoilerHfhN3t')[0]){if ($('.uSpoilerText',$('#uSpoilerHfhN3t'))[0].style.display=='none'){$('.uSpoilerText',$('#uSpoilerHfhN3t'))[0].style.display='';$('.uSpoilerButton',$('#uSpoilerHfhN3t')).val('Закрыть спойлер');$('#uSpoilerHfhN3t').attr('class','uSpoilerOpened');}else {$('.uSpoilerText',$('#uSpoilerHfhN3t'))[0].style.display='none';$('.uSpoilerButton',$('#uSpoilerHfhN3t')).val('Открыть спойлер');$('#uSpoilerHfhN3t').attr('class','uSpoilerClosed');}}" value="Открыть спойлер"/></div><div class="uSpoilerText" style="display:none;"><!--ust--><!--uzcode--><div class="bbCodeBlock"><div class="bbCodeName" style="padding-left:5px;font-weight:bold;font-size:7pt">Код</div><div class="codeMessage" style="border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight<5?this.style.height:scrollHeight>200?'200px':''+(this.scrollHeight+5)+'px');"><!--uzc--> <br /> #include <Encoder.h> <br /> #include <DS13022.h> // Подключение библиотеки часов. <br /> #include <Wire.h> <br /> #include <LiquidCrystal_I2C.h> <br /><br /> // Инициализация пинов часов 0-RST 1-DAT 3-CLK <br /> DS1302 rtc(0, 1, 3); <br /><br /> //задаем адрес LCD экрана 0x27, 20 символов, 2 строки <br /> LiquidCrystal_I2C lcd(0x27, 20, 2); <br /><br /> // Энкодер <br /><br /> int val; <br /> int PIN_ENCODER_CLK = 53; <br /> int PIN_ENCODER_DT = 52; <br /> int PIN_ENCODER_SW = 51; <br /><br /> //Encoder myEnc( PIN_ENCODER_DT, PIN_ENCODER_CLK ); <br /> int encoder0Pos = 0; <br /> int encoder0PinALast = LOW; <br /> int n = LOW; <br /><br /> void setup() <br /> { <br /> pinMode (PIN_ENCODER_CLK,INPUT); <br /> pinMode (PIN_ENCODER_DT,INPUT); <br /> <br /> lcd.init(); // Инициализируем экран <br /> // Запуск часов <br /> rtc.halt(false); <br /> rtc.writeProtect(false); <br /><br /> // Запуск экрана с указанием количества символов и строк <br /> lcd.begin(20, 2); <br /> // Выводим сообщение // <br /> //включаем подсветку <br /> lcd.backlight(); <br /> <br /> // красивая "загрузка" программы при старте <img rel="usm" src="http://remont-aud.net/smailik/smile_.gif" border="0" align="absmiddle" alt=":)" /> <br /> lcd.print("Loading"); <br /> delay(500); // ждем 0.5 секунды <br /> lcd.print("."); <br /> delay(500); // ждем 0.5 секунды <br /> lcd.print("."); <br /> delay(500); // ждем 0.5 секунды <br /> lcd.print("."); <br /> delay(1000); // ждем 1 секунду <br /> lcd.clear(); //очистка экрана <br /><br /> // Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем. <br /> //rtc.setDOW(THURSDAY); // День недели, если пятница, то FRIDAY на русском не писать! <br /> //rtc.setTime(11, 18, 0); // Часы, минуты, секунды 24-часовой формат. <br /> //rtc.setDate(4, 6, 2015); // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить! <br /><br /> } <br /><br /> void loop() <br /> { <br /><br /> <br /><br /> lcd.setCursor(0, 0); // Устанавливаем курсор для печати времени в верхней строчке <br /> lcd.print(rtc.getTimeStr()); // Печатаем время <br /><br /> // Display abbreviated Day-of-Week in the lower left corner <br /> lcd.setCursor(9, 0); // Устанавливаем курсор слева внизу для печати дня недели <br /> //lcd.print(rtc.getDOWStr(FORMAT_LONG)); // Печатаем день недели полностью, благо экран позволяет. <br /> lcd.print(rtc.getDOWStr(FORMAT_SHORT)); // день недели <br /><br /> // Display date in the lower right corner <br /> //lcd.setCursor(0, 1); // Устанавливаем курсор для печати даты <br /> //lcd.print(rtc.getDateStr()); // Печатаем дату <br /><br /> <br /> n = digitalRead(PIN_ENCODER_CLK); <br /> if ((encoder0PinALast == LOW) && (n == HIGH)) { <br /> if (digitalRead(PIN_ENCODER_DT) == LOW) { <br /> encoder0Pos--; <br /> lcd.setCursor(0, 1); <br /> lcd.print("<< "); <br /> } else { <br /> encoder0Pos++; <br /> lcd.setCursor(0, 1); <br /> lcd.print(">> "); <br /> } <br /> lcd.setCursor(4, 1); <br /> lcd.print (encoder0Pos); <br /> } <br /> encoder0PinALast = n; <br /><br /> lcd.setCursor(11, 1); <br /> if ( digitalRead(PIN_ENCODER_SW) == LOW ) <br /> lcd.print("Pres"); <br /> else <br /> lcd.print("NO "); <br /> <br /><br /> } <br /> <!--/uzc--></div></div><!--/uzcode--><!--/ust--></div></div><!--/uSpoiler--> <br /><br /> Вот тут возникла проблема, енкодер работает четко, но только в одну сторону, прибавляет. В какую бы сторону я ни крутил.
Pavel7 25.06.2015
могу помочь с энкодером, чтоб в обе стороны работал
dimujin 26.06.2015
Нашел ошибку, CLK энкодера, обязательно должен быть подключен к RX arduino. На меге это 17,18 порты. После подключения на 18 порт ноги CLK энкодера, вращение заработало стабильно. <br /><br /> Сейчас сделал простенькое меню, при достижении заданной температуры должно включаться реле. Реле требуется запитать отдельно. <br /> Если будут "последователи", буду чаще выкладывать инфу, пока эксперементирую, планирую выложить сюда конечный вариант. <br /> В любом случае буду презнателен за советы и полезный опыт!
dimujin 08.07.2015
Отказался от кучи датчиков, собрав по <a class="link" href="http://www.electroschematics.com/wp-content/uploads/2014/03/arduino-water-level-sensor.jpg" rel="nofollow" target="_blank">такой схеме</a> <a class="link" href="http://www.electroschematics.com/9964/arduino-water-level-indicator-controller/" rel="nofollow" target="_blank">датчик уровней жидкости.</a> <br /> Все работает! <br /> Собрал из центральных жил антенн такой датчик с 3-мя уровнями, для долгвечностизалил жидкими гвоздями, оставив только оголенные концы.
dimujin 30.07.2015
Продолжение данной темы переехало на <a class="link" href="http://forum.amperka.ru/forums/projects/" rel="nofollow" target="_blank">forum.amperka.ru</a>