Нужна помощь в допиле кода

Тема в разделе "Закажу проект", создана пользователем arssev1, 3 авг 2015.

  1. arssev1

    arssev1 Гик

    Код реализует вывод даты, времени, температуры и влажности на LCD
    Из оборудования: LCD с I2C интерфейсом, DS1307, DHT11
    Уже есть вот такой вариант кода:
    Код (Text):
    //Вывод времени, даты, температуры и влажности на TWI-ЖКИ 16x2 с использованием датчика DHT11 и часов DS1307

    #include <Wire.h> //Библиотека для работы по TWI
    #include <LiquidCrystal_I2C.h>  //Библиотека для TWI-ЖКИ
    #include <RTClib.h> //Библиотека для часов DS1307
    #include <DHT.h> //Библиотека для серии датчиков DHT

    RTC_DS1307 rtc; //Подключаем часы
    LiquidCrystal_I2C lcd(0x27, 16, 2); //Подключаем ЖКИ по адресу 0x27
    DHT dht(9, DHT11); //Подключаем DHT11 на 9 пин

    byte degree[8] = { //Тут храним занчок градуса
      0b01100,
      0b10010,
      0b10010,
      0b01100,
      0b00000,
      0b00000,
      0b00000,
      0b00000
    };

    byte thermometer[8] = { //Тут - значек градусника
      0b00100,
      0b01010,
      0b01010,
      0b01010,
      0b01110,
      0b11111,
      0b11111,
      0b01110
    };

    byte drop[8] = { //Тут - значек капли
      0b00100,
      0b00100,
      0b01010,  
      0b01010,
      0b10001,
      0b10001,
      0b10001,
      0b01110
    };

    int temp; //Сюда пишем температуру
    int hum; //Сюда - влажность

    void setup() {
      Wire.begin(); //Инициализация TWI-шины
     
      lcd.init(); //Инициализация ЖКИ
      lcd.backlight(); //Поключаем подсветку ЖКИ
      lcd.createChar(1, degree); //Создаем значек градуса
      lcd.createChar(2, thermometer); //Градусника
      lcd.createChar(3, drop); //И капли
      lcd.clear(); //Очищаем ЖКИ
     
      rtc.begin(); //Инициализация часов
    }

    void loop() {
      DateTime now = rtc.now(); //Читаем из часов время
      temp = dht.readTemperature(); //Из DHT11 - температуру
      hum = dht.readHumidity(); //И влажность
       
      lcd.setCursor(0, 0); //Устанавливаем курсор в начало
      if (now.hour() < 10) lcd.print("0"); //Если часов меньше, чем 10 - пририсовываем нолик
      lcd.print(now.hour(), DEC); //Отображаем на ЖКИ часы
      lcd.print(":"); //Отображаем двоеточие
      if (now.minute() < 10) lcd.print("0"); //Если минут меньше, чем 10 - пририсовываем нолик
      lcd.print(now.minute(), DEC); //Отображаем на ЖКИ минуты
       
      lcd.setCursor(6, 0); //Курсор в середину верхней строки
      if (now.day() < 10) lcd.print("0");
      lcd.print(now.day(), DEC); //Выводим день
      lcd.print("."); //Отображаем точку
      if (now.month() < 10) lcd.print("0");
      lcd.print(now.month(), DEC); //Выводим месяц
      lcd.print("."); //Снова точка
      lcd.print(now.year(), DEC); //Выводим год
       
      lcd.setCursor(0, 1); //Курсор в нижнюю строку
      lcd.print("\2="); //Выводим значек градуса
      lcd.print(temp); //Выводим температуру
      lcd.print("\1C"); //Отображаем "градус Цельсия"
      if (temp < 10) lcd.print(" "); //Если температура упала ниже 10, то может остаться лишняя буква "C", а так мы ее сотрем
      lcd.setCursor(11, 1); //Курсор в конец нижней строки
      lcd.print("\3="); //Значек капельки
      lcd.print(hum); //Выводим влажность
      lcd.print("%"); //Знак процентов
     
      delay(1500);
    }
    Т.к. я не огонь в кодинге и это явно не мое, то я не могу придумать, как реализовать подстройку чаов двумя кнопками, а это довольно важная функция. Очень нужна помощь, увы денег особо нет, максимум 200-300 рэ на Я.Деньги кинуть могу на пиво/кофе :)
     
  2. vvr

    vvr Инженерище

  3. Gippopotam

    Gippopotam Нерд

    А почему именно двумя кнопками?
     
  4. vvr

    vvr Инженерище

    можно и одной - морзянку выстукивать:)
     
  5. arssev1

    arssev1 Гик

    Часы и минуты
     
  6. Gippopotam

    Gippopotam Нерд

    Одна кнопка - переход "год"-"месяц"-"день"-"часы"-"минуты"-"секунды", две кнопки - вверх/вниз - это минимум. Лучше эти три кнопки + "вперед"/"назад" + "ОК". А вообще идеально + "отмена", как на шилде, по ссылке выше.
     
  7. arssev1

    arssev1 Гик

    Все это чудесно, но мне:
    -Многого не надо, максимум часы и минуты подкручивать
    -Понять хотяб, как реализовать двухкнопочную настройку
    -И спасибо за ссылку, но читать чужой код - явно не мое
     
  8. Gippopotam

    Gippopotam Нерд

    Тогда кофием не отделаетесь.
     
  9. vvr

    vvr Инженерище

    опа, тётка форумом ошиблась :D:D:D
     
  10. vvr

    vvr Инженерище

    а вам с двумя кнопками ещё больше возиться придётся, чем с четырьмя
     
  11. Faberge

    Faberge Administrator Администратор

    Ну да, четырехкнопочная настройка в отладке явно будет проще чем двухкнопочная.
     
  12. DrProg

    DrProg Вечный нерд

    Я на всех настройках с дисплея использую 5 кнопок, которые на шилде есть. Влево-вправо выбор разряда, вверх-вниз выбор цифры, select выход из редактирования. Очень удобно и все пять кнопок на одном аналоговом пине висят.
     
  13. arssev1

    arssev1 Гик

    Я разве говорил, что у меня шилд?