Как преобразовать год из 2015 -> 15 Значение 2015 получаю от DS1302. Что бы год мог поместиться в тип byte
не, у anv лучше, без обид - если что -нибудь сбойнет по питанию и часы встанут в 1980 (или какой там год по умолчанию при отключении батарейки), то у вас будет непонятно что, а у anv будет 80. До кучи, ide ардуино автоматически конвертирует типы, из целого в байт? Если бы я писал на с, я написал бы = (undigned char) (... что - то типа Int),т.е. если где есть неоднозначность, всегда четко указать, к какому типу надо приводить. В ваших с anv примерах явно приводить результат операции с целыми к типу "байт" не нужно?
Если цель получить 15, то надо отнять 2000. Если цель - получить байт, то лучше отнимать 1970, это стандарт де-факто для С. http://playground.arduino.cc/Code/Time
IDE использует вполне настоящий компилятор С/С++. Правила приведения типов полностью соответствуют тому, как это положено делать по стандартам этих языков. для беззнакового байта обычно используют тип Код (C++): uint8_t
это не с стандарт, это для всего стандарт, "рождество христово" для программеров. но тс думаю нужно просто отображать год и не занимать лишний байт, так что %100 даст верный результат и не приведет к непоняткам при сбросе времени - даст 70.
А чтобы байт не занимать, можно время в time_t хранить, всего четыре байта и время с точностью до секунды.
а можно вообще его не хранить, опрашивать часы. но это про текущее, тс скорее всего базульку под расписание на много лет вперед генерит.
Не совсем. Просто делаю настройку времени\даты, а время + дата + знак сохранения в одну строчку не влазят.
Проект в стадии разработки. Процедурой установки времени\даты поделюсь. Код (C++): #include <DS1302.h> #include <LiquidCrystal.h> #include <Bounce2.h> #define Knopka_SET 6 #define Knopka_MENU 7 Bounce debouncer1 = Bounce(); Bounce debouncer2 = Bounce(); Time hm; long previousMillis_V = 0; long interval_V = 400; static byte ErrV=0; static byte FLAG=0; DS1302 rtc(10, 8, 9); LiquidCrystal lcd(12,11,5,4,3,2); void setClock(){ // установка часов byte pos = 1; // позиция курсора byte second, minute, hour, dayOfWeek, day, month, year; FLAG=0; // hm = rtc.getTime(); // hour = hm.hour; minute = hm.min; day = hm.date; month = hm.mon; year = hm.year % 100; lcd.clear(); lcd.setCursor(3,0); lcd.print("CLOCK SET"); while (FLAG == 0){ // крутим цикл lcd.setCursor(pos, 1); // устанавливаем курсор согласно позиции if (millis()- previousMillis_V >= interval_V) { if (ErrV==0) { lcd.setCursor(0, 1); if (hour<10) lcd.print("0"); lcd.print(hour, DEC); //часы lcd.print(":"); // разделитель if (minute<10) lcd.print("0"); lcd.print(minute, DEC); // минуты lcd.print(" "); // разделитель if (day < 10) lcd.print("0"); lcd.print(day, DEC); // день lcd.print("/"); // разделитель if (month < 10) lcd.print("0"); lcd.print(month, DEC); // месяц lcd.print("/"); // разделитель if (year < 10) lcd.print("0"); lcd.print(year, DEC); // год lcd.print(" \x7E"); // спец.символ } else { lcd.print("\xFF"); // спец.символ } ErrV=!ErrV; previousMillis_V=millis(); } if ( debouncer2.update() ) { if ( debouncer2.read() == LOW) { if ( pos < 13) pos += 3; else if (pos > 14) FLAG=2; else if (pos > 12) pos += 2; } } if (debouncer1.update()) { if (debouncer1.read() == LOW) { if (pos == 1 ) hour++; else if (pos == 4 ) minute++; else if (pos == 7 ) day++; else if (pos == 10 ) month++; else if (pos == 13 ) year++; else if (pos == 15 ) FLAG=1; } } if (hour > 23) hour = 0; else if (minute > 59) minute = 0; else if (day > 31) day = 0; else if (month > 12) month = 1; else if (year > 99) year = 0; }// конец цикла if (FLAG == 1) { //УСТАНОВКА ВРЕМЕНИ ДЛЯ ЧАСОВ rtc.setTime(hour,minute,00); // Set the time (24hr format) rtc.setDate(day, month, year + 2000); // Set the date lcd.clear(); lcd.setCursor(5, 0); lcd.print("Saved"); delay(1500); } } void setup() { rtc.halt(false); rtc.writeProtect(false); lcd.begin(16, 2); lcd.clear(); pinMode(Knopka_SET,INPUT_PULLUP); debouncer1.attach(Knopka_SET); debouncer1.interval(5); pinMode(Knopka_MENU,INPUT_PULLUP); debouncer2.attach(Knopka_MENU); debouncer2.interval(5); } void loop() { setClock(); }