подскажите по ds1307

REI
Offline
Зарегистрирован: 05.10.2016

подскажите пожалуйста .

пытаюсь собрать простейщие часы с термометром и выводом на max7221\7219 , встал на установке времени через кнопки в ds1307 .

примеров много, но везде нагороженно так что начальных знаний не хватает для адаптации под мои нужды.

интересует код которым можно настроить часы и минуты остальное не нужно , без всяких эфектов и прибомбасов . тоесть нажал на первую кнопку добавилось значение часа , нажал вторую добавилось значение минут .

 

fogary
Offline
Зарегистрирован: 05.03.2016

Вы ищите ссылку на готовый проект, или Вам подсказать примерный алгоритм действий, или хотите что бы за Вас все написали?

REI
Offline
Зарегистрирован: 05.10.2016

я хочу хотя бы кусок кода чтоб можно было понять как задавать значение через кнопку .

везде где находил  подобную функцию наверчено много , не могу выдернуть нужное.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Вопрос не такой простой - зависит от того какую библиотеку Вы ипользуете, в нете много разных и каждая своей командой устанавлюет время. В той что я сейчас смотрю вот такая команда устанавлюет время "rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)" Для такой библиотеки Вам надо создать переменные к примеру int cas; int min; После на экране выставить значение для cas, min присвоив им эти значения. Потом по нажатии кнопки выполнить команду rtc.setTime(cas, min, 0); поменяв время. Это один из вариантов. 

fogary
Offline
Зарегистрирован: 05.03.2016

REI пишет:

я хочу хотя бы кусок кода чтоб можно было понять как задавать значение через кнопку .

везде где находил  подобную функцию наверчено много , не могу выдернуть нужное.

Подключение кнопок и работу с ними уже освоили?

Примерный код, без учета вашей библиотеки. Состояние нажатой кнопки - LOW; без подавления дребизга контактов.

void setup() {
	. . .
	
	pinMode(BTN_HR, INPUT); // кнопка для увеличения значения часов
	pinMode(BTN_MN, INPUT); // кнопка для увеличения значения минут

	. . .
}

void loop() {
	. . .
	
	if (digitalRead(BTN_HR) == LOW || digitalRead(BTN_MN) == LOW) {
		int cur_h = получить текущей час;
		int cur_m = получить текущую минуту;
		
		if (digitalRead(BTN_HR) == LOW) {
			cur_h = (cur_h + 1) % 24;
		} else {
			cur_m = (cur_m + 1) % 60;
		}
		
		установить время(cur_h, cur_m);
	}

	. . .
}

 

REI
Offline
Зарегистрирован: 05.10.2016

на данный момент пока по той уйме информации которая есть в интернете пытаюсь разобраться что куда и как .
библиотеки в основном использую из проектов в которых нахожу подходящий код . сам писать не дорос ещё ...

пока тока собрал монстра и кусков кода с кучей лишнего , выводит время , настраивается кнопками через кучу мусора , выводит  температуру с двух ds18b20 и все это на lcd 1602 . пока не совсем разобрался с вводом переменных для разбития показаний на числа для вывода на max7219 по разрядно ( хотя тут явно проще можно решить)

тоесть если я правильно понял выглядеть будет примерно так ?

void setup() {
	. . .
	
	pinMode(BTN_HR, INPUT); // кнопка для увеличения значения часов
	pinMode(BTN_MN, INPUT); // кнопка для увеличения значения минут

	. . .
}

void loop() {
	. . .
	
	if (digitalRead(BTN_HR) == LOW || digitalRead(BTN_MN) == LOW) {
		int cur_h = time.gettime("H");
		int cur_m = time.gettime("m");
		
		if (digitalRead(BTN_HR) == LOW) {
			cur_h = (cur_h + 1) % 24;
		} else {
			cur_m = (cur_m + 1) % 60;
		}
		
		time.settime(-1, cur_m, cur_h, -1, -1, -1, -1);
	}

	. . .
}
в библиотеке часов 
установка времени 
time.settime(0,51,21,27,10,15,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник. -1 параметр не изменяется
получение времени 
time.gettime("d-m-Y, H:i:s, D")); 

 

renoshnik
Offline
Зарегистрирован: 11.04.2013

//Arduino 02 – кнопка для увеличения значения часов
//Arduino 03 – кнопка для увеличения значения минут

//Arduino 04 – DS1307:  SDA
//Arduino 05 – DS1307:  SCL

#include <DS1307.h> 
DS1307 rtc(4, 5); // Init the DS1307 
Time t;


 // ****************************************
 if ((PIND&(1<<2)) == 0 || (PIND&(1<<3)) == 0) { 
t = rtc.getTime(); 
byte cur_h = t.hour; 
byte cur_m = t.min; 
if ((PIND&(1<<2)) == 0) { cur_h = (cur_h + 1) % 24; }
 else { cur_m = (cur_m + 1) % 60; } 
rtc.halt(false); 
rtc.setTime(cur_h, cur_m, 0); }