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;
}