#include <FastLED.h>
#define NUM_LEDS 1
#define DATA_PIN 5
#define BUTTON_PIN 2
#define SCANNING_PIN 3
int TURNON_ledState = LOW;
unsigned long TURNON_previousMillis = 0;
const long TURNON_interval = 200;
unsigned long WAITAUTH_previousMillis = 0;
const long WAITAUTH_interval = 50;
char isAuthMode = 1;
unsigned long SCANNING_previousMillis = 0;
const long SCANNING_interval = 50;
// Define the array of leds
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(9600);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // GRB ordering is assumed
pinMode(BUTTON_PIN, INPUT);
digitalWrite(BUTTON_PIN, HIGH);
pinMode(SCANNING_PIN, INPUT);
digitalWrite(SCANNING_PIN, HIGH);
}
void loop() {
if (millis() < 3000) {
TURNON();
} else {
while (isAuthMode) {
isAuthMode = WAITAUTH();
}
SCANNING();
}
}
void TURNON() {
unsigned long currentMillis = millis();
if (currentMillis - TURNON_previousMillis >= TURNON_interval) {
TURNON_previousMillis = currentMillis;
if (TURNON_ledState == LOW) {
TURNON_ledState = HIGH;
} else {
TURNON_ledState = LOW;
}
if (TURNON_ledState == HIGH) {
leds[0] = CRGB::Red;
FastLED.show();
} else {
leds[0] = CRGB::Black;
FastLED.show();
}
}
}
char WAITAUTH() {
leds[0] = CRGB::Yellow;
FastLED.show();
unsigned long currentMillis = millis();
if (currentMillis - WAITAUTH_previousMillis >= WAITAUTH_interval) {
WAITAUTH_previousMillis = currentMillis;
if (digitalRead(BUTTON_PIN) == LOW) {
return 0;
} else {
return 1;
}
}
}
void SCANNING() {
leds[0] = CRGB::Green;
FastLED.show();
unsigned long currentMillis = millis();
if (currentMillis - SCANNING_previousMillis >= SCANNING_interval) {
SCANNING_previousMillis = currentMillis;
if (digitalRead(SCANNING_PIN) == LOW) {
leds[0] = CRGB::Black;
FastLED.show();
delay(500);
}
}
}