LED strip display program

Download button on the bottom.

This is a program we created for the LED strip display course.

#include <Adafruit_NeoPixel.h>

#define  LED_COUNT 20
#define  StripPin A2
#define  HallEffectSensorPin 6
#define  HallEffectGNDPin 5
#define  HallEffectVCCPin 4

int StartSeconds = 20;
int StartMinutes = 10;
int StartHours = 1;

int SecondsArrow;
int MinutesArrow;
int HoursArrow;

int ArrowPosition;

int HallSensorPastState = LOW;
int HallSensorRead;
int TimeForOneRotation = 1;
unsigned long RPMTimer = millis();

Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, StripPin, NEO_GRB + NEO_KHZ800);

int Color[3] = {255, 100, 150};
int SecondsColor[3] = {255, 0, 0};
int MinutesColor[3] = {0, 255, 0};
int HoursColor[3] = {0, 0, 255};

void setup(){
  pinMode(HallEffectSensorPin, INPUT);
  pinMode(HallEffectGNDPin, OUTPUT);
  pinMode(HallEffectVCCPin, OUTPUT);
  digitalWrite(5, LOW);
  digitalWrite(HallEffectVCCPin, HIGH);

  leds.begin();
  leds.setPixelColor(19, Color[0], Color[1], Color[2]);
}

void loop(){
  RPMUpdate();
  ClearLedsWithoutTheLastOne();
  ArrowPosition = StateFrom60();

  SecondsArrow = ((int) floor(( millis() / 1000) + StartSeconds) % 60);
  MinutesArrow = ((int) floor(( millis() / 60000) + StartMinutes) % 60);
  HoursArrow = ((int) floor(( millis() / 3600000) + StartHours) % 12) * 5;

  if (ArrowPosition == SecondsArrow){
    for (int i = 0; i < LED_COUNT - 3; i ++){
      leds.setPixelColor(i, SecondsColor[0], SecondsColor[1], SecondsColor[2]);
    }
  }
  
  if (ArrowPosition == MinutesArrow){
    for (int  i = 0; i < LED_COUNT - 6; i ++){
      leds.setPixelColor(i, MinutesColor[0], MinutesColor[1], MinutesColor[2]);
    }
  }
  
  if (ArrowPosition == HoursArrow){
    for (int i = 0; i < LED_COUNT - 10; i ++){
      leds.setPixelColor(i, HoursColor[0], HoursColor[1], HoursColor[2]);
    }
  }

  if (ArrowPosition % 5 == 0){
    leds.setPixelColor(18, Color[0], Color[1], Color[2]);
    leds.setPixelColor(17, Color[0], Color[1], Color[2]);
  }
  leds.show();
}

void RPMUpdate(){
  HallSensorRead = digitalRead(HallEffectSensorPin);

  if(HallSensorRead != HallSensorPastState){
    if(HallSensorRead == HIGH){
      TimeForOneRotation = millis() - RPMTimer;
      RPMTimer = millis();
      HallSensorPastState = HIGH;
    }
    else{
      HallSensorPastState = LOW;
    }
  }
}

void ClearLedsWithoutTheLastOne(){
   for(int i = 0; i < LED_COUNT - 1; i ++){leds.setPixelColor(i, 0);}
}

int StateFrom60(){
   return (int)floor(((millis() - RPMTimer) * 60) / TimeForOneRotation) % 60;
}

Download

  • #3749
  • 13 Sep 2025