How to Set the Brightness with the timing for NeoPixel ring

Hi All

I need some help on this, what is the code I should use I want to set the brightness
for example, if I want to get the time between 11 PM to 7 AM at maybe brightness level at 50 and from 7 AM to 10 PM as 120

I try to get the code as below but it seems to work but not as what I need, I'm not sure how can I get in between the timing code.

if (hr > 23);
pixels.setBrightness(20);

and how can I also get the function for day of week
for example, today is Sunday and the color will be shown as red.

#include <Adafruit_NeoPixel.h>
#define PIN 6 // DataPIN on Arduino Uno
#define NUMPIXELS 12 // Total Number of Pixels for Clock

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "RTClib.h"

// Define DS1307 RTC
/*
*

  • PINOUT : GND,5V,SCL=A5, SDA=A4 of arduino
    */

RTC_DS1307 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Arduino Library Use | Adafruit NeoPixel Überguide | Adafruit Learning System
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

uint32_t magenta = pixels.Color(255, 255, 0); //Yellow
uint32_t green = pixels.Color(128, 255, 0); // light green
uint32_t blue = pixels.Color(0,255,255); // light blue
uint32_t red = pixels.Color(153,51,255); // Purple
uint32_t white = pixels.Color(80,80,80);

int hr = 0; // Hour
int mn = 0; // Minute
int ss = 0; // Second
int yy = 0; // Year
int mm = 0; // Month
int dd = 0; // Day
boolean IsDisplaySerial = true; // Set to true for Get/Set Date time in yymmddhhmmss format as input to serial communication ...

String hrs = "";

void setup() {

// put your setup code here, to run once:
pixels.begin();
//pixels.fill(color, first, count);

pixels.fill(white,0); // Fills all pixles with white color as indication of start of clock
pixels.setBrightness(180);
if (hr > 23);
pixels.setBrightness(20); // Set brightness to half for all pixels, this can be changed according to daylight ...
pixels.show();
delay(100);
pixels.clear(); // Show all 'off' so that previous shown will be cleared
delay(100);
// uint32_t color = strip.getPixelColor(11); // Get previously set color of pixel
// uint16_t n = strip.numPixels(); // How many pixels is previously set
// strip.setBrightness(64); // Set brightness to 1/4 from 0...255
Serial.begin(9600);

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}

if (! rtc.isrunning())
{
Serial.println("RTC is NOT running, let's set the time!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(DATE), F(TIME)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

// When time needs to be re-set on a previously configured device, the
// following line sets the RTC to the date & time this sketch was compiled
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2021,2,18,18,32,0));

}
}

void loop()
{

const int HourFormat12 = 12;

DateTime now = rtc.now();

hr = (now.hour()%HourFormat12) - 0; // this will be now.hour() if following if (hr != 12) is active
mn = (((now.minute()+4)/5)%HourFormat12) - 0; // Turn into 5 minute interval (For 12 pixels) and to zero base
ss = (((now.second()+4)/5)%HourFormat12) - 0; // Turn into 5 second interval (For 12 pixels) and to zero base

whiteColor(hr,mn,ss); // Show 12,3,6,9 as white indication color for better visual clock

/*
*
// in case you need to change each 5 minute hands with style

if (hr != 12)
  { hr %= 12;}
else 
  { hr = 12; }

// hr = hr - 1; // non zero based led display change according to your need;
// mn = mn - 1;
// ss = ss - 1;

*/

if (hr == mn)
  {
    pixels.setPixelColor(hr, magenta); // 0,70,125 If hour and minute is on same pixel, show different color
    //pixels.show(); // Avoide multiple show
  }
else
  {
    pixels.setPixelColor(hr, green); //  Show hour in green color
    pixels.setPixelColor(mn, blue); // Show minute in blue color 
    //pixels.show(); // Avoide multiple show
  }
pixels.setPixelColor(ss, red); // Show second in red color

// Turn on following line for any fancy effect you may want to change it to ...
// pixels.fill(red,ss-1,3); // (color,first,count) fill red color with previous second, current second, next second
pixels.show(); // Show pixels
delay(100); // Delay for better view and time to show pixels

if (IsDisplaySerial)
{
// Print current date and time before change of serial input
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(' hr:');
Serial.print(hr);
Serial.print(' mn:');
Serial.print(mn);
Serial.print(' ss:');
Serial.print(ss);
Serial.println();

    // Serial.println("Check - 01\n");
    if (Serial.available() > 0){
    
      // Serial.print("Check - 02\n");
    
          hrs = Serial.readString(); // Read serial input and parse it to year, month, date, hour, minute and second each two character input in serial monitor
      //  hrs.trim(); // In case you may have entered spaces trailing or preceeding ...
        
        yy = hrs.substring(0,2).toInt(); // Get 1st two characters as year
        mm = hrs.substring(2,4).toInt(); // 3rd,4th two characters as month
        dd = hrs.substring(4,6).toInt(); // 5th,6th two characters as day

        hr = hrs.substring(6,8).toInt();    // 7th,8th two character as hour
        mn = hrs.substring(8,10).toInt();   // 9th,10th two character as minute
        ss = hrs.substring(10,12).toInt();  // 11th,12th two character as second
        Serial.print("Input String : " );
        Serial.println(hrs);
        
        rtc.adjust(DateTime(yy,mm,dd,hr,mn));

      }
      delay(10);
      Serial.flush();
   // Serial.print(" since midnight 1/1/1970 = ");
   // Serial.print(now.unixtime());
   // Serial.print("s = ");
   // Serial.print(now.unixtime() / 86400L);
   // Serial.println("d");
   //  pixels.clear();
} // If serial display is turned on

pixels.clear(); // Clear/Off all pixels
delay(100); // Wait for better time for pixels
}

void whiteColor(int hr,int mn,int ss)
// Show 12,3,6,9 in clock as white for indication
{
uint32_t white = pixels.Color(30,30,30);
pixels.clear();
pixels.setPixelColor(0,white); // 12 hour sign
pixels.setPixelColor(1,white); // 12 hour sign
pixels.setPixelColor(2,white); // 12 hour sign
pixels.setPixelColor(3,(hr=3)?white:green); // 3 hour sign
pixels.setPixelColor(4,white); // 12 hour sign
pixels.setPixelColor(5,white); // 12 hour sign
pixels.setPixelColor(6,(hr=6)?white:green); // 6 hour sign
pixels.setPixelColor(7,white); // 12 hour sign
pixels.setPixelColor(8,white); // 12 hour sign
pixels.setPixelColor(9,(hr=9)?white:green); // 9 hour sign
pixels.setPixelColor(10,white); // 12 hour sign
pixels.setPixelColor(11,white); // 12 hour sign
pixels.show(); // Show all hour visual sign
}

Oops.

pixels.setPixelColor(6,(hr=6)?white:green);

And again

if (hr > 23);

And another.

Please remember to use code tags when posting code

Hi sorry, I'm a first-time posting here.

That's not really an excuse when just about every significant section of the forum (including this one) has this topic in it

This doesn’t mean you cannot edit your post and format the code properly

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.