сделал часы с датой и временем , но месяц переходит на 32. Код (C++): #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display int date[13][5] = {{2016,2017,2018,2019,2020}, {31,31,31,31,31}, {29,28,28,28,29}, {31,31,31,31,31}, {30,30,30,30,30}, {31,31,31,31,31}, {30,30,30,30,30}, {31,31,31,31,31}, {31,31,31,31,31}, {30,30,30,30,30}, {31,31,31,31,31}, {30,30,30,30,30}, {31,31,31,31,31}}; int hours = 23; int minutes = 59; int seconds = 30; int day = 31; int month = 1; int year = 0; void setup() { lcd.init(); lcd.backlight(); lcd.print("clock v2"); lcd.setCursor(0 , 1); lcd.print("by Nimond"); delay(5000); } void loop() { if(seconds == 60){ seconds = 0; minutes = minutes + 1; } if(minutes == 60){ minutes = 0; hours = hours + 1; } if(hours == 24){ hours = 0; day = day + 1; } if(day == date[month,year]){ day = 1; month = month + 1; } if(month == 13){ month = 1; year = year + 1; } lcd.clear(); lcd.setCursor(3 , 0); lcd.print(hours); lcd.print(":"); lcd.print(minutes); lcd.print(":"); lcd.print(seconds); lcd.setCursor(3 , 1); lcd.print(day); lcd.print(";"); lcd.print(month); lcd.print(";"); lcd.print(2016 + year); seconds = seconds + 1; delay(1000); } Код (Text): C:\Users\Garro\AppData\Local\Temp\arduino_modified_sketch_185507\SerialDisplay.pde: In function 'void loop()': C:\Users\Garro\AppData\Local\Temp\arduino_modified_sketch_185507\SerialDisplay.pde:58:28: warning: ISO C++ forbids comparison between pointer and integer [-fpermissive] if(day == date[month,year]){ ^ Скетч использует 4 174 байт (1%) памяти устройства. Всего доступно 253 952 байт. Глобальные переменные используют 379 байт (4%) динамической памяти, оставляя 7 813 байт для локальных переменных. Максимум: 8 192 байт.
понимаю , что тут проблема с указателями , но я в них слаб , кто может подкиньте хорошую статейку , пожалуйста))
календарь , в принципе получается что только для февраля , я уже понял , что можно сделать и без массива , но уже принципиально надо разобраться в чем ошибка.
без массива , для корректной смены месяца нужно 2 доп if для 30 и 31 и куй знает какая конструкция для февраля (вообще не шарю в датах , високосных годах и тд.)
Может не стоит изобретать велосипед, а воспользоваться готовым решением из состава библиотеки avr-libc. А именно реализацией time.h. Правда для более точного подсчета времени придется чуть подредактировать wiring.c, точнее обработчик прерывания нулевого таймера -- добавить функционал для подсчета секунд и вызова функции system_tick() каждую секунду. Либо можно внутри loop() обеспечить вызов system_tick() раз в секунду, но это не очень красивое решение.