оптимизация кода

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Всем привет, я недавно начал осваивать програмирование, имею арудино нано на ат158, и  делаю часы/альтиметр/барометр/температуру в авто, столкунлся с тем что мне не хватает памяти для всего, либо я могу вывести на экран позанания датчика bme280, а время останется не задействованным, либо время без показания датчика, при этом у меня остается не реализованным управление настройкой времени через 2 кнопки.

вопрос такой, ткните меня в ошибки и подскажите как можно уменьшить вес библиотек не испортив ничего 

#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

#include <iarduino_RTC.h> //библиотека часов
iarduino_RTC time (RTC_DS3231);  // объявляем переменную time для работы с библиотекой, указывая название модуля RTC_DS3231

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;

int last_time;         //потому что значение инт от -32к до +32к

void setup() {

  lcd.init();
  lcd.backlight();
  lcd.clear();
  bool status;
  status = bme.begin();

}

void loop() {

  lcd.setCursor(0, 0);
  lcd.print("JEEP GRAND CHEROKEE");
  lcd.setCursor(0, 1);
  //if (millis() % 1000 == 0) {                           // Если прошла 1 секунда
  //lcd.print(time.gettime("d-m-Y, H:i:s, D"));           // Выводим время.
  //delay(1);                                             // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс.
  //}
  if (millis() - last_time > 1000) {
  last_time = millis();
  printValues();
  }
}
void printValues() {
 
   lcd.setCursor(0, 2);
   lcd.print("Tempe=");
   lcd.print(round(bme.readTemperature()));
   lcd.println("C ");

    
   lcd.setCursor(10, 2);
   lcd.print("Davl=");
   lcd.print(round(bme.readPressure() / 100.0F * 0.750062F));
   lcd.println("mm");


    
   lcd.setCursor(0, 3);
   lcd.print("Viso=");
   lcd.print(round(bme.readAltitude(SEALEVELPRESSURE_HPA)));
   lcd.print("m");


       
   lcd.setCursor(10, 3);
   lcd.print("Vlazh=");       
   lcd.print(round(bme.readHumidity()));
   lcd.println("% ");

  }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Для начала уточните, что у Вас за контроллер, т.к. указанного Вами

Valerich-tex пишет:

ат158,

я не знаю, и микрочип тоже не знает

Valerich-tex пишет:

ткните меня в ошибки

В ошибки Вы сами должны нас ткнуть, т.е. описать что Вам не нравится и задать конкретный вопрос. Пока я вижу одну глобальную ошибку - использование напрочь кривой библиотеки iarduino_RTC. Бросьте каку и не хватайте руками всё, что на улице валяется.

Valerich-tex пишет:

как можно уменьшить вес библиотек не испортив ничего

Задача неясна. До какого предела уменьшить? Сейчас скетч занимает 12к, а сколько надо? Вы уж определитесь и задавайте вопрос поконкретнее.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Можно взять нану на ат318, там памяти больше

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это точно. А на 381 - ещё шибчее :)

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

ЕвгенийП пишет:

Для начала уточните, что у Вас за контроллер, т.к. указанного Вами

Valerich-tex пишет:

ат158,

я не знаю, и микрочип тоже не знает

Valerich-tex пишет:

ткните меня в ошибки

В ошибки Вы сами должны нас ткнуть, т.е. описать что Вам не нравится и задать конкретный вопрос. Пока я вижу одну глобальную ошибку - использование напрочь кривой библиотеки iarduino_RTC. Бросьте каку и не хватайте руками всё, что на улице валяется.

Valerich-tex пишет:

как можно уменьшить вес библиотек не испортив ничего

Задача неясна. До какого предела уменьшить? Сейчас скетч занимает 12к, а сколько надо? Вы уж определитесь и задавайте вопрос поконкретнее.

Сорян, ошибся, ATMega168, основной вопрос в весе, у меня есть всего 14к, при инициализации часов вес кода переваливает за 15к, соотвественно ниего не выходит сделать. Так вот вопрос это как уменьшить вес кода? 

Библиотеку часов заменю. Спасибо

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

ЕвгенийП пишет:

Это точно. А на 381 - ещё шибчее :)

 

Да это моя первая ошибка, не правльный выбор платы

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

В общем удалось мне установить все что я хотел, даже осталось место для реализации кнопок, только теперь столкнулся с такой проблемой, на фото видно, экран обновляется многократно и выводит полосы в 2 ячейки, не могу понять как мне это убрать, через миллис не могу остановить обновление экрана, так же еще вопрос, какой командой вывести формат времени "09:05" а не "9:5"

#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;

int last_time, zad ;         //потому что значение инт от -32к до +32к


void setup() {

  lcd.init();
  lcd.backlight();
  lcd.clear();
  bool status;
  status = bme.begin();
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  DateTime now = rtc.now();
  lcd.setCursor(0,0);
  lcd.print("JEEP GRAND CHEROKEE"); 
  
   if (millis() - zad > 1000) { //попробовал таким образом затормозить обновление экрана, нифига
  zad = millis();
  lcd.setCursor(0,1);
  lcd.print(now.hour(), DEC);  //вопрос уже стоит как выводит время в формате 09:05 а не 9:5 как это происходит сейчас
  lcd.print (":");
  lcd.print( now.minute(), DEC);
//  lcd.print(":");            // не вижу смысла в секндах
//  lcd.print(now.second());

  lcd.setCursor(6,1);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  
  lcd.setCursor(10,1);
  lcd.print(now.day(), DEC); 
  lcd.print ("/");
  lcd.print( now.month(), DEC);
  lcd.print("/");
  lcd.print(now.year()); 
   }
//  vremya(); //тут я пробовал сделать функцию на время чтобы просто вызывать часы командой, как с датчиком bme280
  
  if (millis() - last_time > 500) {
  last_time = millis();
  printValues();   //таким образом 
  }
}
void printValues() {


    lcd.setCursor(0, 2);
    lcd.print("Tempe=");
    lcd.print(round(bme.readTemperature()));
    lcd.println("C ");

    lcd.setCursor(10, 2);
    lcd.print("Davl=");
    lcd.print(round(bme.readPressure() / 100.0F * 0.750062F));
    lcd.println("mm");

    lcd.setCursor(0, 3);
    lcd.print("Viso=");
    lcd.print(round(bme.readAltitude(SEALEVELPRESSURE_HPA)));
    lcd.print("m");

    lcd.setCursor(10, 3);
    lcd.print("Vlazh=");       
    lcd.print(round(bme.readHumidity()));
    lcd.println("% ");
}
/* int vremya() { //функция которая не получилась , есть совет по ней? 
  lcd.setCursor(0,0);
  lcd.print("JEEP GRAND CHEROKEE"); 
  
  lcd.setCursor(0,1);
  lcd.print(now.hour(), DEC); 
  lcd.print (":");
  lcd.print( now.minute(), DEC);
//  lcd.print(":");
//  lcd.print(now.second());

  lcd.setCursor(6,1);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  
  lcd.setCursor(10,1);
  lcd.print(now.day(), DEC); 
  lcd.print ("/");
  lcd.print( now.month(), DEC);
  lcd.print("/");
  lcd.print(now.year());
 } */

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Valerich-tex пишет:

через миллис не могу остановить обновление экрана, 

В строке №16 написано в чём проблема, нужно просто прочитать и исправить.

Valerich-tex пишет:

какой командой вывести формат времени "09:05" а не "9:5"

Есть 100500 вариантов. Например, можно воспользоваться sprintf или даже printf настроить.

Но если с памятью проблемы, то можно if'ом разбирать нужет там 0 или нет.

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

ЕвгенийП пишет:

Valerich-tex пишет:

через миллис не могу остановить обновление экрана, 

В строке №16 написано в чём проблема, нужно просто прочитать и исправить.

Valerich-tex пишет:

какой командой вывести формат времени "09:05" а не "9:5"

Есть 100500 вариантов. Например, можно воспользоваться sprintf или даже printf настроить.

Но если с памятью проблемы, то можно if'ом разбирать нужет там 0 или нет.

После замены библиотеки, по вашему совету,  у меня повилось место на плате, сейчас используется 88%. буду пробовать, спасибо

Morroc
Offline
Зарегистрирован: 24.10.2016

Valerich-tex пишет:

После замены библиотеки, по вашему совету,  у меня повилось место на плате

Это очень сильное колдунство :)

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

ЕвгенийП пишет:

Valerich-tex пишет:

через миллис не могу остановить обновление экрана, 

В строке №16 написано в чём проблема, нужно просто прочитать и исправить.

Заменил int на  unsigned lond 

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

ЕвгенийП пишет:
 

Valerich-tex пишет:

какой командой вывести формат времени "09:05" а не "9:5"

Есть 100500 вариантов. Например, можно воспользоваться sprintf или даже printf настроить.

Но если с памятью проблемы, то можно if'ом разбирать нужет там 0 или нет.

Сделал через IF, вроде получилось, другие команды мне показались массивными по коду

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Morroc пишет:

Valerich-tex пишет:

После замены библиотеки, по вашему совету,  у меня повилось место на плате

Это очень сильное колдунство :)

на уровне с хогвартсем ))) 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Valerich-tex пишет:
не могу понять почему полосы воообще не уходят, как-будто они в скетче прописаны
Ну, если Вы не можете, то нам-то куда уж. Вы-то хоть (в отличие от нас) видели эти полоски и этот скетч :)

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

ЕвгенийП пишет:

Valerich-tex пишет:
не могу понять почему полосы воообще не уходят, как-будто они в скетче прописаны
Ну, если Вы не можете, то нам-то куда уж. Вы-то хоть (в отличие от нас) видели эти полоски и этот скетч :)

я не могу потому никогда раньше програмированием не занимался.

вот код. надеюсь на помощь


#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

#include "RTClib.h"
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;

#include <GyverButton.h> //будут еще 2 кнопки
GButton butt1(10);
GButton butt2(5);

#define mode_see //хочу реализовать 2 эрана и переключать их кнопками, один показ даты\времени
#define mode_set // второй показ настроек времени/даты

unsigned long last_time;         //потому что значение инт от -4000к до +4000К
unsigned long zad;

void setup() {

  lcd.init();
  lcd.backlight();
  lcd.clear();
  bool status;
  status = bme.begin();
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  DateTime now = rtc.now();
  butt1.tick();              //обязательная команда опрос кнопки
  butt2.tick();              //опрос 2й кнопки 
  lcd.setCursor(0,0);
  lcd.print("JEEP GRAND CHEROKEE"); 
  
 /*  if (millis() - zad >60000) { //думал обновлять раз в минуту, но так выходит что все время полоски и только во время обновления показыватеся время
  zad = millis();*/
  lcd.setCursor(0,1);
   if (now.hour() < 10) { //организовал 0 перед выводом времени таким образом, как советовали
   lcd.print("0");
   lcd.print(now.hour());
   }
   else if (now.hour() >=10) {
   lcd.print(now.hour()); 
   }
   lcd.print(":");
    if (now.minute() < 10) {
   lcd.print("0");
   lcd.print(now.minute()); //теперь хоть время занимает стабильно 5 символов и нормально отображается, относительно, не считая полос
   }
   else if (now.minute() >=10) {
   lcd.print(now.minute()); 
   }
   //}
  lcd.setCursor(6,1);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  
  lcd.setCursor(10,1);
     if (now.day() < 10) {
  lcd.print("0");
  lcd.print( now.day(), DEC);
   }
   else if (now.day() >=10) {
   lcd.print( now.day(), DEC);
   }
lcd.print ("/");
if (now.month() < 10) {
lcd.print("0");
lcd.print( now.month(), DEC);
}
else if (now.month() >=10) {
lcd.print( now.month(), DEC);
}
lcd.print("/");
lcd.print(now.year());

if(millis() - zad >60000){
zad = millis();
// chas();
}
if (millis() - last_time >1000) {
last_time = millis();
printValues();
}
}
void printValues() {

lcd.setCursor(0, 2);
lcd.print("T=");
lcd.print(round(bme.readTemperature()));
lcd.print("C|");
lcd.print(round(rtc.getTemperature()));
lcd.println("C ");

lcd.setCursor(10, 2);
lcd.print("Davl=");
lcd.print(round(bme.readPressure() / 100.0F * 0.750062F));
lcd.println("mm");

lcd.setCursor(0, 3);
lcd.print("Viso=");
lcd.print(round(bme.readAltitude(SEALEVELPRESSURE_HPA)));
lcd.print("m");

lcd.setCursor(10, 3);
lcd.print("Vlazh=");
lcd.print(round(bme.readHumidity()));
lcd.println("% ");
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Valerich-tex пишет:

вот код.

А полоски где?

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

ЕвгенийП пишет:

Valerich-tex пишет:

вот код.

А полоски где?

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

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

--Доктор! Что со мной такое - куда ни ткну пальцем - больно?! И в ногу ткну - больно, и в руку, и в голову!

--Мил человек, да у вас палец сломан.

--------

Это я к тому, что стоит попробовать экран поменять. ;)))))

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

wdrakula пишет:

--Доктор! Что со мной такое - куда ни ткну пальцем - больно?! И в ногу ткну - больно, и в руку, и в голову!

--Мил человек, да у вас палец сломан.

--------

Это я к тому, что стоит попробовать экран поменять. ;)))))

тут скорее всего ручки из жопки ))

Morroc
Offline
Зарегистрирован: 24.10.2016

Ну правильная была мысль обновлять время с интервалом и

lcd.setCursor(0,0);

lcd.print("JEEP GRAND CHEROKEE");

туда же засунуть (или в setup). Если хотите обновлять вот так прям постоянно в лоб - проверяйте изменилось ли вообще то, что вы выводите на экран, если нет - не надо ничего делать и мерцать экран не будет.
Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Morroc пишет:

Ну правильная была мысль обновлять время с интервалом и

lcd.setCursor(0,0);

lcd.print("JEEP GRAND CHEROKEE");

туда же засунуть (или в setup). Если хотите обновлять вот так прям постоянно в лоб - проверяйте изменилось ли вообще то, что вы выводите на экран, если нет - не надо ничего делать и мерцать экран не будет.

если ставлю надпись в setup то происходит следующее 

Valerich-tex
Offline
Зарегистрирован: 10.08.2019
int button_func(){                                  //управление настройкой с кнопок
if(butt1.isHolded() && butt2.isHolded()){
if(mode_see==1 && mode_set>7){mode_set==1;}
mode_set++;                                       //тут не понимает что хочу
}

time.blinktime(mode_set);
if(mode_set){                                      //если в режиме управления
if(butt2.isClick()|| butt2.isStep()){        //если нажата или ужержана клавиша 2 увеличивать показания
switch (mode_set){ // инкремент (увеличение) устанавливаемого значения
/* сек */ case 1: time.settime(0, -1, -1, -1, -1, -1, -1); break;
/* мин */ case 2: time.settime(-1, (now.minute==59?0:now.minute+1), -1, -1, -1, -1, -1); break;
/* час */ case 3: time.settime(-1, -1, (now.hour==23?0:now.hour+1), -1, -1, -1, -1); break;
/* дни */ case 4: time.settime(-1, -1, -1, (now.day==31?1:now.day+1), -1, -1, -1); break;
/* мес */ case 5: time.settime(-1, -1, -1, -1, (now.month==12?1:now.month+1), -1, -1); break;
/* год */ case 6: time.settime(-1, -1, -1, -1, -1, (now.year==99?0:now.year+1), -1); break;
/* д.н.*/ case 7: time.settime(-1, -1, -1, -1, -1, -1, (now.dayOfTheWeek==6?0:now.dayOfTheWeek+1) ); break;
}
}
}
if(butt1.isClick() || butt1.isStep()){          //если нажата или ужержана клавиша 1 уменьшать показания
switch (mode_set){                               // декремент (уменьшение) устанавливаемого значения
/* сек */ case 1: time.settime(0, -1, -1, -1, -1, -1, -1); break;
/* мин */ case 2: time.settime(-1, (now.minute==59?0:now.minute-1), -1, -1, -1, -1, -1); break;
/* час */ case 3: time.settime(-1, -1, (now.hour==23?0:now.hour-1), -1, -1, -1, -1); break;
/* дни */ case 4: time.settime(-1, -1, -1, (now.day==31?1:now.day-1), -1, -1, -1); break;
/* мес */ case 5: time.settime(-1, -1, -1, -1, (now.month==12?1:now.month-1), -1, -1); break;
/* год */ case 6: time.settime(-1, -1, -1, -1, -1, (now.year==99?0:now.year-1), -1); break;
/* д.н.*/ case 7: time.settime(-1, -1, -1, -1, -1, -1, (now.dayOfTheWeek==6?0:now.dayOfTheWeek-1) ); break;
}
}
}


 

Еще вопросик, я хотел вот этим кодом управлять настройкой времени чтобы не тащить комп к авто, код взят с https://lesson.iarduino.ru/page/urok-17-podklyuchenie-rtc-chasy-realnogo-vremeni-s-knopkami/ и "адаптирован" под мои команды, вопрос в том что я ничего не понимаю в настройке кнопок и логике работы, и в принцепе в логике работы этого кода, если у вас есть рабочик код настройки времени с 2 кнопок поделитесь плиз либо помогите мне написать его

nik182
Offline
Зарегистрирован: 04.05.2015

http://arduino.ru/forum/obshchii/attiny85-i-posledovatelnyi-port#comment...

Вот здесь я привел программу часов с настройкой времени с помощью одной кнопки. И будильника с помощью другой. 

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Очень похоже что датчик bme280 дает артефакты на экран, потому что при работе только с экраном и временем ничего не моргало. и никаких полос в пустых строках не было.  получатеся на датчик bme кривая библиотека? и какой командой можно заставить время мигать при настройке? now.blinktime пробовал выдает ошибку что не определен оператор. код для понимания процесса, пробую отдельно написать упраление кнопками, чтобы потом встроих их в основной скеч, до конца он еще не написан, но даже это заставить работать пока не получается. 

#include <Wire.h>
#include <SPI.h>

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

#include <RTClib.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};


#include <GyverButton.h>
GButton butt2(10);  //определить кнопку и задать пин
GButton butt1(5);

#define mode_see 1   //мод просмотра времени 
#define mode_set 1   //мод настройки времени 


void setup() {
  lcd.init();
  lcd.backlight();
  lcd.clear(); 
  rtc.begin();
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));  //команда для прошивки времени, не забыть отключить ее на финальной прошивке


}

void loop() {
  butt1.tick();    //инициализация кнопок
  butt2.tick();
  DateTime now = rtc.now();
  
  lcd.setCursor(0,1);
   if (now.hour() < 10) {
   lcd.print("0");
   lcd.print(now.hour());
   }
   else if (now.hour() >=10) {
   lcd.print(now.hour()); 
   }
   lcd.print(":");
    if (now.minute() < 10) {
   lcd.print("0");
   lcd.print(now.minute());
   }
   else if (now.minute() >=10) {
   lcd.print(now.minute()); 
   }
   
  lcd.setCursor(6,1);
  lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
  
  lcd.setCursor(10,1);
   if (now.day() < 10) {
  lcd.print("0");
  lcd.print( now.day(), DEC);
   }
   else if (now.day() >=10) {
   lcd.print( now.day(), DEC);
   }
  lcd.print ("/");
   if (now.month() < 10) {
  lcd.print("0");
  lcd.print( now.month(), DEC);
   }
   else if (now.month() >=10) {
   lcd.print( now.month(), DEC);
   }
  lcd.print("/");
  lcd.print(now.year()); 
  
  
   button_func ();   //инициализация управления копками
}

int button_func(){ //управление с кнопок 
  if(butt1.isHolded() && butt2.isHolded()){ //если ужержана клавиша 1 И ужержана клавиша 2 переходить в устанвку времени 
  mode_set;
  if (butt1.isHolded()){mode_set+1;}  //почему когда здесть стоило mode_set++ прога не понимала что я хочу, а с +1 понимает? 
  if(mode_set>7){mode_set==1;} 
  }  

  now.blinktime(mode_set);  //выдает ошибку, не определен оператор now хочу чтобы параметр при установке времени моргал 
  if(mode_set){     //если в режиме управления 
    if(butt2.isClick()|| butt2.isStep()){  //если нажата или ужержана клавиша 2 увеличивать показания
      switch (mode_set){                                     // инкремент (увеличение) устанавливаемого значения
      case 1: now.settime(0,                                   -1, -1, -1, -1, -1, -1); break;  //СЕК
      case 2: now.settime(-1, (now.minute==59?0:now.minute+1), -1, -1, -1, -1, -1); break;       //МИН
//      case 3: now.settime(-1, -1, (now.hour==23?0:now.hour+1),     -1, -1, -1, -1); break;     //ЧАС
//      case 4: now.settime(-1, -1, -1, (now.day==31?1:now.day+1),         -1, -1, -1); break;   //ДНИ
//      case 5: now.settime(-1, -1, -1, -1, (now.month==12?1:now.month+1),     -1, -1); break;   //МЕС
//      case 6: now.settime(-1, -1, -1, -1, -1, (now.year==99?0:now.year+1),       -1); break;   //ГОД
//       case 7: now.settime(-1, -1, -1, -1, -1, -1, (now.dayOfTheWeek==6?0:now.dayOfTheWeek+1) ); break; //Д.Н.
      }
      }
    }
  }
  if(butt1.isClick() || butt1.isStep()){ //если нажата или ужержана клавиша 1 уменьшать показания
    switch (mode_set){                                     // декремент (уменьшение) устанавливаемого значения
      case 1: now.settime(0,                                   -1, -1, -1, -1, -1, -1); break;  //сек
      case 2: now.settime(-1, (now.minute==59?0:now.minute-1), -1, -1, -1, -1, -1); break;     //мин
//      case 3: now.settime(-1, -1, (now.hour==23?0:now.hour-1),     -1, -1, -1, -1); break;    //час
//      case 4: now.settime(-1, -1, -1, (now.day==31?1:now.day-1),         -1, -1, -1); break;   //дни
//      case 5: now.settime(-1, -1, -1, -1, (now.month==12?1:now.month-1),     -1, -1); break;   //мес
//      case 6: now.settime(-1, -1, -1, -1, -1, (now.year==99?0:now.year-1),       -1); break;   //год
//      case 7: now.settime(-1, -1, -1, -1, -1, -1, (now.dayOfTheWeek==6?0:now.dayOfTheWeek-1) ); break; //д.н.
     }
   }
}

 

Morroc
Offline
Зарегистрирован: 24.10.2016

Valerich-tex пишет:

и какой командой можно заставить время мигать при настройке? 

Там вроде только курсор может мигать, а если хотите текст - мигайте им сами (очищайте и выводите по интервалам millis()).

sadman41
Offline
Зарегистрирован: 19.10.2016

http://www.dinceraydin.com/lcd/commands.htm

Blank the display (without clearing)  0x08
Restore the display (with cursor hidden) 0x0C
DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Да ему не погасить экран надо (без очистки) а Turn on visible blinking-block cursor

sadman41
Offline
Зарегистрирован: 19.10.2016

Сорри. Что-то у меня аллергия на бессмысленные вопросы в последнее время наблюдается - понять их не получается.

Morroc
Offline
Зарегистрирован: 24.10.2016

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Если курсор полноразмерный (5х7), во всё знакоместо, то им можно мигать в изменяемой позиции, и просто и наглядно.  (Я всегда так делаю)

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Morroc пишет:

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

Именно так я и хочу сделать

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

sadman41 пишет:

Сорри. Что-то у меня аллергия на бессмысленные вопросы в последнее время наблюдается - понять их не получается.

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

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

DetSimen пишет:

Если курсор полноразмерный (5х7), во всё знакоместо, то им можно мигать в изменяемой позиции, и просто и наглядно.  (Я всегда так делаю)

У вас уже есть реализованная настройка часов на кнопках? можете код показать? 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Valerich-tex пишет:

У вас уже есть реализованная настройка часов на кнопках? 

Есть.

Valerich-tex пишет:

можете код показать? 

Нет.

astwo
Offline
Зарегистрирован: 10.07.2019

Валерич-тех. Что Вам мешает поискать на форуме решения для меню.

Green
Offline
Зарегистрирован: 01.10.2015

Ну ладно бы хоть какие то телодвижения Валерич делал - тогда и не жалко... А так, дай да дай... Стыдоба то какая.(

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А вам пряма жалка чилавеку памочь!

Green
Offline
Зарегистрирован: 01.10.2015

А вот есть такая гнильца характера, чего уж тут...( Да и много тут всяких хитрожопых поразвелось, любителей лохов, понимаешь ли.)

Valerich-tex
Offline
Зарегистрирован: 10.08.2019

Green пишет:

А вот есть такая гнильца характера, чего уж тут...( Да и много тут всяких хитрожопых поразвелось, любителей лохов, понимаешь ли.)

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Valerich-tex пишет:
я же не прошу за меня написать код. или что-то сделать за меня, тем более какие-то из своих новых открытий выкладываю сюда и вот стоило спросить про управление кнопками как сразу хитрожопый. и ничего что я б. до этого дойти своей головой пока еще не могу

Какие открытия. Вот одновременно с вашими темами челу жевал тоже самое #11 и этому челу #43  и моя тема #74  и что? Теперь лично для Вас. Но есть и другие которые писали свои варианты меню здесь же на форуме.