Ну точнее там в принципе все понятно. Вот только почему-то функция blinktime() у меня не работает. Экран у меня стандартный 2х16 ардуиновский с I2C. Программа для обычных часов лежит на многих сайтах и там в момент установки времени должен мигать выбранный параметр (секунды, минуты, часы или там что другое). Так вот сами часы работают. Правда повозицца немного с кварцем пришлось. У меня была микросхемка ds1307, купил кварц в Чип и Дип, собрал на макетке - не работает. Повозился, в итоге нашел на старом медиацентре часовой кварт, впаял и все заработало. Так вот часы работают, но при установке не мигает устанавливаемы параметр. На Arduino.ru вроде темка была, но там автор написал, что мол сам решил и проблема была в ошибке, но не написал в какой. Вот кусочек, каксающийся установки времени: Я еще сейчас попробую в порт пигающее время вывести, может это с экраном что не такт. Код (C++): // Функция управления кнопками: void Func_buttons_control(){ uint8_t i=0; // watch.blinktime(VAR_mode_SET); // мигаем устанавливаемым параметром (если VAR_mode_SET больше 0) //Если часы находятся в режиме установки даты/времени if(VAR_mode_SET){ // Если нажата кнопка UP watch.blinktime(VAR_mode_SET); if(digitalRead(PIN_button_UP )){ while(digitalRead(PIN_button_UP)){delay(50);} // ждём пока мы не отпустим кнопку UP switch (VAR_mode_SET){ // инкремент (увеличение) устанавливаемого значения /* сек */ case 1: watch.settime(0, -1, -1, -1, -1, -1, -1); break; /* мин */ case 2: watch.settime(-1, (watch.minutes==59?0:watch.minutes+1), -1, -1, -1, -1, -1); break; /* час */ case 3: watch.settime(-1, -1, (watch.Hours==23?0:watch.Hours+1), -1, -1, -1, -1); break; /* дни */ case 4: watch.settime(-1, -1, -1, (watch.day==31?1:watch.day+1), -1, -1, -1); break; /* мес */ case 5: watch.settime(-1, -1, -1, -1, (watch.month==12?1:watch.month+1), -1, -1); break; /* год */ case 6: watch.settime(-1, -1, -1, -1, -1, (watch.year==99?0:watch.year+1), -1); break; /* д.н.*/ case 7: watch.settime(-1, -1, -1, -1, -1, -1, (watch.weekday==6?0:watch.weekday+1) ); break; } } // Если нажата кнопка DOWN if(digitalRead(PIN_button_DOWN)){ while(digitalRead(PIN_button_DOWN)){delay(50);} // ждём пока мы её не отпустим switch (VAR_mode_SET){ // декремент (уменьшение) устанавливаемого значения /* сек */ case 1: watch.settime(0, -1, -1, -1, -1, -1, -1); break; /* мин */ case 2: watch.settime(-1, (watch.minutes==0?59:watch.minutes-1), -1, -1, -1, -1, -1); break; /* час */ case 3: watch.settime(-1, -1, (watch.Hours==0?23:watch.Hours-1), -1, -1, -1, -1); break; /* дни */ case 4: watch.settime(-1, -1, -1, (watch.day==1?31:watch.day-1), -1, -1, -1); break; /* мес */ case 5: watch.settime(-1, -1, -1, -1, (watch.month==1?12:watch.month-1), -1, -1); break; /* год */ case 6: watch.settime(-1, -1, -1, -1, -1, (watch.year==0?99:watch.year-1), -1); break; /* д.н.*/ case 7: watch.settime(-1, -1, -1, -1, -1, -1, (watch.weekday==0?6:watch.weekday-1) ); break; } } // Если нажата кнопка SET if(digitalRead(PIN_button_SET)){ while(digitalRead(PIN_button_SET)){ // ждём пока мы её не отпустим delay(10); if(i<200){i++;}else{lcd.clear();} // фиксируем, как долго удерживается кнопка SET, если дольше 2 секунд, то стираем экран } if(i<200){ // если кнопка SET удерживалась меньше 2 секунд VAR_mode_SET++; // переходим к следующему устанавливаемому параметру if(VAR_mode_SHOW==1 && VAR_mode_SET>3){VAR_mode_SET=1;} // возвращаемся к первому устанавливаемому параметру if(VAR_mode_SHOW==2 && VAR_mode_SET>7){VAR_mode_SET=4;} // возвращаемся к первому устанавливаемому параметру }else{ // если кнопка SET удерживалась дольше 2 секунд, то требуется выйти из режима установки даты/времени VAR_mode_SET=0; // выходим из режима установки даты/времени } } //Если часы находятся в режиме вывода даты/времени }else{ // Если нажата кнопка SET if(digitalRead(PIN_button_SET)){ while(digitalRead(PIN_button_SET)){delay(10); // ждём пока мы её не отпустим if(i<200){i++;}else{lcd.clear();} // фиксируем, как долго удерживается кнопка SET, если дольше 2 секунд, то стираем экран } if(i<200){ // если кнопка SET удерживалась меньше 2 секунд lcd.clear(); // стираем экран VAR_mode_SHOW=VAR_mode_SHOW==1?2:1; // меняем режим вывода: дата/время }else{ // если if(VAR_mode_SHOW==1){VAR_mode_SET=1;} // если установлен режим вывода времени, то устанавливаемый параметр - секунды if(VAR_mode_SHOW==2){VAR_mode_SET=4;} // если установлен режим вывода даты, то устанавливаемый параметр - день } } } } Поможите кто знает! Да, в порту проверил, там мигает. Что-то с дисплеем не то?
он может совпадать с частотой обновления экрана. Функция blinktime(параметр [, частота ]): // указывает функции gettime мигать одним из параметров времени (заменять параметр пробелами) // функция может быть полезна, для отображения на дисплее, устанавливаемого параметра времени // например при установке минут, они начинают мигать, и Вам понятно, что именно Вы устанавливаете // первым аргументом функции указывается параметр в виде числа от 0 до 8 // 0 не мигать // 1 мигают сек // 2 мигают мин // 3 мигают час // 4 мигают дни // 5 мигают мес // 6 мигает год // 7 мигают дни недели // 8 мигает полдень // второй аргумент функции является необязательным, он указвает частоту миганий в Гц, по умолчанию 1Гц // пример: time.blinktime(6); // при выводе на дисплеё будет мигать год с частотой по умолчанию 1Гц // пример: time.blinktime(6, 2); // при выводе на дисплеё будет мигать год с частотой 2Гц
Попробовал поставить 2 и 20. Не моргает. Народ, неужели только у меня проблема? Щас дисплей другой попробую. Другой экран тоже не мигает. Ну я и не особо надеялся.
В общем что-то получилось. Правда пришлось залезть в библиотеку и увидеть, что частота задается не 1Гц, а 1000. Соответственно когда ставлю 200-500 мигает. Но все равно странно. Скажем на 200 2 раза мигнет (опять таки по ощущениям раз в секунду) т следующие 2 секунды горит не мигая. А если скажем ставлю 500, то наоборот мигнет 2 раза, а потом 2 секунды не горит вообще сегмент. Т.е. такое ощущение, что этот параметр не частоту мигания задает. Но вот что - так и не понял. Поковыряю еще, но в принципе я уже при редактировании времени сделал надпись в правом верхнем углу что меняется.
Ну функция blinktime есть только в iarduino_RTC.h. Во всяком случае, в других библиотеках что я нашел, вообще мигания нет.
Подключил экран TFT от телефона старого кнопочного Alcatel. Все равно не мигает. Все Delay из программы убрал.