25/04/2026
La cererea cumpărătorilor am realizat și varianta codului cu semnal intermitent ALB la liber, pentru sistemul de automatizare a trecerii cu calea ferată.
(Varianta inițială cu descriere și instrucțiuni complete: https://www.facebook.com/share/p/19a9eUTe89/)
Au fost necesare doar câteva modificări minore privind codul, cât despre Arduino, anodul LED-ulului alb va fi conectat la pinul D9 a plăcii și catodul va fi conectat la GND, înseriat cu un rezistor de 680 ohmi.
Când sistemul este inactiv (state = 0), LED-ul alb este activ intermitent. Acesta crește și scade treptat intensitatea luminii într-un ciclu continuu, folosind PWM. Când ajunge la maxim sau minim, face o scurtă pauză, ceea ce îl face să pară mai natural.
Când sistemul este activ (state = 1 sau 2), LED-ul alb se oprește și își reduce treptat intensitatea până se stinge complet, pentru a nu distrage atenția de la semnalizarea roșie.
Pe scurt: alb = stare de „așteptare” (fade continuu), roșu = stare de „tren activ” (alb se stinge).
🔌 Conexiuni (pini Arduino, componente, culoare fire + rezistori):
D2 -> Colector FT 1 Galben -
D3 -> Colector FT 2 Verde -
D5 -> Anod LED 1 (roșu) Galben + Rezistor 680Ω
D6 -> Anod LED 2 (roșu) Roșu + 680Ω
D9 -> Anod LED 3 (ALB) Alb + 680Ω
5V -> Anod IR 1 & 2 Albastru + 220Ω X2
GND -> Catod LED 1 & 2 & 3, Catod IR 1 & 2, Emitter FT 1 & 2 Negru -
🖥️ Monitor Serial – Testare Sistem (Arduino IDE):
Sistem pregatit. Orice senzor poate activa sistemul - cel opus opreste alimentarea d**a 2 secunde d**a eliberarea senzorului. Lumina alb intermitent activă pana la acționarea sistemului.
Daca in intervalul de 2 secunde senzorul este iar ocupat, se continua alimentarea.
>>> ACTIVAT DE S1 (ocupat) continuare alimentare
S2 liber -> interval 2s inainte de dezactivare
>>> DEZACTIVARE (S2 liber pentru intervalul de timp necesar pentru S2) - oprire alimentare...
>>> DEZACTIVAT (alimentare oprita) > ACTIVAT DE S2 (ocupat) continuare alimentare
S1 liber -> interval 2s inainte de dezactivare
>>> DEZACTIVARE (S1 liber pentru intervalul de timp necesar pentru S1) - oprire alimentare...
>>> DEZACTIVAT (alimentare oprita, activare lumina alb intermitent) 0) {
Serial.print(" pentru S"); Serial.print(whichSensor);
}
Serial.println(") - oprire alimentare...");
}
}
void finalizeStop(const char *reason, int whichSensor)
{
state = 0;
starterSensor = 0;
brightA = brightB = 0;
analogWrite(ledA, 0);
analogWrite(ledB, 0);
clearHoldStart = 0;
stopLed = -1;
Serial.print(">>> DEZACTIVAT (");
Serial.print(reason);
if (whichSensor > 0) {
Serial.print(" pentru S"); Serial.print(whichSensor);
}
Serial.println(") interval 2s inainte de dezactivare");
}
if (edge1 == -1)
{
if (clearHoldStart != 0)
{
clearHoldStart = 0;
Serial.println("S1 ocupat iar -> continuare alimentare");
}
}
if (clearHoldStart != 0 && (millis() - clearHoldStart >= clearHoldMs))
{
beginStopping("S1 liber pentru intervalul de timp necesar", 1);
}
}
if (millis() - activeStartMillis > maxActiveTimeout)
{
beginStopping("timeout", 0);
}
}
else if (state == 2)
{
if (edge1 == -1) beginActivate(1);
else if (edge2 == -1) beginActivate(2);
}
// LED-uri ROSII
unsigned long now = millis();
if (now - lastFadeMillis >= fadeInterval)
{
lastFadeMillis += fadeInterval;
if (state == 1)
{
if (curLed == 0)
{
if (phaseFadeIn)
{
brightA += fadeStep;
if (brightA >= 255) { brightA = 255; phaseFadeIn = false; }
}
else
{
brightA -= fadeStep;
if (brightA = 255) { brightB = 255; phaseFadeIn = false; }
}
else
{
brightB -= fadeStep;
if (brightB 0)
{
brightA -= fadeStep;
if (brightA < 0) brightA = 0;
analogWrite(ledA, brightA);
}
else finalizeStop("alimentare oprita, activare lumina alb intermitent", 0);
}
else if (stopLed == 1)
{
if (brightB > 0)
{
brightB -= fadeStep;
if (brightB < 0) brightB = 0;
analogWrite(ledB, brightB);
}
else finalizeStop("alimentare oprita, activare lumina alb intermitent", 0);
}
}
}
unsigned long nowWhite = millis();
if (nowWhite - lastWhiteFade >= whiteInterval)
{
lastWhiteFade = nowWhite;
if (state == 0)
{
if (whiteHolding)
{
if (millis() - whiteHoldStart >= whiteHoldTime)
{
whiteHolding = false;
whiteFadeIn = !whiteFadeIn;
}
}
else
{
if (whiteFadeIn)
{
whiteBrightness += whiteFadeStep;
if (whiteBrightness >= 255)
{
whiteBrightness = 255;
whiteHolding = true;
whiteHoldStart = millis();
}
}
else
{
whiteBrightness -= whiteFadeStep;
if (whiteBrightness 0)
{
whiteBrightness -= whiteFadeStep;
if (whiteBrightness < 0) whiteBrightness = 0;
}
}
analogWrite(ledWhite, whiteBrightness);
}
delay(1);
}
//Realizat integral de Turzai Edward Marius.