#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#define MOSFET_PIN 7
MFRC522 rfid(SS_PIN, RST_PIN); // Create MFRC522 instance
unsigned long timer = 0;
unsigned long delayTimer = 0;
unsigned long timerMos = 0;
bool mosStat = false;
bool rfidDetected = false;
unsigned long interMos = 15000;
unsigned long interTimer = 60000;
int delayTime = 200;
//LEDs
#define FASTLED_ALLOW_INTERRUPTS 0
#include <FastLED.h>
FASTLED_USING_NAMESPACE
#define DATA_PIN 6
#define NUM_LEDS 40
#define MAX_POWER_MILLIAMPS 500
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
//////////////////////////////////////////////////////////////////////////
CRGB leds[NUM_LEDS];
CRGBPalette16 pacifica_palette_1 =
{ 0x000580, 0x000409, 0x0003A3, 0x00030D, 0x000210, 0x000212, 0x000114, 0x000117,
0x000019, 0x00001C, 0x0000BB, 0x000031, 0x0030F3, 0x000046, 0x14554B, 0x28AA50 };
CRGBPalette16 pacifica_palette_2 =
{ 0x000507, 0x000409, 0x00030B, 0x00030D, 0x000210, 0x000212, 0x000114, 0x000117,
0x000019, 0x00001C, 0x000026, 0x000031, 0x00003B, 0x000046, 0x0C5F52, 0x19BE5F };
CRGBPalette16 pacifica_palette_3 =
{ 0x000208, 0x00030E, 0x000514, 0x00061A, 0x000820, 0x000927, 0x000B2D, 0x000C33,
0x000E39, 0x001040, 0x001450, 0x001860, 0x001C70, 0x002080, 0x1040BF, 0x2060FF };
void setup() {
pinMode(MOSFET_PIN, OUTPUT); // Set MOSFET pin as OUTPUT
digitalWrite(MOSFET_PIN, LOW); // Set MOSFET pin LOW initially
Serial.begin(9600); // Initialize serial communication
SPI.begin(); // Initialize SPI bus
rfid.PCD_Init(); // Initialize MFRC522 RFID module
// delay(100); // 3 second delay for boot recovery, and a moment of silence
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS)
.setCorrection( TypicalLEDStrip );
FastLED.setMaxPowerInVoltsAndMilliamps( 5, MAX_POWER_MILLIAMPS);
Serial.println("zbilz rozdzke");
FastLED.clear(); // clear all pixel data
FastLED.show();
pinMode(4, INPUT);
}
void loop() {
unsigned long currentTime5 = millis();
if (mosStat == 0) {
if (currentTime5 - delayTimer >= delayTime) {
delayTimer = currentTime5;
// if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
if (digitalRead(4)==HIGH) {
Serial.println("RFID detected");
delayTime = 800;
rfidDetected = true;
mosStat = 1;
digitalWrite(MOSFET_PIN, !digitalRead(MOSFET_PIN));
timer = millis();
timerMos = millis();
} else {
delayTime = 200;
}
}
} else {
EVERY_N_MILLISECONDS(5) {
// Increment the four "color index start" counters, one for each wave layer.
// Each is incremented at a different speed, and the speeds vary over time.
static uint16_t sCIStart1, sCIStart2, sCIStart3, sCIStart4;
static uint32_t sLastms = 0;
uint32_t ms = GET_MILLIS();
uint32_t deltams = ms - sLastms;
sLastms = ms;
uint16_t speedfactor1 = beatsin16(3, 179, 269);
uint16_t speedfactor2 = beatsin16(4, 179, 269);
uint32_t deltams1 = (deltams * speedfactor1) / 256;
uint32_t deltams2 = (deltams * speedfactor2) / 256;
uint32_t deltams21 = (deltams1 + deltams2) / 2;
sCIStart1 += (deltams1 * beatsin88(1011,10,13));
sCIStart2 -= (deltams21 * beatsin88(777,8,11));
sCIStart3 -= (deltams1 * beatsin88(501,5,7));
sCIStart4 -= (deltams2 * beatsin88(257,4,6));
// Clear out the LED array to a dim background blue-green
fill_solid( leds, NUM_LEDS, CRGB( 2, 6, 10));
// Render each of four layers, with different scales and speeds, that vary over time
pacifica_one_layer( pacifica_palette_1, sCIStart1, beatsin16( 3, 11 * 256, 14 * 256), beatsin8( 10, 70, 130), 0-beat16( 301) );
pacifica_one_layer( pacifica_palette_2, sCIStart2, beatsin16( 4, 6 * 256, 9 * 256), beatsin8( 17, 40, 80), beat16( 401) );
pacifica_one_layer( pacifica_palette_3, sCIStart3, 6 * 256, beatsin8( 9, 10,38), 0-beat16(503));
pacifica_one_layer( pacifica_palette_3, sCIStart4, 5 * 256, beatsin8( 8, 10,28), beat16(601));
FastLED.show();}
if (currentTime5 - delayTimer >= delayTime) {
delayTimer = currentTime5;
unsigned long currentTime = millis();
Serial.println(currentTime);
if (currentTime - timer >= interTimer) {
timer = currentTime;
mosStat = 0;
digitalWrite(MOSFET_PIN, LOW);
FastLED.clear(); // clear all pixel data
FastLED.show();
} else {
// if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
if (digitalRead(4)==HIGH) {
Serial.println("RFID detected");
rfidDetected = true;
mosStat = 0;
digitalWrite(MOSFET_PIN, LOW);
FastLED.clear(); // clear all pixel data
FastLED.show();
delayTime = 800;
} else {
delayTime = 200;
unsigned long currentTimemos = millis();
if (currentTimemos - timerMos >= interMos) {
timerMos = currentTimemos;
interMos = 3000;
digitalWrite(MOSFET_PIN, !digitalRead(MOSFET_PIN));
}
}
}
}
}
}
// Add one layer of waves into the led array
void pacifica_one_layer( CRGBPalette16& p, uint16_t cistart, uint16_t wavescale, uint8_t bri, uint16_t ioff)
{
uint16_t ci = cistart;
uint16_t waveangle = ioff;
uint16_t wavescale_half = (wavescale / 2) + 20;
for( uint16_t i = 0; i < NUM_LEDS; i++) {
waveangle += 250;
uint16_t s16 = sin16( waveangle ) + 32768;
uint16_t cs = scale16( s16 , wavescale_half ) + wavescale_half;
ci += cs;
uint16_t sindex16 = sin16( ci) + 32768;
uint8_t sindex8 = scale16( sindex16, 240);
CRGB c = ColorFromPalette( p, sindex8, bri, LINEARBLEND);
leds[i] += c;
}
}