Как программно включить, и выключить фоторезистор.

Nafanya_6
Offline
Зарегистрирован: 11.10.2018

И так, имеется светодиодная лента на WS2821b. Подключена библиотека Adafruit NeoPixel. Есть в библиотеке функция setBrightness()  -  задает общую яркость светодиодной ленты. strip.setBrightness(180);  по умолчанию.

В скетче есть меню,  ручная установка яркости. от b-0 до b-17. С  шагом 15.

  case 2: {                               //  Если режим "2" - установка яркости
        if (key == 1)   {
          NowBrigtness = NowBrigtness - 15;  //меняем яркость от 0 до 255 с шагом 15
        }
        if (key == 3)   {
          NowBrigtness = NowBrigtness + 15;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        if (NowBrigtness == 0)strip.setBrightness(1); else strip.setBrightness(NowBrigtness); ;      // устанавливаем яркость светодиодной ленты
        // - отображаем на экране величину яркости
        digitout (0, 14 );                        // отрисовываем цифры (выставляем черные точки)
        digitout (7, 13);                         // отрисовываем цифры (выставляем черные точки)
        digitout (16, (NowBrigtness / 15) / 10 );         // отрисовываем цифры (выставляем черные точки)
        digitout (23, (NowBrigtness / 15) % 10);          // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }

Кроме этого,  я отдельно добавил код в скетч. Чтобы яркость, регулировалась фоторезистором.

// Check Light sensor and set brightness accordingly
void BrightnessCheck(){ // функция настройки яркости в соответствии с освещенностью
  const byte sensorPin = A0; // пин датчика освещенности
  const byte brightnessLow = 5; // низкий уровень яркости
  const byte brightnessHigh = 250; // высокий уровень яркости
  int sensorValue = digitalRead(sensorPin); // запрос с датчика
  if (sensorValue == 0) {strip.setBrightness(brightnessHigh);}
  else {strip.setBrightness(brightnessLow);}  
  }

И ручная регулировка в этом случаи не работает.

Так вот вопрос, как сделать 2in1 в одно?. Чтобы по желанию, можно было отключить фоторезистор.

Например: в том,  же меню. На b-1 фоторезистор включить. b-0, b-2, b3, b-4 и, так далее до b-17 фоторезистор OFF выключить.

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

1- приведите полный текст программы

2- наверно не выключить фоторезистор, а не использовать его?

Nafanya_6
Offline
Зарегистрирован: 11.10.2018

Да вы правы, не использовать фоторезистор.

Вот полный скетч

#include <Wire.h>                     // Базовая библиотека шины I2C (используется для связи модуля часов реального времени)
#include <iarduino_RTC.h>             // Библиотека часов реального времени 
#include <Adafruit_NeoPixel.h>        // Библиотека для управления адресными светодиодами 
#include <OneWire.h>                  // Бибиотека шины 1-Wire для работы температурных датчиков
#include <DallasTemperature.h>        // Библиотека температурного сенсора DS18B20
#include <EEPROMex.h>                 // Библиотека доступа к энергонезависимой памяти

#define PIN 6                         // управление адресными светодиодами по этому пину
#define ONE_WIRE_BUS 10               // датчик температуры DS18B20 подключен к этому пину
#define TEMPERATURE_PRECISION 12      // точность измерений 9-бит низкая, 12-бит высокая

iarduino_RTC time(RTC_DS3231);        // подключаем RTC модуль на базе чипа DS3231, используется аппаратная шина I2C
Adafruit_NeoPixel strip = Adafruit_NeoPixel(30, PIN, NEO_GRB + NEO_KHZ800); //Подключаем ленту на адресных светодиодах
OneWire oneWire(ONE_WIRE_BUS);        // подключаем шину 1-Wire, для передачи данных с сенсоров температуры
DallasTemperature sensors(&oneWire);  // подключаем температурные сенсоры

byte Mode = 0;                         //режимы:  по умолчанию 0 - отображение времени с заданными настройкамиbyte NumColor = 0;
//----------- переменные настроек, которые так же хранятся в ПЗУ контроллера и считываются при включении устройсва-------------
byte NowBrigtness = 180;              // текущая яркость элементов (начальное значение должно быть кратным 15)
byte ColorMode = 13;                  // текущий цветовой режим (13 режим - цвет меняется каждый час, полный цикл за 12 частов)
byte TempTime = 8;                    // длительность отображения температуры
//------------------------------------------------------
int temp10;                           // перомежуточная переменная температуры (используем множитель 10, что бы использовать тип integer
long int KeyPressed;                  // время в милисекундах, для сравнения с текущими милисекундами (используется для возврата в основной режим)
unsigned long eeprom_timer;           // таймер зашивки в энергонезависимую память параметров настройки часов
byte degree = 25 ;                    // процент яркости разделительных точек (исходя из геометрии яркость разделительных точек нужно уменьшать
boolean eeprom_flag;

void setup() {
  Serial.begin(9600);                     // подключаем сериал порт для вывода отладочной информации (отключено в целях экономии памяти)
  pinMode(2, INPUT_PULLUP);                 // подключаем кнопку 1 к пину и подтягиваем её к питанию
  pinMode(3, INPUT_PULLUP);                 // подключаем кнопку 2 к пину и подтягиваем её к питанию
  pinMode(4, INPUT_PULLUP);                 // подключаем кнопку 3 к пину и подтягиваем её к питанию
  time.begin();                             // запускаем часы реального времени
  sensors.begin();                          // запускаем сенсоры температуры
  strip.begin();                            // запускаем адресные светодиоды
  strip.setBrightness(NowBrigtness);        // устанавливаем яркость светодиодной ленты
  strip.show();
  // KeyPressed = millis();
  // освещаем ленту (по умолчанию нули-ничего не светится)
  // Отладочный способ установки времени через скетч
  //time.settime(0,05,1,31,10,19,4);        // _ сек, _ мин, _ час, _ день месяца, _ месяц, _ год, день недели 0-вск 6-суб
  //updateEEPROM;                           // при первой прошивке раскоментировать для записи настроек в ПЗУ контроллера
  readEEPROM();                             // чтениt настроек из ПЗУ контроллера
}

void loop() {
 BrightnessCheck(); //фоторезистор функция настройки яркости в соответствии с освещенностью


// if(millis()%1000==0){ // если прошла 1 секунда
// Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
// delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс
  }
  if ((millis() - KeyPressed) > 4000) Mode = 0;  //если спустя 4 секунды кнопок не нажималось часы переходят в нормальный режим
  int key = get_key();                            // опрашиваем нажатие кнопки
  if (key)  {
    delay(330);                                   // после нажатия на любую кнопку делаем небольшую паузу, что бы успеть отпустить кнопку
    KeyPressed = millis();   // сбрасываем таймер последнего нажатия кнопки (для того что бы спустя 3 сек часы перешли в режим 0)
    eeprom_flag = true;
  }
  if (key == 2)   {                               // если нажата кнопка 2, то гоняем меню по кругу (выбора режима цвета, яркость, установка времени и даты
    if (Mode == 9) Mode = 0; else Mode++;
  }
  switch ( Mode ) {
    case 0: {                                     //---------------------- Нормальный режим "0": отображение времени и температуры ----------------------
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время
        if (( time.seconds) == ( 60 - TempTime)) {                          // раз в минуту проверяем наличие датчика
            sensors.requestTemperatures();                  // Отправляем запрос на значение температуры
          temp10 = 10 * sensors.getTempCByIndex(0);
        }
        if ((( time.seconds) <= 60 - TempTime) or (temp10<-500))   { // отображаем время в том числе если датчик не подключен
          digitout (0, time.Hours / 10 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, time.Hours % 10 );         // отрисовываем цифры (выставляем черные точки)
          digitout (16, time.minutes / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (23, time.minutes % 10 );      // отрисовываем цифры (выставляем черные точки)
          if (( time.seconds) % 2 == 0)  {        // по четным секундам разделительные точки не светятся (можно сделать затухание)
            strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
          }
        }
        
        if ((key == 1) || (key == 3) || ((( time.seconds) > 60 - TempTime) and (temp10>-500)))   {                           // если нажали кнопку "1" или пришло время отображать температуру и датчик подключен
          sensors.requestTemperatures();                  // Отправляем запрос на значение температуры
          temp10 = 10 * sensors.getTempCByIndex(0);
          for (int i = 0; i < 30; i++) {
            strip.setPixelColor(i, WheelRGB((40 - temp10 / 10) * 255 / 60 & 255));                      // цвет  зависит от температуры датчика
            if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG((40 - temp10 / 10) * 255 / 60 & 255)); // для разделительных точек применяем модифицированное цветовое колесо
          }
          if (temp10 < -500) {            // если датчик отключен, то выводим "---с"
            digitout (0, 13 );            // отрисовываем "-" (выставляем черные точки)
            digitout (7, 13 );            // отрисовываем "-" (выставляем черные точки)
            digitout (16, 13 );           // отрисовываем "-" (выставляем черные точки)
            strip.setPixelColor(26, (0, 0, 0));   // знак "_" не рисуем
          }
          else
          {
            digitout (7, temp10 / 100 );            // отрисовываем цифры (выставляем черные точки) десятки градуса
            digitout (16, ((temp10) % 100) / 10 );   // отрисовываем цифры (выставляем черные точки) единицы градуса
        //    digitout (16, (temp10) % 10 );          // отрисовываем цифры (выставляем черные точки) десятые доли градуса
          }
          strip.setPixelColor(14, 0, 0, 0);       // затеняем верхнюю точку
          strip.setPixelColor(15, 0, 0, 0);       // затеняем нижнюю точку
          digitout (23, 11 );                     //симвод градуса Цельсия
           digitout (0, 13 );                     //симвод "-" в первом семисегментном индикаторе
            if (temp10 >= 0) {            // если температура выше нуля, то знак "-" не отображаем
            strip.setPixelColor(6, (0, 0, 0));   // знак "-" в первом семисегментном индикаторе убираем при плюсовой температуре
          }

          //      if (key == 3)   {
          // - зарезервированно либо для вывода даты, либо для вывода температуры с второго датчика
          //    }
        }
        strip.show(); //освещаем режим 0
        break;
      }                                           //---------------------- конец отработки условия нормального режима "0" ------------------
    case 1: {                                     //  Если режим "1" - установка цветовой схемы
        if (key == 1)   {                                                                   //Установка цвета
          if (ColorMode == 0) ColorMode = 26; else ColorMode--;
        }
        if (key == 3)   { //Гоняем цвет по кругу
          if (ColorMode == 26) ColorMode = 0; else ColorMode++;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        // - отображаем на экране номер цветового режима
        digitout (0, 12 );                        // отрисовываем цифры (выставляем черные точки)
        digitout (7, 13);                         // отрисовываем цифры (выставляем черные точки)
        digitout (16, ColorMode / 10 );           // отрисовываем цифры (выставляем черные точки)
        digitout (23, ColorMode % 10);            // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 2: {                               //  Если режим "2" - установка яркости
        if (key == 1)   {
          NowBrigtness = NowBrigtness - 15;  //меняем яркость от 0 до 255 с шагом 5
        }
        if (key == 3)   {
          NowBrigtness = NowBrigtness + 15;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        if (NowBrigtness == 0)strip.setBrightness(1); 
        else strip.setBrightness(NowBrigtness); ;      // устанавливаем яркость светодиодной ленты
        // - отображаем на экране величину яркости
        digitout (0, 14 );                        // отрисовываем цифры (выставляем черные точки)
        digitout (7, 13);                         // отрисовываем цифры (выставляем черные точки)
        digitout (16, (NowBrigtness / 15) / 10 );         // отрисовываем цифры (выставляем черные точки)
        digitout (23, (NowBrigtness / 15) % 10);          // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 3: {                               // Если режим "3"   - Установка времени отображения температуры

        if (key == 1)   { // Устанавливаем время показа температуры на -1 сек
          if (TempTime == 0) TempTime = 60; else TempTime = TempTime - 1 ;
        }
        if (key == 3)   { //Устанавливаем время показа температуры на +1 сек
          if (TempTime == 60) TempTime = 0; else TempTime = TempTime + 1;
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        digitout (0, 17);                      // отрисовываем цифры (выставляем черные точки)
        digitout (7, 17);                       // отрисовываем цифры (выставляем черные точки)
        digitout (16, TempTime / 10);       // отрисовываем цифры (выставляем черные точки)
        digitout (23, TempTime % 10);        // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 4: {                               // Если режим "4" - установка времени (час)
        if (key == 1)   { //уменьшаем часы
          if ((time.Hours) == 0) time.settime(-1, -1, 23); else time.settime(-1, -1, (time.Hours) - 1); //установит времени (час)
        }
        if (key == 3)   { //увеличиваем часы
          if ((time.Hours) == 23) time.settime(-1, -1, 0); else time.settime(-1, -1, (time.Hours) + 1); //установит времени (час)
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время
        setcolor (ColorMode);                       // задаём цвет всех элементов в зависимости от цветового режима
        //       for (int i = 0; i < 14; i++) {               // задаём цвет часов серым
        //     strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))  {
          digitout (0, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (0, time.Hours / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (7, time.Hours % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (16, time.minutes / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (23, time.minutes % 10 );      // отрисовываем цифры (выставляем черные точки)
        //  if (( time.seconds) % 2 == 0)  {        // по четным секундам разделительные точки не светятся (можно сделать затухание)
        //  strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        // }
        strip.show(); //освещаем режим
        break;
      }
    case 5: {                               // Если режим "5" - установка времени (мин). При изменении минут секунды обнуляются
        if (key == 1)   { //уменьшаем минуты
          if ((time.minutes) == 0) time.settime(0, 59); else time.settime(0, (time.minutes) - 1); //установит времени (мин)
        }
        if (key == 3)   { //увеличиваем минуты
          if ((time.minutes) == 59) time.settime(0, 0); else time.settime(0, (time.minutes) + 1); //установит времени (мин)
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время

        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        //     for (int i = 16; i < 30; i++) {               // задаём цвет минут серым
        //      strip.setPixelColor(i, 127, 127, 127);
        //   }

        if (( millis() % 1000 > 500))  {
          digitout (16, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (16, time.minutes / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (23, time.minutes % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (0, time.Hours / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (7, time.Hours % 10 );      // отрисовываем цифры (выставляем черные точки)

        //  if (( time.seconds) % 2 == 0)  {        // по четным секундам разделительные точки не светятся (можно сделать затухание)
        //  strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        // }
        strip.show(); //освещаем режим
        break;
      }
    case 6: {                               // Если режим "6" - Установка дня
        if (key == 1)   { //уменьшаем времени (мин)
          if ((time.day) == 1) time.settime(-1, -1, -1, 31); else time.settime(-1, -1, -1, (time.day) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем часы

          if ((time.day) == 31) time.settime(-1, -1, -1, 1); else time.settime(-1, -1, -1, (time.day) + 1); //установит дата
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время
        setcolor (ColorMode);                       // задаём цвет всех элементов в зависимости от цветового режима
        //     for (int i = 0; i < 14; i++) {               // задаём цвет часов серым
        //       strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))  {
          digitout (0, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (0, time.day / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (7, time.day % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (16, time.month / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (23, time.month % 10 );      // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0);     // Оставляем светиться нижнюю точку - разделитель дня и месяца
        strip.show(); //освещаем режим


        break;
      }
    case 7: {                               // Если режим "7" - Установка месяца
        if (key == 1)   { //уменьшаем времени (мин)
          if ((time.month) == 1) time.settime(-1, -1, -1, -1, 12); else time.settime(-1, -1, -1, -1, (time.month) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем часы

          if ((time.month) == 12) time.settime(-1, -1, -1, -1, 1); else time.settime(-1, -1, -1, -1, (time.month) + 1); //установит дата)
        }
        // задаём цвет всех элементов в зависимости от цветового режима
        time.gettime();                           // запрашиваем у модуля реального времени теущее время

        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима
        //       for (int i = 16; i < 30; i++) {               // задаём цвет минут серым
        //       strip.setPixelColor(i, 127, 127, 127);
        //     }

        if (( millis() % 1000 > 500))  {
          digitout (16, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (16, time.month / 10 );      // отрисовываем цифры (выставляем черные точки)
          digitout (23, time.month % 10 );      // отрисовываем цифры (выставляем черные точки)
        }
        digitout (0, time.day / 10 );      // отрисовываем цифры (выставляем черные точки)
        digitout (7, time.day % 10 );      // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0);     // Оставляем светиться нижнюю точку - разделитель дня и месяца
        strip.show(); //освещаем режим
        break;
      }
    case 8: {                               // Если режим "8"-установка года
        if (key == 1)   { //уменьшаем год
          time.settime(-1, -1, -1, -1, -1, (time.year) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем год
          time.settime(-1, -1, -1, -1, -1, (time.year) + 1); //установит дата)
        }
        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима

        //      for (int i = 0; i < 30; i++) {               // задаём цвет минут серым
        //        strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))
        {
          digitout (0, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (7, 15 );
          digitout (16, 15 );         // отрисовываем цифры (выставляем черные точки)
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (0, 2);                      // отрисовываем цифры (выставляем черные точки)
          digitout (7, 0);                       // отрисовываем цифры (выставляем черные точки)
          digitout (16, (time.year) / 10 );           // отрисовываем цифры (выставляем черные точки)
          digitout (23, (time.year) % 10);           // отрисовываем цифры (выставляем черные точки)
        }
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим
        break;
      }
    case 9: {                               // Если режим "9"   - Установка дня недели

        if (key == 1)   { //уменьшаем времени (мин)
          if ((time.weekday) == 0) time.settime(-1, -1, -1, -1, -1, 1 - 1, 6); else time.settime(-1, -1, -1, -1, -1, -1, (time.weekday) - 1); //установит дата)
        }
        if (key == 3)   { //увеличиваем часы

          if ((time.weekday) == 6) time.settime(-1, -1, -1, -1, -1, 1 - 1, 0); else time.settime(-1, -1, -1, -1, -1, -1, (time.weekday) + 1); //установит дата)
        }

        setcolor (ColorMode);                     // задаём цвет всех элементов в зависимости от цветового режима

        //      for (int i = 0; i < 30; i++) {               // задаём цвет минут серым
        //        strip.setPixelColor(i, 127, 127, 127);
        //     }
        if (( millis() % 1000 > 500))
        {
          digitout (23, 15 );         // отрисовываем цифры (выставляем черные точки)
        } else
        {
          digitout (23, (time.weekday));           // отрисовываем цифры (выставляем черные точки)
        }
        digitout (0, 16 );         // отрисовываем цифры (выставляем черные точки)
        digitout (7, 15 );
        digitout (16, 15);          // отрисовываем цифры (выставляем черные точки)
        strip.setPixelColor(14, 0, 0, 0); strip.setPixelColor(15, 0, 0, 0);
        strip.show(); //освещаем режим

        break;
      }
  }                                         // Конец обработки всех режимов
  eepromTick();                             // проверка не пора ли сохранить настройки
}                                           // Конец основного цикла



  /* Проверьте датчик освещенности (фоторезистр)и установите яркость соответственно */
void BrightnessCheck(){ // функция настройки яркости в соответствии с освещенностью
  const byte sensorPin = A0; // пин датчика освещенности
  const byte brightnessLow = 5; // низкий уровень яркости
  const byte brightnessHigh = 250; // высокий уровень яркости
  int sensorValue = digitalRead(sensorPin); // запрос с датчика
  if (sensorValue == 0) {strip.setBrightness(brightnessLow);}
  else {strip.setBrightness(brightnessHigh);}  
  };
  
void setcolor (byte ColorMode) {            // процедура, которая задаёт цвет всех элементов в зависимости от указанного цветового режима
  uint16_t i;
  if (ColorMode < 24) {                     //12 цветов по цветовому колесу
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, WheelRGB((ColorMode * 255 / 24) & 255));
      if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG((ColorMode * 256 / 24) & 255)); // для разделительных точек применяем модифицированное цветовое колесо
    }
  }
  if (ColorMode == 24) {                    // цвет -белый
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, 255, 255, 255);
    }
  }

  if (ColorMode == 25) {                    // цветовой режим -радуга с периодом 12 часов
    time.gettime();
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, WheelRGB((time.hours) * 255 / 12 & 255));                        // в этом режиме часы меняются от 1-12
      if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG((time.hours) * 255 / 12 & 255)); // для разделительных точек применяем модифицированное цветовое колесо
    }
  }
    if (ColorMode == 26) {                    // цветовой режим -радуга с периодом 24 часа
    time.gettime();
    for (i = 0; i < 30; i++) {
      strip.setPixelColor(i, WheelRGB((time.hours) * 255 / 24 & 255));                        // в этом режиме часы меняются от 1-12
      if (i == 14 or i == 15)  strip.setPixelColor(i, WheelRBG((time.hours) * 255 / 24 & 255)); // для разделительных точек применяем модифицированное цветовое колесо
    }
  }

}           //- конец процедуры установки цвета



int get_key()   //Вывод нажатой клавиши
{
  if (digitalRead(2) == 0) return 1;
  if (digitalRead(3) == 0) return 2;
  if (digitalRead(4) == 0) return 3;
  return 0;
}

void tempout() {  //процедура отображения температуры

}

// Отображение цифр
void digitout(int digitposition, int digit) {
  switch ( digit) {
    case 1: {
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 2: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 3: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 4: {
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));;
        break;
      }
    case 5: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }

    case 6: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 7: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 8: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 9: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        //strip.setPixelColor(digitposition+6, (0, 0, 0));
        break;
      }
    case 0: {
        //strip.setPixelColor(digitposition+0, (0, 0, 0));
        //strip.setPixelColor(digitposition+1, (0, 0, 0));
        //strip.setPixelColor(digitposition+2, (0, 0, 0));
        //strip.setPixelColor(digitposition+3, (0, 0, 0));
        //strip.setPixelColor(digitposition+4, (0, 0, 0));
        //strip.setPixelColor(digitposition+5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 11: {          //символ градуса цельсия 
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
          strip.setPixelColor(digitposition + 3, (0, 0, 0));   // знак "_"
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 12: {          //символ "C"  "color"
        //strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 13: {          //символ "-"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 14: {          //символ "b" "яркость"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 15: {          //символ " " "пустота"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        strip.setPixelColor(digitposition + 3, (0, 0, 0));
        strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 16: {          //символ "d" "день недели"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        // strip.setPixelColor(digitposition + 1, (0, 0, 0));
        //strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //  strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }
    case 17: {          //символ "t"
        strip.setPixelColor(digitposition + 0, (0, 0, 0));
        strip.setPixelColor(digitposition + 1, (0, 0, 0));
        strip.setPixelColor(digitposition + 2, (0, 0, 0));
        //strip.setPixelColor(digitposition + 3, (0, 0, 0));
        //strip.setPixelColor(digitposition + 4, (0, 0, 0));
        //strip.setPixelColor(digitposition + 5, (0, 0, 0));
        //  strip.setPixelColor(digitposition + 6, (0, 0, 0));
        break;
      }

  }
}

// функция цветового колеса, которое возвращает RGB цвет для ленты (аргументу 0-255 соответсует поворот колеса от 0 до 359 градусов)
uint32_t WheelRGB(byte WheelPos) {
  WheelPos = 255 - WheelPos;          // разделительные точки между часами и мунутами на базе WS2812 с измененными цветами G и B

  if (WheelPos < 85) {
    return strip.Color((255 - WheelPos * 3) , (WheelPos * 3), 0);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0,  (255 - WheelPos * 3) ,  (WheelPos * 3) );
  }
  WheelPos -= 170;
  return strip.Color( (WheelPos * 3), 0, (255 - WheelPos * 3));
}

uint32_t WheelRBG(byte WheelPos) {    // заменен оригинальный кусок кода  инвертирующий RGB в RBG (функция WheelRGB идентична WheelRBG)
  WheelPos = 255 - WheelPos;          

  if (WheelPos < 85) {
    return strip.Color((255 - WheelPos * 3) , (WheelPos * 3), 0);
  }
  if (WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0,  (255 - WheelPos * 3) ,  (WheelPos * 3) );
  }
  WheelPos -= 170;
  return strip.Color( (WheelPos * 3), 0, (255 - WheelPos * 3));
}

void updateEEPROM() {
  EEPROM.updateByte(1, NowBrigtness);
  EEPROM.updateByte(2, ColorMode);
  EEPROM.updateByte(3, TempTime);
}
void readEEPROM() {
  NowBrigtness = EEPROM.readByte(1);
  ColorMode = EEPROM.readByte(2);
  TempTime = EEPROM.readByte(3);
}
void eepromTick() {
  if (eeprom_flag)
    if (millis() - KeyPressed > 60000) {  // 60 секунд после последнего нажатия с пульта
      eeprom_flag = false;
      updateEEPROM();
    }
}

 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Как по Вашему из функции опроса яркости возвращаются значения?

видимо никак , Вы внутри ея ставите яркость ленты или в высокое или в низкое состояние, а надо получать значение с фоторезистора, нормировать его если надо и выдавать наружу функции.

типа 

return sensorValue;

правильно было бы выдавать наружу значение и в соответствующем выборе b-какой то там (==0?) делать что-то , соответствующее этому значению.

типа

if (NowBrigtness == 0)strip.setBrightness(BrightnessCheck());

Nafanya_6
Offline
Зарегистрирован: 11.10.2018

То есть надо создать. Новый блок меню в скетче. Например:

ft-0  -  не использовать фоторезистор.

ft-1  -  использовать фоторезистор.

 

BrightnessCheck();  – цикл который отвечает за фоторезистор. Его можно использовать в меню как переменную?.  Или нет?  Или он, только используется void loop() {BrightnessCheck(); } и больше негде.

 

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Nafanya_6 пишет:

BrightnessCheck();  – цикл который отвечает за фоторезистор. 

??? Уважаемый, возможно Вы имели ввиду подпрограмму? Цикла я там не заметил.

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

А отключить - так обойдите любым условным оператором.

inspiritus
Offline
Зарегистрирован: 17.12.2012

Откуда вы это берете ft-1 ft-0 b-0 b-1

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

разбирайтесь. Если хотите , чтобы вам написали, есть специальный раздел платных услуг